1

Long story short. I need to get the Vector3 value of a number of objects and put all of them in an array. For each Game Objects I need to run the following code:

public class Pos : MonoBehaviour {

    public Vector3 pos;

    // Update is called once per frame
    void Update()
    {
        pos = transform.position;
    }
}

And the code that stores all the values in an array is the this other one:

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;
    }
}

I'm not sure why, but whenever I run the code, all of the values of the array Pos are equal 0. What am I doing wrong and how do I fix it?

P.S. There are more objects which need values than what I mentioned(41 in total), but once I get one, it's basically a copy paste job.

1 Answer 1

2

Let's start with this. Avoid updating a variable in UpDate(), this will cause to refresh this variables once per frame which means several times per second. Which is not not very efficient.

Besides, as I understand from your code, you will read this variable pos, just once in the GetPos, during the start().

Since you are trying to store this possition form the transform.position, I assume you have this class attached to a GameObject.

In case that is the situation, a set of GameObjects of two different types: Go and Mediterranean, you can get their possitions like this:

GameObject.FindGameObjectWithTag("go").transform.position;

or

GameObject.FindGameObjectWithTag("mediterranean").transform.position;

And you will not need to store this position in any variable of your class, since the gameobject itself contents a transform element with the position.

You can read more about tagging GameObjects here

And about your specific problem, that you get a 0 value, this may be because you need to access each of the components of the vector3 independently

Pos[0] = new Vector3(GoPos.pos.x,GoPos.pos.y,GoPos.pos.z);

I can not test it right now, but it should be something similar to that

You can read more about vector3 here

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.