2015年6月14日日曜日

[Unity]NavMeshAgent.Stopのワンポイント ピタッと止める in Unity 5

Unity 5から、NavMeshAgent.Stop()のstopUpdatesオプションが削除されたので、どうにかしようとした。

[Unity]NavMeshAgent.Stopのワンポイント ピタッと止める
http://ttwco.blogspot.jp/2015/04/unitynavmeshagentstop.html 

デフォルトのStop()はアクセラレーションが効いて即座に止まらず少し滑ってから止まるので、
ゲームポーズとかの実装に支障がある。
そこでUnity 4まで NavMeshAgent.Stop(true) としていたのが、Unity 5で使えなくなったので代替手段を探したというお話。

結論、Stop()を呼ぶ前にvelocityの値を0にすることで解決。
 navMeshAgent = GetComponent<NavMeshAgent>();

        navMeshAgent.velocity = Vector3.zero;
        navMeshAgent.Stop();

こうね。

ここに辿り着くまでの軌跡はUnity Communityにも投稿しました。
http://forum.unity3d.com/threads/solved-how-can-i-stop-navmesh-agent-sliding-in-unity5.332233/

"NavMeshAgent.updatePosition = false".で行けるかなと思ったんですが、このオプションはNavMeshAgentを止めるわけではなく、親コンポーネントをAgentに追従させるのを辞めるという謎挙動。
シーンビュー見てるとキャラクターからNavMeshAgentだけ剥がれて動く様子が見れます。なんのために使うオプションなんだろう...

0 件のコメント:

コメントを投稿