长话短说。我需要获取许多对象的Vector3值并将它们全部放在一个数组中。对于每个游戏对象,我需要运行以下代码:
public class Pos : MonoBehaviour {
public Vector3 pos;
// Update is called once per frame
void Update()
{
pos = transform.position;
}
}
存储数组中所有值的代码是另一个:
public class GetPos : MonoBehaviour {
public Vector3[] Pos = new Vector3[41];
//get all the space objects
GameObject Go = GameObject.Find("Go");
GameObject Mediterranean = GameObject.Find("Mediterranean");
private void Start()
{
//be able to call all the game objects
Pos GoPos = Go.GetComponent<Pos>();
Pos MedPos = Mediterranean.GetComponent<Pos>();
//make pos contain all possible positions.
Pos[0] = GoPos.pos;
Pos[1] = MedPos.pos;
}
}
我不知道为什么,但每当我运行代码时,数组Pos的所有值都等于0.我做错了什么以及如何解决?
P.S。有更多的对象需要值而不是我提到的(总共41个),但是一旦得到一个,它基本上就是一个复制粘贴工作。
答案 0 :(得分:2)
让我们从这开始吧。避免在UpDate()中更新变量,这将导致每帧刷新一次这个变量,这意味着每秒几次。这不是非常有效。
此外,正如我从您的代码中理解的那样,您将在start()期间在GetPos中读取此变量pos一次。
由于你试图通过transform.position存储这个版本,我假设你把这个类附加到GameObject。
如果是这种情况,一组两种不同类型的游戏对象:Go和Mediterranean,你可以得到这样的信息:
GameObject.FindGameObjectWithTag("go").transform.position;
或
GameObject.FindGameObjectWithTag("mediterranean").transform.position;
并且您不需要将此位置存储在类的任何变量中,因为游戏对象本身会包含一个具有位置的变换元素。
您可以阅读有关标记GameObjects here
的更多信息关于你的具体问题,你得到0值,这可能是因为你需要独立访问vector3的每个组件
Pos[0] = new Vector3(GoPos.pos.x,GoPos.pos.y,GoPos.pos.z);
我现在无法测试它,但它应该类似于
您可以阅读有关vector3 here
的更多信息