イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Unity しょうもないミス + 小ネタ集

Unityのしょうもないミスと小ネタをここにまとめていく。

 

++DontDestoryOnLoadにするオブジェクトはルート階層に置く必要がある

 

++OnEnable()は親オブジェクトのアクティブ化に対しても反応する

 

++Prefab化したオブジェクトを変更できなくなった場合

右クリック=>UnPack Prefab

f:id:arumogina:20190328032037p:plain

 

++SerializeFieldを使うとインスペクタから変数を初期化出来るが、アクセサをつけるとインスペクタから消えてしまう

[SerializeField] ParticleSystem DestroyPs;

はインスペクタに表示されるが

[SerializeField] ParticleSystem DestroyPs {get;}

だとインスペクタから消える

 

++Standard Assetsを適用してるのに歩けない、と思っていたら、ビルド設定をVRゲーム用に設定していたからであった

 

++Unity Clothコンポーネントを複数メッシュに付与してそのクロスコンポーネントの球同士が接触していると、メッシュが荒ぶってしまう。

 

++Unityクロスコンポーネントを付加するとメッシュの一部が消える問題に遭遇。どうもクロスコンポーネントを付与すると1つを残してマテリアルが剥がれてしまうようだ

 

++取り込んだモデルが透明になる場合、

マテリアルのRendering TypeがTranspearentになってしまってるのが原因。Opaqueに直す。なお、デフォルトだとマテリアルの設定を変えられないので、prefabのモデルをクリックし、インスペクタのMaterialに移動、LocationのUse External Material(Legacy)に変更しApplyを押す

 

++メッシュを統合すると片方のテクスチャが剥がれる?場合

UVマップが一致してないのが原因。UVマップを同じにすればいい。

+を押せばUVMapが生成されるのでこれにすれば楽。

f:id:arumogina:20190202135748p:plain

 

 

++モデルをUnityに取り込むときはテクスチャを先に入れておいた方がよい。よくわかってないが、先にテクスチャを入れておかないとUnity上でモデルにテクスチャが自動で貼り付けられない

 

++UnityでWebGLでビルドすると、デフォルトのフォントに日本語が含まれてないために日本語が表示されない。日本語を使うには日本語のフォントを含める必要がある。

UnityのWebGLで日本語を表示する - Qiita

 

++UnityでWebGLでビルドするときIL2CPPを使うっぽいのだが、これがすごく時間がかかる。SSDにしたり、Windows Defenderをオフにすると早くなるらしい

IL2CPP ビルド時間の最適化 - Unity マニュアル

++

OnSceneLoadとStartだとLoad=>Startの順で呼ばれる

 

++日本語化すると一部のコンポーネント名まで日本語化されて英語で検索しても出てこないときがある。

 

++Start()はインスタンス化した時点でのシーンでしか呼ばれないっぽい。DontDestoryOnLoadしたら次のシーンでは呼ばれない

 

++エラーがあるとスクリプトのアタッチが出来ないっぽい。

 

++EasySoundManagerというアセットを導入してリファレンスを見ながら作業していたが、特定のメソッドについて存在しない、というエラーが返ってくる。調べてみると、ストアに置かれてるアセットが古いもので、リファレンスが更新されていたのが原因であった。GitHubから最新版を落としてくることで解決

 

++オブジェクトにそのコンポーネントを付加してないのに(AudioSorceなど)そのオブジェクトに追加したスクリプト内で

gameObject.GetComponent<AudioSorce>とかしてた。 

 

++オーディオ関連の操作がおかしい(例えば、ゲーム開始時に再生、しないようにしてるのにBGMが流れる)と思ったら、知らない間に全く別のオブジェクトにBGMを適応していた。

 

++Unityのカメラプレビューの映像とゲーム実行時のシーンが一致しない。=>良くわからないままUnityを再起動したら回復したので、Unityのバグだったんではないか、という気がする。

 

++スクリプト側で速度の変数をいじっても実行時に変更されない

=>変数をpublicで公開しており、インスペクタで設定された値が設定されていた。

 

++GetComponent<Rigidbody>();でエラーが出る。

メンバ変数を宣言するところに直接書いてたら出た。

start()内で書いたら通った。