实例化中的 Unity3D 空引用

本文关键字:引用 Unity3D 实例化 | 更新日期: 2023-09-27 18:31:48

"

对象引用未设置为对象的实例"错误仍然显示。

我尝试了每个变量的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);
        }
    }
}

错误在

游戏对象 Tlife = (GameObject)Instanceiate (life, 生命.转换.位置, 生命.转换.旋转);

谢谢 4 的帮助 ^_^

附言预制件仍在实例化,没有任何问题...

实例化中的 Unity3D 空引用

life必须是已在编辑器中创建并拖放到此对象的检查器窗口中的预制件。

确保您:

  1. 已创建预制件
  2. 在编辑器中选择了此对象,因此检查器将显示
  3. 将该预制件拖放到检查器中的"生活"字段中
不要使用

Instantiate(Object original, Vector3 position, Quaternion rotation) - 使用 Instantiate(Object original)

在这种情况下,您正在尝试访问尚不存在的对象的位置和旋转(因此为 null 引用)。您正在尝试实例化life并且在实例化时告诉它在其位置"生成"它 - 这是没有意义的。

使用 Instantiate(Object original) 将使用预制件中指定的位置和旋转实例化您的对象 - 无论如何,这就是您要尝试执行的操作。

不幸的是,Unity 的文档似乎并没有真正说明 Instance 的后者重载,主要解释了前者的工作原理:http://docs.unity3d.com/ScriptReference/Object.Instantiate.html

编辑:还要检查您是否在检查器中明确分配了预制件,否则您仍然会遇到问题,因为life没有引用任何内容。

我想你们中的一些人还没有看过最后一部分,

附言预制件仍在实例化,没有任何问题...

这是个问题...预制件仍在实例化,就像根本没有问题一样,但问题是错误仍然"出现"

我在这里猜测这是来自 Unity3D 的错误,所以我再次使用了 Debug.Log(life),它表明它确实为空......

我在 life 变量中附加了一个预制件,甚至 OnCollisionEnter2D 仍在工作......

我还找到了一种方法来消除错误并仍然实例化;

Private GameObject life;
void Start(){
life = new GameObject("name of the object");
//then attach some components for the new game object...
}

我用 Collider2D 试过了它并且它有效,我仍然在寻找一种方法来附加带有精灵的精灵渲染器......

但是,仍然感谢您的帮助 ^_^