我拍摄时有时会出错

时间:2012-09-10 12:20:09

标签: c# unity3d frame-rate gameobject

  

MissingReferenceException:“GameObject”类型的对象已经存在   被摧毁但你还在试图访问它。你的脚本应该   要么检查它是否为null,否则你不应该销毁该对象。   UnityEngine.Object.Internal_InstantiateSingle(UnityEngine.Object   数据,Vector3 pos,Quaternion rot)(at   C:/BuildAgent/work/d9c061b1c154f5ae/Runtime/ExportGenerated/Editor/UnityEngineObject.cs:44)   UnityEngine.Object.Instantiate(UnityEngine.Object原创,Vector3   位置,四元数旋转)(at   C:/BuildAgent/work/d9c061b1c154f5ae/Runtime/ExportGenerated/Editor/UnityEngineObject.cs:53)   Gun.Update()(在J:/W.A.R/Assets/Scripts/Gun.cs:16)

这就是我得到的错误,这里是枪类的代码

using UnityEngine;
using System.Collections;

public class Gun : MonoBehaviour {

    public GameObject bullet = null;
    public float bulletSpeed = 500f;

    void Update () {
        if (Input.GetKeyDown (KeyCode.Mouse0)) {

            /*
             * Instantiate the bullet using the prefab and store it into the shot variable
             */

            GameObject shot = GameObject.Instantiate(bullet, transform.position + (transform.forward * 2), transform.rotation) as GameObject;

            /*
             * Adding force
             */
            shot.rigidbody.AddForce(transform.forward * bulletSpeed);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

问题是,子弹GameObject是否为空,并且由于尚未设置,当他尝试实例化一个空对象时,它会抛出一个异常。

你能做什么取决于游戏对象。您可以使用GameObject.Find获取GameObject项目符号,然后将其分配给项目符号。

public GameObject bullet = GameObject.Find("NameOfTheBulletGameobject");

另一种方法是将子弹游戏对象拖到检查器中的变量上。

public GameObject bullet;

然后,只需获取实际的项目符号对象并将其拖到脚本中的子弹变量中,然后在检查器中。

希望它有所帮助!