【Unity】Terrainやオブジェクトを物体がすり抜けないように対策する

日々鍛錬!!ゲーム開発ライフ

【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でした!!

Tags:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です