20190327のUnityに関する記事は5件です。

【Unity】残像を残しながらオブジェクトを拡大・縮小する

はじめに

タイトルの通りです。
アントマン&ワスプの大きさが変わるラボ(https://youtu.be/8_rTIAOohas の30秒あたり)に衝撃を受けたので再現してみました。

できたもの

縮小

5a28b8d38073102f667c200d164f3ae4 (1).gif
これでゴーストに襲撃されても安心

拡大

be976b87425f23119b10b77ee202ef23.gif
うーん(微妙)

方針

  • 拡大・縮小したいオブジェクトのPrefabを作る
  • 残像分(5個くらい)配列を作り、少しずつサイズとアルファ値を変化させる
  • Updateにぶっこむと処理が速すぎて残像が残らないので、コルーチンを使って遅延させる

コード

C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Shrink : MonoBehaviour
{
    public GameObject objPrefab;
    GameObject[] obj = new GameObject[5];
    //float TimeCount = 0;
    bool small = false;
    bool big = false;
    int count = 4;
    float a = 0.6f;
    float size;
    private Material material;

    void Start()
    {
        obj[0] = Instantiate(objPrefab) as GameObject;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            small = true;
        }

            if (small == true)
        {
            Coroutine coroutine = StartCoroutine("SizeGenerator", 0.05f);
            small = false;
        }

        if (Input.GetMouseButtonDown(1))
        {
            big = true;
        }

        if (big == true)
        {
            Coroutine coroutine = StartCoroutine("SizeGenerator", 0.05f);
            big = false;
        }
    }

    private IEnumerator SizeGenerator(float waitTime)
    {
        if (small == true)
        {
          size = 0.5f;
        }

        if (big == true)
        {
            size = 2.0f;
        }

        for (int i = 1; i <= count; i++)
        {
            for (int j = i; j >= 0; j--)
            {
                if (i == j)
                {
                    obj[i] = Instantiate(objPrefab) as GameObject;
                    float alpha = Mathf.Pow(a, j);
                    obj[j].GetComponent<Renderer>().material.SetFloat("_Alpha", alpha);
                }
                else
                {
                    obj[j].transform.localScale = obj[j].transform.localScale * size;
                }    
            }
            yield return new WaitForSeconds(waitTime);
        }

        //destroyする用
        for(int k=0; k<8; k++)
        {
            //配列回すようループ
            for (int l = obj.Length-1; l > 0; l--)
            {
                float alpha = Mathf.Pow(a, l)* Mathf.Pow(a, k);
                if (obj[l] != null)
                {
                    obj[l].GetComponent<Renderer>().material.SetFloat("_Alpha", alpha/2);
                }
                if (alpha < 0.05)
                {
                    Destroy(obj[l]);
                }
            }
            yield return new WaitForSeconds(waitTime);
        }
    }
}

左クリックで縮小、右クリックで拡大

シェーダ

