C# 从Unity中的其他对象读取变量

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

长话短说。我需要得到许多对象的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;
    }
}
公共类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);