Page 1 of 1

AgentControllerのAgentを動的に変更する方法

Posted: 2024/06/13 10:07
by karaage
NavMeshでのキャラの移動をキャラ以外のオブジェクトに付けたArborFSMで行わせていました。
Agent Move To Transfromを使用してキャラを目的地まで移動させていました。
プレハブより上の階層のオブジェクトは外れてしまうのでオブジェクトをプレハブにした際にAgentにアタッチしていたNavmeshAgentのついてるキャラの参照が外れてしまうのでスクリプトから生成時にAgentの中身をアタッチするシステムを作ろうとしたのですが、
AgentControllerのAgentを参照するタイミングがAwakeだったのでその手法は使えませんでした。
agentの中身を動的に変更する方法はありますでしょうか?Image

Re: AgentControllerのAgentを動的に変更する方法

Posted: 2024/06/13 23:49
by caitsithware
図解していただきありがとうございます。

確かにAgentController.Awakeメソッドが呼ばれる時点でNavMeshAgentが設定済み前提の処理になっていました。
後からでも設定できるように変更いたします。

対応までの間の暫定対処方法は以下の通りです
  1. Assets/Plugins/Arbor/BuiltInBehaviours/Scripts/Components/AgentController.csを開く
  2. 538行目に以下の行を追加

    Code: Select all

    _StartPosition = agentTransform.position;
  3. 1160行目~1161行目を以下のように変更

    Code: Select all

    if (_Agent != null)
    {
    	agentTransform = _Agent.transform;
    	_StartPosition = agentTransform.position;
    }
    
この対処により、事前にNavMeshAgentを設定していなくてもAgentController.agentプロパティでNavMeshAgentを設定できるようになります。
ただし、他の場所でのNavMeshAgentのnullチェックは行っていませんので、移動呼び出しやUpdateが呼ばれる前に必ず設定するようご注意ください。

Re: AgentControllerのAgentを動的に変更する方法

Posted: 2024/06/14 10:53
by Guest
ありがとうございます!!!
助かります!!!プレハブを置いたときに手動でセットするのが結構つらかったしアセットの処理を書き換えるのも抵抗あったのでとても助かります!