[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_;
        }
    }//
...