C# 从Unity中的其他对象读取变量
长话短说。我需要得到许多对象的Vector3值,并将它们全部放入一个数组中。对于每个游戏对象,我需要运行以下代码:C# 从Unity中的其他对象读取变量,c#,unity3d,C#,Unity3d,长话短说。我需要得到许多对象的Vector3值,并将它们全部放入一个数组中。对于每个游戏对象,我需要运行以下代码: public class Pos : MonoBehaviour { public Vector3 pos; // Update is called once per frame void Update() { pos = transform.position; } } 存储数组中所有值的代码是另一个: public c
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;
}
}
公共类GetPos:monobhavior{
公共向量3[]Pos=新向量3[41];
//获取所有空间对象
GameObject Go=GameObject.Find(“Go”);
GameObject地中海=GameObject.Find(“地中海”);
私有void Start()
{
//能够调用所有游戏对象
Pos GoPos=Go.GetComponent();
Pos MedPos=mediateral.GetComponent();
//使pos包含所有可能的位置。
Pos[0]=GoPos.Pos;
Pos[1]=MedPos.Pos;
}
}
我不知道为什么,但每当我运行代码时,数组Pos的所有值都等于0。我做错了什么?我如何修复它
另外,需要值的对象比我提到的要多(总共41个),但一旦我得到一个值,基本上就是复制粘贴工作。让我们从这个开始。避免更新UpDate()中的变量,这将导致每帧刷新此变量一次,即每秒几次。这不是很有效 此外,正如我从代码中了解到的,您将在start()期间在GetPos中只读取一次这个变量pos 由于您正试图从transform.position存储这个position,我假设您将这个类附加到一个游戏对象 在这种情况下,一组两种不同类型的游戏对象:Go和地中海,您可以获得如下所示的位置:
GameObject.FindGameObjectWithTag("go").transform.position;
或
您不需要将这个位置存储在类的任何变量中,因为游戏对象本身包含一个带有位置的转换元素
您可以阅读有关标记游戏对象的更多信息
关于你的具体问题,你得到一个0值,这可能是因为你需要独立地访问向量3的每个组件
Pos[0] = new Vector3(GoPos.pos.x,GoPos.pos.y,GoPos.pos.z);
我现在不能测试它,但它应该是类似的东西
你可以阅读更多关于vector3的信息
Pos[0] = new Vector3(GoPos.pos.x,GoPos.pos.y,GoPos.pos.z);