(スクリプト)
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);
}
}
}
(実行結果)