リストを使ってプレーヤーをルート通りに動かす方法

(ポイント)
・List(リスト)の使い方・・・動的配列

・2点間の距離の求めかた・・・Vector3.Distance( )関数

・カウントを1ずつあげてループさせる方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class PointMaker : MonoBehaviour {

    public GameObject pointPrefab;
    public AudioClip setSound;

    // ★ポイント
    // List(リスト)の宣言(配列を動的に扱うことができる)
    // 要素の数を動的に増減することができる。
    private List<GameObject> pointList = new List<GameObject>();

    private NavMeshAgent agent;
    private int destNum = 0;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        GoToNextPoint();
    }


    void Update () {
        if(Input.GetKeyDown(KeyCode.Z)){
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if(Physics.Raycast(ray, out hit)){
                GameObject target = hit.collider.gameObject;

                if(target.tag == "Ground"){
                    GameObject point = (GameObject)Instantiate(pointPrefab, hit.point, Quaternion.identity);
                    AudioSource.PlayClipAtPoint(setSound, Camera.main.transform.position);

                    // 生成したオブジェクををリストに加える。
                    pointList.Add(point);
                }
            }
        }

        // ★確認用
        //print("要素数" + pointList.Count + "個");
        //print("destNumの番号" + destNum);
        //print(pointList[pointList.Count - 1].transform.position);

        // ★2点間(プレーヤーと最終チェックポイント間)の距離を求める。
        float distance = Vector3.Distance(transform.position, pointList[pointList.Count - 1].transform.position);
        print(distance);

        if(distance < 1.0f){
            agent.enabled = false;
        }

        if(agent.remainingDistance < 1.5f){
            GoToNextPoint();
        }

        // ★セクションポイント配置後、Gボタンを押すとプレーヤーが動き出す。
        if(Input.GetKeyDown(KeyCode.G)){
            agent.enabled = true;
        }
	}

    void GoToNextPoint(){
        if(pointList.Count == 0){
            return;
        }

        agent.destination = pointList[destNum].transform.position;
        destNum = (destNum + 1) % pointList.Count;
    }
}