Чтение переменных из других объектов в Unity - PullRequest
0 голосов
/ 18 мая 2018

Короче говоря. Мне нужно получить значение 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), но как только я получу один, это в основном задание на копирование.

1 Ответ

0 голосов
/ 18 мая 2018

Давайте начнем с этого.Избегайте обновления переменной в UpDate (), это приведет к обновлению этих переменных один раз за кадр, что означает несколько раз в секунду.Что не очень эффективно.

Кроме того, как я понимаю из вашего кода, вы прочитаете эту переменную pos, только один раз в GetPos, во время запуска ().

Поскольку вы пытаетесь сохранить эту возможность из transform.position, я предполагаю, что этот класс подключен к GameObject.

В этом случае набор GameObjects из двухразличные типы: Го и Средиземноморье, вы можете получить их варианты, как это:

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

или

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

И вам не нужно будет хранить эту позицию в любой переменной вашего класса,так как сам gameobject содержит элемент transform с позицией.

Подробнее о тегах GameObjects вы можете узнать здесь

А о вашей конкретной проблеме вы получите значение 0Это может быть связано с тем, что вам необходимо получить доступ к каждому компоненту вектора 3 независимо

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

Я не могу проверить это прямо сейчас, но это должно быть что-то похожее на это

Подробнее о vector3 вы можете прочитать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...