C# Unity C.如何将实例化对象链接到寻路脚本,以及如何使游戏对象移动到节点列表?

C# Unity C.如何将实例化对象链接到寻路脚本,以及如何使游戏对象移动到节点列表?,c#,unity3d,instantiation,path-finding,gameobject,C#,Unity3d,Instantiation,Path Finding,Gameobject,我使用的是Unity和C,我对这两种语言都相当陌生 我有一个名为Pathfinding的类附加到一个空的游戏对象。它需要一个指向开始游戏对象和结束游戏对象的链接,并在最短路径中列出这两个对象之间的节点列表。A* 我需要帮助的是: 如何从预置中实例化我的敌人游戏对象,并将其链接到此脚本,通常通过将游戏对象拖动到编辑器中相应的互动程序来完成 我如何按照寻路算法创建的列表移动游戏对象?可能会先移动列表中的第一个,然后重新计算?更多信息:我的电路板被分成许多小立方体,算法使用这些立方体创建路径。将存储这

我使用的是Unity和C,我对这两种语言都相当陌生

我有一个名为Pathfinding的类附加到一个空的游戏对象。它需要一个指向开始游戏对象和结束游戏对象的链接,并在最短路径中列出这两个对象之间的节点列表。A*

我需要帮助的是:

如何从预置中实例化我的敌人游戏对象,并将其链接到此脚本,通常通过将游戏对象拖动到编辑器中相应的互动程序来完成

我如何按照寻路算法创建的列表移动游戏对象?可能会先移动列表中的第一个,然后重新计算?更多信息:我的电路板被分成许多小立方体,算法使用这些立方体创建路径。将存储这些节点的路径列表。我想要多个敌人

多谢各位。如果不够清楚,请询问我,我将尝试提供屏幕截图或信息:

1。 实例化敌人并将其添加到脚本中的列表中:

二,。 使对象在寻路过程中移动:

有很多方法可以做到这一点,但我建议您将不同的存储在列表、数组或任何您想要的东西中。 然后让你的敌人跟随一个又一个航路点

现在,您的主脚本应该如下所示:

using UnityEngine;

public class Controller : MonoBehaviour
{
    public GameObject enemyPrefab;

    private List<GameObject> enemiesList = new List<GameObject>();
    public List<GameObject> wayPoints = new List<GameObject>();

    void Start()
    {
      GameObject enemy = Instantiate(enemiePrefab, transform.position, transform.rotation);
      enemy.wayPoints = wayPoints;
      enemiesList.Add(enemy);
    }
}
using UnityEngine;

    public class Enemy : MonoBehaviour
    {
       public List<GameObject> wayPoints = new List<GameObject>();

       public float speed;
       private Transform target;
       int waypointIndex = 0;

       private void Start()
       {
         target = List[waypointIndex].transform;
         waypointIndex++;
       }

        void Update()
        {
          // The step size is equal to speed times frame time.
          float step = speed * Time.deltaTime;

          // Move our position a step closer to the target.
          transform.position = Vector3.MoveTowards(transform.position, target.position, step);

          //If we arrive to the target, get the new target
          if(this.transform.position == target.position)
          {
            waypointIndex++;
            //if it is the last element, go to the first one again
            if(wayPointIndex > List.Count())
            {
              wayPointIndex = 0;
            }            
            target = List[waypointIndex].transform;      
          }              
        }
    }
你的敌人剧本应该是这样的:

using UnityEngine;

public class Controller : MonoBehaviour
{
    public GameObject enemyPrefab;

    private List<GameObject> enemiesList = new List<GameObject>();
    public List<GameObject> wayPoints = new List<GameObject>();

    void Start()
    {
      GameObject enemy = Instantiate(enemiePrefab, transform.position, transform.rotation);
      enemy.wayPoints = wayPoints;
      enemiesList.Add(enemy);
    }
}
using UnityEngine;

    public class Enemy : MonoBehaviour
    {
       public List<GameObject> wayPoints = new List<GameObject>();

       public float speed;
       private Transform target;
       int waypointIndex = 0;

       private void Start()
       {
         target = List[waypointIndex].transform;
         waypointIndex++;
       }

        void Update()
        {
          // The step size is equal to speed times frame time.
          float step = speed * Time.deltaTime;

          // Move our position a step closer to the target.
          transform.position = Vector3.MoveTowards(transform.position, target.position, step);

          //If we arrive to the target, get the new target
          if(this.transform.position == target.position)
          {
            waypointIndex++;
            //if it is the last element, go to the first one again
            if(wayPointIndex > List.Count())
            {
              wayPointIndex = 0;
            }            
            target = List[waypointIndex].transform;      
          }              
        }
    }
请注意,您可以更改代码,这样您的控制器也可以移动所有敌人,但这取决于您