Переместить Gameobject, генерирующий объекты на основе данных - PullRequest
0 голосов
/ 09 октября 2018

Я генерирую игровые объекты (сферы) на основе координат, которые хранятся в файле .csv.Я имею Gameobject с Единственной Сферой как примитивный дочерний объект.Основываясь на данных, Объект будет клонировать эту сферу 17 раз и перемещать их.Я могу перемещать все вокруг так, как хочу, получая доступ к родительскому объекту, но в режиме редактирования положение корневой сферы делает его использование неудобным.

Следующий код делает это возможным.

public GameObject parentObj;
public TextAsset csvFile;

[SerializeField]
private float scaleDownFactor = 10;

private int index = 0;

//class Deck : MonoBehaviour
//{
    [SerializeField]
    private GameObject[] deck;

    private GameObject[] instanciatedObjects;

    private void Start()
    {
        Fill();
    }

    public void Fill()
    {
        instanciatedObjects = new GameObject[deck.Length];
        for (int i = 0; i < deck.Length; i++)
        {
            instanciatedObjects[i] = Instantiate(deck[i]) as GameObject;
        }
    }
//}



// Update is called once per frame
void Update()
{     
    readCSV();
}

void readCSV()
{
    string[] frames = csvFile.text.Split('\n');

    int[] relevant = {

    0

    };

    string[] coordinates = frames[index].Split(',');

    for (int i = 0; i < 17; i++)
    {            
        float x = float.Parse(coordinates[relevant[i] * 3]) / scaleDownFactor;
        float y = float.Parse(coordinates[relevant[i] * 3+1]) / scaleDownFactor;
        float z = float.Parse(coordinates[relevant[i] * 3+2]) / scaleDownFactor;

        //objectTest.transform.Rotate(float.Parse(fields[1]), float.Parse(fields[2]), float.Parse(fields[3]));
        //objectTest.transform.Translate(x, y, z);

        //parentObj.transform.position = new Vector3(x, y, z);
        instanciatedObjects[i].transform.position = new Vector3(parentObj.transform.position.x, parentObj.transform.position.y, parentObj.transform.position.z);

        instanciatedObjects[i].transform.eulerAngles = new Vector3(parentObj.transform.eulerAngles.x, parentObj.transform.eulerAngles.y, parentObj.transform.eulerAngles.z);

        //instanciatedObjects[i].transform.position = new Vector3(x, y, z);
        instanciatedObjects[i].transform.Translate(x, y, z);

    }


    if (index < frames.Length - 1)
    {
        index++;
    }
    if (index >= frames.Length -1)
    {
        index = 0;
    }

}   

Вот снимок экрана:

enter image description here

Итак, мой вопрос: как я могу установить Положение этой Сферы на один изперемещение точек, без изменения положения клонированных объектов?Поскольку все ведут себя на основе BaseSphere?

Можно ли сделать BaseSphere невидимым, пока объекты клонируются или генерируются?

Я ищу решение, которое облегчает задачупереместите объект, сгенерированный данными, в Editor.

Буду признателен за любой ввод.

1 Ответ

0 голосов
/ 09 октября 2018

Сделайте все Сферы дочерними по Empty Gameobject (например. Sphere_root) и используйте это для перемещения Сфер.

Также проверьте Scriptable Objects.Это простой и очень быстрый способ управления данными в Unity.

@ Редактировать

 public void Fill()
    {
        instanciatedObjects = new GameObject[deck.Length];
        for (int i = 0; i < deck.Length; i++)
        {
            instanciatedObjects[i] = Instantiate(deck[i]) as GameObject;
            instanciatedObjects[i].transform.parent = Baumer; // or Sphere Root or somehing else.
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...