Unity Tutorial实例化给出UnassignedReferenceError

时间:2015-08-10 03:50:19

标签: c# unity3d

我相信我已经完全按照介绍性分组教程进行操作,除了砖块破坏上的粒子外,一切都正常工作,这会在实例化调用中产生错误。

using UnityEngine;
using System.Collections;

public class Bricks : MonoBehaviour {

    public GameObject brickParticle;

    void OnCollisionEnter (Collision other)
    {
        Instantiate(brickParticle, transform.position, Quaternion.identity);
        GM.instance.DestroyBrick();
        Destroy(gameObject);
    }
}

我对团结非常陌生,并且由于这种混乱而能够使任何预制件工作。

发生碰撞时我得到的错误是:UnassignedReferenceException:尚未分配砖的变量brickParticle。

我的理解是Instantiate的全部目的是创建一个新对象,所以我有点困惑。有问题的教程在这里:https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/creating-a-breakout-game?playlist=17219

团结的某些更新是否有可能改变了要求?

2 个答案:

答案 0 :(得分:1)

在您的Unity Inspector,您附加了Bricks Script的位置,您可以看到 brickParticle None(GameObject)。只需将预制件拖放到此区域即可将预制件分配给此变量并尝试运行游戏。这将解决您的问题。

答案 1 :(得分:0)

UnityEngine.Instantiate制作Object的副本(不要与GameObject混淆)。因此,您将已经实例化的预制件传递给Instantiate,它将为您制作副本。 brickParticle可能需要在运行时在检查器窗口中为其分配GameObject脚本Bricks之前为其分配预制件。

因为Instantiate返回一个副本,如果您需要保留对它的引用,您可能希望存储返回结果:

GameObject newBrickParticle = Instantiate(brickParticle, transform.position, Quaternion.identity);

但是,如果将粒子预制件设置为点火并忘记(意味着它会在一段时间后自动删除),那么您可能不需要保留它的参考。