[英]Unity3D Null reference in Instantiate
仍然显示“对象引用未设置为对象的实例”错误。
我尝试了Debug.Log的每个变量,没有错误。
这是我的代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PlatformSpawn : MonoBehaviour {
public GameObject platform;
public GameObject life;
private Vector3 platformrotation;
private Vector2 platformpoint, lifepoint;
private float platformrange, liferange;
public List<Vector2> SpawnList = new List<Vector2> ();
void Update () {
float randposition = Random.Range (-10f, 10f); //x-axis
platformrange -= 5; //y-axis
float randrotation = Random.Range(-20f, 20f); //z-axis rotation
liferange = platformrange + 1.56f;
platformpoint = new Vector2 (randposition, platformrange);
platformrotation = new Vector3 (0f, 0f, randrotation);
lifepoint = new Vector2 (randposition, liferange);
SpawnList.Add (platformpoint);
GameObject Tlife = (GameObject)Instantiate (life, life.transform.position, life.transform.rotation);
GameObject Tplatform = (GameObject)Instantiate (platform, platform.transform.position, platform.transform.rotation);
Tlife.transform.position = lifepoint;
Tplatform.transform.position = platformpoint;
if (SpawnList.Count >= 10) {
Tplatform.transform.rotation = Quaternion.Euler (platformrotation);
}
}
}
错误在
GameObject Tlife =(GameObject)实例化(life,life.transform.position,life.transform.rotation);
谢谢4的帮助^ _ ^
PS预制件仍在实例化而没有任何问题...
life
必须是您已经在编辑器中创建的预制对象,并已将其拖放到该对象的“检查器”窗口中。
确保您:
不要使用Instantiate(Object original, Vector3 position, Quaternion rotation)
-使用Instantiate(Object original)
在这种情况下,您试图访问尚不存在的对象的位置和旋转(因此为空引用)。 您正在尝试实例化life
并在实例化时告诉life
将其“生成”在它的位置-这没有任何意义。
使用Instantiate(Object original)
将使用预制中指定的位置和旋转实例化您的对象-无论如何,这是您要尝试做的事情。
不幸的是,似乎Unity的文档并没有对Instantiate的后者重载真正说太多,而主要解释了前者的工作原理: http : //docs.unity3d.com/ScriptReference/Object.Instantiate.html
编辑:还要检查您是否确实在Inspector中分配了预制件,否则您将仍然遇到问题,因为life
什么也没引用。
我想你们当中有些人还没看完最后一部分,
PS预制件仍在实例化而没有任何问题...
这就是问题所在……预制件仍在实例化,就像根本没有问题一样,但是要注意的是错误仍然在“显示”中
我的猜测是这是Unity3D的一个错误,因此我再次使用Debug.Log(life),它表明它确实为空。
我在寿命变量中附加了一个预制件,并且即使在OnCollisionEnter2D上仍然可以工作...
我还找到了消除错误并实例化的方法。
Private GameObject life;
void Start(){
life = new GameObject("name of the object");
//then attach some components for the new game object...
}
我用Collider2D尝试了一下,并且它起作用了,但我仍在寻找一种方法,可以在上面附加带有Sprite的SpriteRenderer ...
但是,仍然感谢您的帮助^ _ ^
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.