我正在尝试创建一个随机的生成系统,随机化可以工作,但是对象永远不会移动到该位置。到目前为止,我已经将其分解为按下空间时只有一个移动到生成点的对象。但是,该对象不会移动,我不确定接下来要尝试什么。
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中,但没有其他反应。
答案 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");
}
}
当您发现哪个是预制件时,您可以决定直接从场景中引用它(从场景层次结构中拖动一个对象,而不是从项目窗口中拖动它)。
否则,您可以实例化它(也许正是您要尝试的操作)。