繁体   English   中英

实例化中的Unity3D Null引用

[英]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必须是您已经在编辑器中创建的预制对象,并已将其拖放到该对象的“检查器”窗口中。

确保您:

  1. 创建了一个预制件
  2. 在编辑器中选择了此对象,因此将显示检查器
  3. 将该预制件拖放到检查器的“寿命”字段中

不要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM