在更新功能期间尝试 setParent 会出错
Trying to setParent during update function gives error
我正在尝试在 Unity 中以设定的时间间隔生成一颗星星。
但我想 parent 这些星星不要让我的检查员感到混乱。
但是当我尝试这样做时,它给出了
"NullReferenceExeption: Object reference not set to an instance of an object."
我以前在其他地方成功使用过这种类型的代码,但不在更新功能中。
我使用的代码如下。
感谢您的时间和提前帮助。
更新:
我用过
Debug.Log (obj);
Debug.Log (starParent);
检查游戏对象是否存在。
它找到了 starParent 但没有找到 obj。
所以你的问题是它 returns 对于刚刚实例化的 GameObject 为空。这跟Update函数有关系吗?
public class StarSpawner : MonoBehaviour {
public Star star;
private float spawnRate = 3f;
public static float time = 0;
private GameObject starParent;
void Start() {
if (!GameObject.Find ("StarParent")) {
new GameObject ("StarParent");
}
starParent = GameObject.Find ("StarParent");
SetNextStarTime();
}
void Update () {
if (Time.timeSinceLevelLoad > time) {
Vector3 spawnPosition = new Vector3 (Random.Range (1f, 9f), 7);
GameObject obj = Instantiate (star, spawnPosition, Quaternion.identity) as GameObject;
obj.transform.SetParent (starParent.transform);
SetNextStar ();
}
}
void SetNextStarTime(){
time = Time.timeSinceLevelLoad + spawnRate + Random.Range(0f, 5f);
}
}
public Star star;
应该是
public GameObject star;
我正在尝试在 Unity 中以设定的时间间隔生成一颗星星。 但我想 parent 这些星星不要让我的检查员感到混乱。
但是当我尝试这样做时,它给出了 "NullReferenceExeption: Object reference not set to an instance of an object."
我以前在其他地方成功使用过这种类型的代码,但不在更新功能中。
我使用的代码如下。 感谢您的时间和提前帮助。
更新:
我用过
Debug.Log (obj);
Debug.Log (starParent);
检查游戏对象是否存在。 它找到了 starParent 但没有找到 obj。
所以你的问题是它 returns 对于刚刚实例化的 GameObject 为空。这跟Update函数有关系吗?
public class StarSpawner : MonoBehaviour {
public Star star;
private float spawnRate = 3f;
public static float time = 0;
private GameObject starParent;
void Start() {
if (!GameObject.Find ("StarParent")) {
new GameObject ("StarParent");
}
starParent = GameObject.Find ("StarParent");
SetNextStarTime();
}
void Update () {
if (Time.timeSinceLevelLoad > time) {
Vector3 spawnPosition = new Vector3 (Random.Range (1f, 9f), 7);
GameObject obj = Instantiate (star, spawnPosition, Quaternion.identity) as GameObject;
obj.transform.SetParent (starParent.transform);
SetNextStar ();
}
}
void SetNextStarTime(){
time = Time.timeSinceLevelLoad + spawnRate + Random.Range(0f, 5f);
}
}
public Star star;
应该是
public GameObject star;