Shader "Custom/Custom"
{
    Properties{
    _MainTex("Water Texture", 2D) = "white" {}
    _Alpha("Alpha", Range(0,1)) = 1.0
    }

    SubShader{
        Tags { "Queue" = "Transparent" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Standard alpha:fade 
        #pragma target 3.0

        struct Input {
            float2 uv_MainTex;
        };

    half _Alpha;
    sampler2D _MainTex;

        void surf(Input IN, inout SurfaceOutputStandard o) {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = _Alpha;
        }
        ENDCG
    }
        FallBack "Diffuse"
}

テクスチャとアルファ値のみのsurfaceシェーダ

注意

  • 残像処理を行うために複製したオブジェクト同士の衝突判定を無くす必要あり
  • 拡大の場合、オブジェクトのRigidbody→is Kinematicにチェックを入れないとオブジェクトがふっ飛ぶ(なぜ...?)

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity VS Codeでコードヒントやクラスが補完されない場合

VS Code でUnity のScript を書く際に、クラス名を入力しても補完されず、Using System.Collections; などにも赤いアンダーラインが引かれていた。

以下のサイトで紹介されているpkg をインストールしたら直った。
http://tsubakit1.hateblo.jp/entry/2018/07/10/230752

最初にUnity をインストールした時にミスったのかな。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity VS Codeでコードヒントやクラスが補完されない

VS Code でUnity のScript を書く際に、クラス名を入力しても補完されず、Using System.Collections; などにも赤いアンダーラインが引かれていた。

以下のサイトで紹介されているpkg をインストールしたら直った。
http://tsubakit1.hateblo.jp/entry/2018/07/10/230752

最初にUnity をインストールした時にミスったのかな。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

業界業種未経験者からのエンジニア転職記 その1

こんにちはー!

業界業種未経験でITエンジニアに転職活動中のJakigannです...。
新卒入社してから約3年ギリギリ第二新卒いけるかの境目なので前から行きたかったITエンジニアに思い切って転職活動中です。
もう26だから業界変えるなら今しかないんじゃ...。という危機感がありまして...。

※以下日記のようなものなので読んで得られるものはないかもしれません

プログラミングは独学でUnityとC#を触ってゲームを(幼稚園児でも作れるレベル)作ってました。
後、学生時代にVBAをちょろっとやったぐらい。
ゲーム業界での経験を積みたくて入りやすいソーシャルゲーム運用・開発会社を中心に応募しています。

でも実際の業務で求められるスキルというか熟練度がわからなくて心配です...。
Unityなら学生でも勉強していけるので正直「専門の新卒レベル」ぐらいの実力しかないと思ってます。

それで色々と今後について悩んでいるのですが...。
何で悩んでいるのかと言えば「選択肢の多さ」なんですよ。

  1. 十数社受けて現在面接まで行ったのが数社、どれもソーシャルゲーム会社ですが面接に進んでいるのが数社あって結果待ち(つまり無い内定状態

  2. 業界業種未経験でも偽装派k...ゴホゴホならいけますからね(根拠のない自信

  3. 仮に全滅してもRubyとかのスクール行って、何かポートフォリオになるもの作って、転職活動すれば大体大丈夫じゃない?(根拠なし

4.在職中の会社からIT部に異動したらどうだ?とも声を掛けて頂いていてどれにすればええのやら:frowning2:

②は最終手段ですが恐らーくどこかしら受かりますし(根拠のない自信)
③も生活費やらスクール代やらで数十万円(住居手当とかがなくなるため)は掛かりますがその分勉強に打ち込めるので安いもんだと思ってます。
④は経済的に安定しながら実務兼勉強できるので中々魅力的...だけどシステム開発なのでJavaしか使わないかも?(確認中
①も正直なところソシャゲーは全くやらないので興味ない...けどいきなりコンシューマーは無理&ゲーム業界での経験積みたい^o^

「お前ぶれっぶれじゃねーか!」と怒られそうですが
いやだってIT言語(特にWeb系)ならどこでもいつでも勉強できるじゃないですか!
Web系言語(Html+CSS,JavaScript,PHPやらやら)も最近勉強してるんですが楽しくて...^o^
C#だと闇の中をウロウロする感じですけどこれらは成果が目に見えやすくていいですね。
Html+CSSはあまりにもわかりやすすぎて感動しました。(その分使えても自慢になりませんが...

Html+CSSは勉強(Progateとかで)で慣れてきたので今日か明日あたりからウェブページコピーしていって、早くコーディング案件を受けれるぐらいに慣れていきたいですね(副業のため&やっててたのしい

「とりあえずお前は何をしたいんだ?」と言われると当面の目標というかやりたいことがあって
1. UE4でFPSを作る
2. UE4でシェーダーゴリゴリのカットイン(格闘ゲーのフィニッシュ)を作る
3. Web系言語を使って月5万ぐらいの副収入を得る
4. UE4でVRゲーかミニゲーム作ってどこかに出展する

「Unityどこいったの!?」となりますが正直に言うとグラフィックの質感がUnityよりUE4の方が好きなんですよね...なのでUE4は絶対に極めたい!
でもUE4は最近やり始めたばかりだし、C/C++なんて触ったことないんですよね^o^
BlueprintがあるのでC++は極めなくても良さそうですが実際その手のゲーム開発会社に行くとなると
C++でもコーディングするんじゃないかな?と考えてます。
むしろBlueprintだけなら誰でもできるので競合が:frowning2:
それとUE4募集している会社様がUnityと比べると圧倒的に少なくて^o^ 後スクールもない?(東京

結論から言うと"UE4やりながらWeb系の勉強もやりたい"が本音ですね。
なんでWeb系もやるのかというと、基本的にWeb系(特にRuby)だとベンチャーがよく採用しているそうなので0から実装からのマーケティングまでやる実務経験を積めそうなのがいいんですよ。
それに学習しやすいので成果が出るまで短いというのもいいですよね。
マーケティングの勉強にもなりますし、何よりホワイト(脳内ベンチャー図)なので定時上がり後にUE4で遊べるんじゃないかーってところが夢ありますね...! (そのためにポートフォリオ作らなきゃ^o^
交渉してリモートワークできれば空いた時間で勉強&UE4コネコネでスキルマックスエンドじゃないですか!!(希望的観測

ソシャゲー会社(まだ受かってない)はゲーム業界での経験積みながらUnityやらC#やらの勉強できるのがいいですよね。実際のゲーム運営がどうなってるのかわかるのもいいですし。
ただ恐らく超激務の可能性が...。実務でやりながら勉強はできますけど、業務外でも勉強していかないと詰みだと思ってるので恒常的に残業しているような環境にはあまり身を置きたくないのが心情です。
(身体にも悪いですしね) 何よりソシャゲー自体に興味が...^o^

結局自分でゲーム作るとなってもTwitterやらブログやらでコツコツ宣伝しないといけないのでWeb系の実務(コーディング,SEO,マーケティング)は絶対役に立つと思ってます。
そう考えるとWeb系に入ってOFFで趣味程度にコツコツUE4で遊んで色々と作って出展も十分アリだと思うんですよ。言語は違いますが開発経験は付くので悪くないじゃん...!という感じです。

なので結論を申し上げますと...

        "ポートフォリオができるまで、どこでどんな経験を積みながら時間を稼ぐか?"

という問題になってるんですよ。
ポートフォリオあれば転職できる根拠にはなりませんがコツコツやってればどこか採ってくれるんじゃないかって思ってます(希望的観測)

とこんな感じで色々と考えるとパターンがありすぎてドンガラガッシャン状態なんですよ。
皆さんだったらどんなパターンを選ぶのか気になります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「Unity アセットバンドル完全に理解した」勉強会まとめ

勉強会に参加したので、振り返りやすいようにまとめたものです。

AssetBundleはすでに出来上がっているものを使ってきたのみで、自分で組んでみたことがないので興味がありました。

詳細については、 ライブ配信で確認できます。

勉強会の発表内容

お前はまだ本当のAssetBundleを知らない

資料:お前はまだ本当のAssetBundleを知らない

アセットバンドル以外でもリソースを外部から引っ張ってくる方法があり、用途に応じて使い分けましょうという発表でした。

AssetBundleを使う以外にも、Byteやスクリプトで生成する方法を紹介していました。

ごっこランドを支える技術 ~AssetBundle編~

資料 : ごっこランドを支える技術 ~AssetBUndle編~

Unityアンバサダーもんりぃ先生の発表。
これからAssetBundleを理解したい人向けの発表で、基礎的な部分を紹介してもらえました。

以下の、AssetBundleの構成要素を紹介してくれました。
- AssetBundle Name/Variant
- AssetBundle Manifest
- AssetBundle Request
- AssetBundle CreateRequest
- UnityWebRequestAssetBundle
- Caching
- Streamed Scene AssetBundle
- BuildPipeline.BuildAssetBundles
- AssetBundle Build

個人的には、Streamed Scene AssetBundleというScene自体をAssetBundleとして固めることができる事に興味を持ちました。

これは次回の社内勉強会で深掘りして紹介してみたい。

誰もaddressableを語らないのなら...俺が語るしかないッ

資料:誰もaddressableを語らないのなら...俺が語るしかないッ

かの有名なテラシュールブログ中の人が登壇してました。
そもそもaddressableについて認知していなかったので、いいキッカケになったと思います。

addressableの基礎から使う流れまで紹介してもらえました。
聞いた限りめちゃくちゃ便利。AssetBundle要らないかも?

AssetBundleのダウンロードサイズ表示対応

資料: AssetBundleのダウンロードサイズ表示対応

AppleStoreの規約更新(ダウンロードサイズを明記する)に対応するためにやった事を紹介していました。まだ申請を通していないので、パスできるか分からないが、こういう方法もあるとのことです。

Manifestで生成されるyamlファイルをpythonを使い、os.path.getsize() 等でサイズ情報を取得、書き込むようにしていました。

Unload(true)って使ってますか?

資料:Unload(true)って使ってますか?

まとめてみると、以下のような感じでした。

Unload(false)だと、全ての参照が切れていれば、Resources.UnloadUnusedAssets()を呼べば解放できるけど、全ての読み込まれたアセットを検索してしまうため重めの処理である。

→ Unload(true)だと任意の単位でいくつかのアセット解放を行える。

また、Asset Bundleは追加コンテンツ実装のための機能としてだけでなく、アセットの解放を効果的に行うこともできる機能です。

サーバーなしでAssetBundleを使う

資料:サーバーなしでAssetBundleを使う

そもそもサーバーなしでAssetBundleを使うことがあるというのを知りました。

なぜローカルで使ったかの理由は下記の通りでした。
- オフラインでもゲームをプレイさせたい(Resourcesにリソースを入れたくなかった)
- 会社がストレージサーバを用意している間の一時対応
- ストレージ代を少しでもかけたくない

結論、以下の理由からサーバーを使ってAssetBundleは運用しましょう()
- アプリのDLサイズを小さくできる、
- リソースの差し替えをバイナリの更新無しでできる

複数プロジェクトで同一AssetBundleを使い回す時の注意点

資料:複数プロジェクトで同一AssetBundleを使い回す時の注意点

基本的にやるべきことではないのですが、どうしても共有をしたい場合にやった方法を紹介していました。

壁となったのはAssetBundleのキャッシュと、GUIDだったとの事です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む