按下按钮将对象移动到另一个对象的位置

时间:2019-06-04 09:21:07

标签: c# unity3d 3d transform

我正在尝试创建一个随机的生成系统,随机化可以工作,但是对象永远不会移动到该位置。到目前为止,我已经将其分解为按下空间时只有一个移动到生成点的对象。但是,该对象不会移动,我不确定接下来要尝试什么。

 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 个答案:

答案 0 :(得分:1)

您的参考文献之一是指向预制件,而不是场景对象。

首先,您需要检查哪个是预制件,可以通过检查其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");
    }
}

当您发现哪个是预制件时,您可以决定直接从场景中引用它(从场景层次结构中拖动一个对象,而不是从项目窗口中拖动它)。

否则,您可以实例化它(也许正是您要尝试的操作)。