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

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

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

++テクスチャの拡大・縮小

Texutre2Dのサイズ変更【Unity】 - (:3[kanのメモ帳]

TextureScale - Unify Community Wiki

 

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

 

++Shaderで%を使う場合

shaderで%を使って計算する場合、

(int)X%Y;

のように明示的にキャストしないと意図せぬ値になる場合がある。

 

++VRCでアバターアップロードしようとしたら、UnityEditor could not be found とか出る場合

using UnityEditor

とUnityEditorのネームスペースを使ってコールしているメソッドの行を

#if UNITY_EDITOR

#endif

で囲む。

 

++shaderが動かないと思ったらここをオンにしてないと動かないのを忘れていた

f:id:arumogina:20190705045331p:plain

 

++Unityでアニメーションを作成するときrecoding modeを使う場合、対象のオブジェクトにアニメーションが入ってる場合、アニメーションクリップがそれに切り替わってしまう。CreateEmptyで空のオブジェクトに下に移動させれば解決できる。

 

++shaderのQueueのサイズはint型と同じ

 

++shaderで頂点を移動させる系の処理を行っていて処理が上手くいかない場合はBoundingBoxを変える必要があるかもしれない。カメラ外から出てしまい機能してない可能性がある 

 

++

ZTest Greaterの場合、Z値が書き込まれてない箇所は描画されない。なので、RenderQueueが低く、他の物より前に描画される場合、Z値も書き込まれてないので描画されない.

ZTest Lessの場合は描画される。

またこのことから

RenderQueue=>ZTestの順で実行されるっぽい。

++UGUIのコールバックのメソッド登録はスクリプトからでも出来る

uGUIのイベントコールバック登録をコードから行う方法とUnityActionデリゲート群 - Qiita

 

++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()内で書いたら通った。