Перемещение объекта в положение другого объекта при нажатии кнопки - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать систему случайного появления, рандомизация работает, однако объекты никогда не перемещаются в позицию. Я разбил его до сих пор только один из объектов, перемещающихся в точку возрождения при нажатии пробел. Однако объект не двигается, и я не уверен, что делать дальше.

 public Transform spawn1;
public Transform spawn2;
public Transform spawn3;

public Transform obj1;
public Transform obj2;
public Transform obj3;

private Transform[] spawns = new Transform[3];
private Transform[] objects = new Transform[3];

private bool[] spawnUsed = new bool[3];
private bool[] objectUsed = new bool[3];

private int randomRun = 0;

void Start()
{ 

    spawns[0] = spawn1;
    spawns[1] = spawn2;
    spawns[2] = spawn3;

    objects[0] = obj1;
    objects[1] = obj2;
    objects[2] = obj3;
}

void Update()
{
    if (Input.GetKeyDown("space"))
    {
        // RandomChoice();

       // int ran = Random.Range(0, 2);

        obj1.transform.position = spawn1.transform.position;

        Debug.Log("Moved");
    }
}

Я пробовал как объекты, так и порождения как трансформации и игровые объекты, но это не имеет значения. При нажатии пробела отладка «Moved» отображается в lof, но больше ничего не происходит.

1 Ответ

1 голос
/ 04 июня 2019

Одна из ваших ссылок указывает на префаб, а не на объект сцены.

Сначала вам нужно проверить, какой из них является префабом, и вы можете сделать это, проверив его scene.rootCount == 0.

Затем вы либо создаете его экземпляр, либо выбираете его на сцене.

Этот код можно применить, если вы планируете его создание:

void Update()
{
    if (Input.GetKeyDown("space"))
    {
        // int ran = Random.Range(0, 2);
        Debug.Log("Is obj1 a prefab" + (obj1.gameObject.scene.rootCount == 0));
        Debug.Log("Is spawn1 a prefab" + (spawn1.gameObject.scene.rootCount == 0));

        // --------------- Check the object --------------- //
        Transform yourObject;
        if (obj1.gameObject.scene.rootCount == 0) yourObject = Instantiate(obj1);
        else yourObject = obj1;

        // --------------- Check the spawn --------------- //
        Transform spawn;
        if (spawn1.gameObject.scene.rootCount == 0) spawn = Instantiate(spawn1);
        else spawn                                        = spawn1;

        yourObject.position = spawn.position;

        Debug.Log("Moved");
    }
}

Когда вы нашли, какой из них являетсяпрефаб, вы можете решить ссылаться на него непосредственно со сцены (перетащите объект из иерархии сцены вместо перетаскивания его из окна проекта).

В противном случае вы можете просто создать его экземпляр (возможно, это то, что выпытаемся сделать).

...