似乎您的myCube
变量是您问题的根源,在我自己的场景中对其进行了测试。通过代入
(GameObject)Instantiate(myCube, ...
和
(GameObject)Instantiate(GameObject.CreatePrimitive(PrimitiveType.Cube), ...
我能够毫无疑虑地在 (0,2,0) 处生成一个立方体。也许您myCube
的游戏对象缺少网格渲染器,在这种情况下,它会在运行时出现在层次结构中,即使它在游戏视图中不可见。也许您在运行游戏之前没有在 Inspector 中分配它,在这种情况下,myCube
变量将引用null
,因此不会被创建。此外,尽管您可能将您实例化的 GameObject 分配给 SpawnLocation,但它是一个未使用的局部变量(MonoDevelop 或您的代码编辑器应该通知您)。确保您提供一个参考myCube
运行前在 Inspector 中的 GameObject 或在运行时通过脚本引用加载的 prefab/GameObject。提供一个回退(比如,也许是 PrimitiveType.Cube?)也会很有帮助,这将使您的代码更加健壮,并且能够在出现引用错误时处理它们。
无论如何,为了实现你所描述的功能,首先确保你已经准备好你想要的任何东西myCube
。此外,对于未来的后代,您可能希望spawnLocation
在Start
例程中初始化您的,并通过替换您想要生成Random.value * yourValueCeiling
的每个随机坐标来分配变量坐标。myCube
您甚至可以将辅助方法外部化,从而独立于启动例程,这样您就不必拥有单个脚本的一百个实例来创建一百个您需要的实例;相反,您可以通过单个脚本调用该方法,这样就省去了麻烦。如果您愿意,这是我对您目标的实现,希望对您有所帮助!
using UnityEngine;
using System.Collections;
public class randomObstacles : MonoBehaviour {
public Vector3 spawnLocation;
public GameObject myCube;
// Use this for initialization
void Start () {
if (myCube != true) {
Debug.Log("myCube not set");
myCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
}
if (myCube.renderer.enabled == false) {
Debug.Log("myCube not rendered");
myCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
}
CreateCube();
}
// Update is called once per frame
void Update () {
}
void CreateCube() {
spawnLocation = new Vector3(0, Random.value * 10, 0);
Instantiate(myCube, spawnLocation, Quaternion.identity);
}
}