【Unity】Terrainやオブジェクトを物体がすり抜けないように対策する
UnityとUnrealEngineでゲーム開発中の「Exceliaゲーム開発部」の部員Eです。
本日はUnityのNavimeshAgentでつまった事があったのでメモです。
内容としては、
・NavimeshAgentとRigidbodyの設定次第でバグってすり抜ける。
・transform.positionはすり抜けるのでAddForceで対策。
をお送りいたします。
Terrainからキャラクターやオブジェクトが落ちていく場合
NavimeshAgentとRigidbodyは共存できないらしく、NavimeshAgentを使う場合は、
Rigidbodyの設定項目の「IsKinematic」にチェックを入れないといけないだとか。
これの設定をきちんとしないと、
オブジェクトが地面をすり抜けたり・地面の上をぐるぐる回転したりとバグになりました。
長い間、Terrainから敵キャラが落ちていくバグに悩まされておりましたが、
この設定をしてあげたらTerrainをすり抜けて奈落へ落ちていくことは無くなりました。
*NavimeshAgentを使わない場合でRigidbodyのみを使用する場合は、
「IsKinematic」のチェックをオフにして使用すると良いみたいです。
ステージに配置したオブジェクト同士がすり抜ける場合
TerrainからNavimeshAgentを使ったキャラクターが落ちていくバグは、上記で改善できます。
それでは、移動に「transform.position」を使った時、ステージ上に配置されたオブジェクトを、
すり抜けて移動する場合はどう対応するのでしょうか?
オブジェクトがオブジェクトをすり抜けたりする時は、可能なら下記で対応します。
自分の開発時は「transform.position」の使用をやめて、
代替案として「AddForce」を使うことで、オブジェクト同士のすり抜けを修正しました。
また、初歩的ではありますが、NavimeshAgentを更新してない場合もあると思うので、
慣れてない方は「ベイクし直したか」その辺りも確認してください。
移動方法の処理の違いによるすり抜け
すり抜ける原因として「transform.position」の移動を使っている場合は、
毎回座標をワープしているようなイメージの移動なので、
オブジェクトを貫通する場合があるとのことでした。
対して「AddForce」は物体に力を連続的にかけて押しているイメージだそうで、
きちんと物理的な接触が生まれるようです。
最後になりますが、
UnityでNavimeshAgentを使ってキャラクターを動かす際にバグって困った方いらっしゃいましたら、
上記の点を注意して確認してみてください。
transform.positionで移動させているものを、AddForceに切り替えるのは結構手間ですが、
すり抜けが起きなくなるので、調整する価値はありそうです。
今回は以上です。
今後も、Unityについての記事を中心に、UnrealEngine等の情報もたまに載せていきますので、
よろしくお願いします。
部員Eでした!!