【发布时间】:2016-03-20 12:10:42
【问题描述】:
我正在统一制作塔防游戏。用 C# 编写。我有 gameObject Enemy,它使用航点数组沿地图移动。我多次生成这些敌人对象,它们都使用在单独的类中声明的相同航点数组移动。我想如果我在敌人类中声明新的私有 waypoints1 数组。敌人开始使用 waypoints1 数组。他们做到了。但是现在他们都使用相同的 waypoints1 数组,因为它属于敌人类并且它们都来自同一个类。那么如何为敌人类的每个成员声明唯一数组呢?
public class ONE : MonoBehaviour {
public GameObject[] waypoints;
...
}
public class TWO : MonoBehaviour {
public GameObject[] waypoints;
...
void Start () {
for (int i = 1; i < waypoints.Length; i++)
{
waypoints[i].transform.position = new Vector3(waypoints[i].transform.position.x + Random.Range(-3, 3), waypoints[i].transform.position.y + Random.Range(-3, 3), 0);
}
}
第一类多次生成第二类对象,我希望每个第二类对象都有唯一的航点数组。
我试过了
public class ONE : MonoBehaviour {
public GameObject[] waypoints;
...
}
public class TWO : MonoBehaviour {
public GameObject[] waypoints;
private GameObject[] waypoints1;
...
void Start () {
waypoints1=waypoints;
for (int i = 1; i < waypoints.Length; i++)
{
waypoints1[i].transform.position = new Vector3(waypoints[i].transform.position.x + Random.Range(-3, 3), waypoints[i].transform.position.y + Random.Range(-3, 3), 0);
}
}
但这无济于事。第二类的每个实例都有相同的 Waypoints1 数组。每次生成新对象时都会更新。
【问题讨论】:
-
只要它是一个非静态属性/字段,每个对象都会有自己的数组实例(尽管这取决于您如何分配它)。可以发一些代码吗?
-
您可能正在“重用”您在构造函数中传递的同一个数组实例。每次要创建新航点时,都需要创建一个新阵列。 (这是因为数组是引用类型) 您可以在构造函数中创建数组的副本。这只是猜测,因为您没有附加任何代码。
-
Waypoint 数组被声明为 public GameObject[] waypoints;