我正在使用Unity和C#,而我对两者都还很陌生。
我有一个叫做Pathfinding的类附加到一个空的游戏对象上。它需要链接到开始游戏对象和结束游戏对象,并在最短路径中列出两者之间的节点列表。 (A *)。
我需要帮助的是:
如何从预制中实例化我的敌人游戏对象并将其链接到此脚本(通常是通过将游戏对象拖到编辑器中的相应图块上来完成)。
如何通过遵循寻路算法创建的列表来移动游戏对象(也许取列表中的第一个,然后移动并重新计算)?更多信息:我的电路板分为许多小立方体,算法使用这些立方体创建路径。存储路径(这些节点的列表)。我想要多个敌人
非常感谢。问我是否不清楚,我将尝试提供屏幕截图或信息。 :)
答案 0 :(得分:1)
1。 实例化敌人并将其添加到列表中(位于您的脚本中):
using UnityEngine;
public class Controller: MonoBehaviour
{
GameObject enemyPrefab;
List<GameObject> enemiesList = new List<GameObject>();
void Start()
{
GameObject enemy = Instantiate(enemiePrefab, transform.position, transform.rotation);
enemiesList.Add(enemy);
}
}
2。 使对象在寻路中移动:
有很多方法可以做到这一点,但是我建议您将列表(数组)或其他任何类型的waypoints存储在列表,数组或其他任何内容中。 然后让敌人跟随一个接一个的航路点。
所以现在您的主脚本应如下所示:
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;
}
}
}
请注意,您可以更改代码,以便控制器也可以移动每个敌人,但这取决于您!