如何在运行时检查FindGameObjectsWithTag?

问题描述 投票:0回答:1

我遇到敌人NavMeshAgent AI的麻烦,首先它搜索标记有“防御”的GameObjects,然后根据敌人离防御的接近程度,防御被破坏时的数组值来设置第一个目的地增加一个,它将目的地更改为下一个防御。

我的问题是,我的玩家可以在游戏中创建(实例)新的防御,当我所有的防御都被摧毁时,我的敌人会发疯,因此,我需要一种将这些新的防御添加到我的阵列中的方法,下面是我的敌人脚本。

 public class NavMeshEnemy : MonoBehaviour
 {
     [Header("References", order = 0)]
     [SerializeField] NavMeshAgent enemyAgent;
     [Space(10)]
     [SerializeField] GameObject[] destinations;
     [Space(10)]
     [SerializeField] float distanceObjects;
     [SerializeField] int arrayElements = 0;

     void Awake()
     {
         enemyAgent = GetComponent<NavMeshAgent>();
         destinations = GameObject.FindGameObjectsWithTag("Defenses");
     }

     void Start()
     {
         destinations = destinations.OrderBy((d) => (d.transform.position - this.transform.position).sqrMagnitude).ToArray();
     }

     void Update()
     {
         distanceObjects = Vector3.Distance(this.transform.position, destinations[arrayElements].transform.position);

         enemyAgent.destination = destinations[arrayElements].transform.position;

         CheckArray();
     }

     void CheckArray()
     {
         if (destinations[arrayElements].gameObject.activeInHierarchy == false)
         {
             if (arrayElements < destinations.Length - 1)
             {
                 arrayElements++;
                 enemyAgent.destination = destinos[arrayElements].transform.position;
             }
             else
             {
                 arrayElements = 0;
             }
         }
     }
 }

谢谢您的阅读! :)

unity3d artificial-intelligence navmesh
1个回答
1
投票

我宁愿在您的预制件上使用static列表来实现一个组件,例如:

© www.soinside.com 2019 - 2024. All rights reserved.