[Unity][NavMesh]自動ナビゲーションで自動キュー
移動方法はNavMeshAgent
自動で並ぶには、まず並びます
1.キューするエンティティごとのオブジェクトを取得し、リスト配列を順次追加する
2.チームの各位置の座標を取得する
3.各キューのエンティティの座標を更新し、キューを更新する
4.一定の条件を満たし、最初にイベントが完了したときにキューを更新し、リスト配列から最初のエンティティを削除し、3番目のステップを繰り返してキューを更新する
キュー座標を得るには2つの方法があります
1.複数のBoxColliderをTriggerとするCubeエンティティを作成し、これらのCubeエンティティを配列に配置し、キャラクタエンティティがキューに並ぶときに対応する位置座標を呼び出します.
欠点は行列の数に制限があることです.
2.2つのBoxColliderをTriggerとするCubeエンティティを作成し、キューの先頭と末尾を表します.
メリットは、何人かのオブジェクトが無限に並ぶことです.
欠点は、一直線に並ぶしかないので、並ぶ列を違う模様に変えるには、
...
avaters[i].MoveToPosNoSetCurrentPos(firstTrans.position+ vec*i*2);
...
この行のコードにはいくつかの設定があります.
...
public List avaters = new List();
public Transform firstTrans = null;
public Transform lastTrans = null;
...
public void UpdateCustomersPos()
{
Vector3 vec = Vector3.one;
if (firstTrans != null
&& lastTrans != null)
{
vec = (lastTrans.position - firstTrans.position).normalized*2;//
Debug.Log(" " + vec + " " + firstTrans.position);
}
if (avaters.Count > 0)
{
for (int i= 0; i < avaters.Count; i++)
{
//Debug.Log(" >>>>>>>>>>"+ (firstTrans.position + vec * i));
avaters[i].MoveToPosNoSetCurrentPos(firstTrans.position+ vec*i*2);
vs[i].SetNavMeshAgentStopDistance(0);
}//
}//
}//
...
///
///
///
///
public void MoveToPosNoSetCurrentPos(Vector3 pos)
{
if (navMeshAgent == null)
{
navMeshAgent = this.GetComponent();
}
if (navMeshAgent != null)
{
navMeshAgent.SetDestination(pos);
}//
}//
///
///
///
public void SetNavMeshAgentStopDistance(int stoppingDistance_)
{
if (navMeshAgent != null)
{
navMeshAgent.stoppingDistance = stoppingDistance_;
}
}//
...