Edited at

【Unity】トラブルシューティング集

Unityを利用していて、何か困ったことがあって解決法を見つけたらここに書き残すことにします。なお、初めてこの記事を書いたときはまだUnity入門〜初級みたいなレベルです。どんどん書き足したいと思います。あまりに増えたときは記事を分けるかもしれません。


オブジェクトを積み上げた時に安定しない

2018.11.22 Unity2018.2.3f1


RigidbodyのDragを大きくする

Dragは空気抵抗のことを指します。これを10のように大きくしてみましょう。高く積めば積むほど大きくしないと安定しにくいです。なお、公式では


Drag の通常の値は、.001 (金属の塊) と 10 (羽) の間です。


とあります。


物理演算を無効にする

上記の方法だと、衝突などで現実的な動きをしてくれないでしょう。別の方法は、スクリプトで以下の関数を用いることです。上から物理演算を止める・始める関数です。

this.GetComponent<Rigidbody>().sleep()

this.GetComponent<Rigidbody>().WakeUp()

"this"はGameObject型の変数です。安定させたいオブジェクトに付けたスクリプトで利用すればいいです。

参考サイト:

ほぼ上側のサイトの情報です。画像や動画付きで解説しています。

Unityの物理演算(Rigidbody)を設定したオブジェクトが崩れたりバラけたりして安定しない

Rigidbody - Unityマニュアル


オブジェクトの名前を変えたい

2018.11.22 Unity2018.2.3f1


GameObject型のクラスメンバーに文字列代入

Instantiate関数でオブジェクトを複数生成すると同じ名前のオブジェクトが生成した分だけできてしまいます。これでは検索ができなくて不便になる時があるでしょう。

GameObject型の変数を用意して、そのクラスメンバーnameに文字列を代入しましょう。例えば、GameObject型の変数objに生成したオブジェクトを代入したならば、

obj.name = "block1"

とすると名称は"block1"になります。これで検索がしやすくなります。


どのmaterialを使ったかコンソールに表示させたい

2018.11.24 Unity2018.2.3f1


GetComponent< Renderer >().materialを使う

オブジェクトをスクリプトで生成して名前変えたとなったら、もともとどのprefabやmaterialを使ったかは一つずつしか見られなくなります(Inspectorビューで参照可)。多数生成させた時にコンソールで一気に参照したいこともあるでしょう。オブジェクトobj(GameObject型)のmaterialについては次のような文で参照できます。

obj.GetComponent<Renderer>().material

prefabについても調べましたが、やってもうまくいかなかったので見つけたら追加します。