当有明确的参考时,为什么我会得到Null Reference Exception? (统一)

时间:2017-04-26 00:52:32

标签: c# unity3d nullreferenceexception

我是Unity新手,我有一些实际上直接从Unity教程中获取的代码。这个教程可以在大约12点46分左右找到 https://www.youtube.com/watch?v=7C7WWxUxPZE

脚本已正确附加到游戏对象,游戏对象具有Rigidbody组件。

本教程已有几年了,但我在API中查了一下,就这段特殊代码而言,一切看起来都是一样的。

这是脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {
private Rigidbody rb;

void Start()
    {
    rb.GetComponent <Rigidbody> ();

    }


void FixedUpdate() 
    {

    float moveHorizontal = Input.GetAxis ("Horizontal");
    float moveVertical = Input.GetAxis ("Vertical");

    Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);    

    rb.AddForce (movement);
    }
}

我在两个地方获得NRE:

rb.GetComponent <Rigidbody> ();

rb.AddForce (movement);

1 个答案:

答案 0 :(得分:2)

您不应该在GetComponent对象上调用rb。您应该在课程GetComponent上拨打MonoBehaviour。然后,您需要获取该调用的结果并将其分配给rb

void Start()
{
    rb = GetComponent <Rigidbody> ();
}

如果在修复此问题后仍然在rb.AddForce (movement);调用上获得NRE,这意味着脚本附加的游戏对象没有附加Rigidbody,则需要确保添加一个对象也是。

要超越教程显示的内容,您可能要做的一件事是将RequireComponent属性放在MonoBehavior类上,以便脚本自动为游戏添加Rigidbody对象(如果尚不存在)。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class PlayerController : MonoBehaviour {
private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();

    }


    void FixedUpdate() 
    {

        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);    

        rb.AddForce (movement);
    }
}