(Unity)一番近いコインを収集する自動Botの作成(NavMesh Agentとの組み合わせ)

(スクリプト)

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

public class BotRootCoinGet : MonoBehaviour
{
    public GameObject[] targets;
    private NavMeshAgent agent;

    private GameObject closeCoin;

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

        StartCoroutine(CheckCoin());
    }

    void Update()
    {
        if (targets.Length != 0 && closeCoin)
        {
            // 一番近いコインを目的地に設定(★)
            agent.destination = closeCoin.transform.position;
        }
    }

    private IEnumerator CheckCoin()
    {
        yield return new WaitForSeconds(3f);

        while(true)
        {
            // 「その時点」における画面上のコイン情報の取得
            targets = GameObject.FindGameObjectsWithTag("Coin");

            // 初期値の設定
            float closeDist = 1000;

            foreach (var t in targets)
            {
                // コインとの2点間の距離を計測
                float tDist = Vector3.Distance(transform.position, t.transform.position);

                // もしも「初期値」よりも「計測したコインまでの距離」の方が近いならば、
                if (tDist < closeDist)
                {
                    // 「closeDist」を「tDist(そのコインまでの距離)」に置き換える。
                    // これを繰り返すことで、一番近いコインを見つけ出すことができる。
                    closeDist = tDist;

                    // 一番近いコインの情報をcloseCoinという変数に格納する(★)
                    closeCoin = t;
                }
            }

            // 上記の処理を2秒間ごとに繰り返す。
            yield return new WaitForSeconds(2f);
        }        
    }
}

(実行結果)