明明有正确的引用,为什么我会得到空引用异常? (统一)
Why am I getting a Null Reference Exception when there is clearly a proper reference? (Unity)
我是 Unity 新手,我有一小段代码实际上是直接从 Unity 教程中获取的。教程可以在这里找到,大约 12:46
https://www.youtube.com/watch?v=7C7WWxUxPZE
脚本已正确附加到游戏对象,并且游戏对象具有刚体组件。
该教程已有几年历史,但我在 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);
您不应在 rb
对象上调用 GetComponent
。您应该在 class MonoBehaviour
本身上调用 GetComponent
。然后您需要获取该调用的结果并将其分配给 rb
void Start()
{
rb = GetComponent <Rigidbody> ();
}
如果修复此问题后您仍然在 rb.AddForce (movement);
调用中获得 NRE,这意味着脚本附加到的游戏对象没有附加 Rigidbody
您需要确保您也向对象添加一个。
为了超越教程显示的内容,您可能需要做的一件事是将 RequireComponent
属性放在 MonoBehavior
class 上,这样脚本会自动添加一个 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);
}
}
我是 Unity 新手,我有一小段代码实际上是直接从 Unity 教程中获取的。教程可以在这里找到,大约 12:46
https://www.youtube.com/watch?v=7C7WWxUxPZE
脚本已正确附加到游戏对象,并且游戏对象具有刚体组件。
该教程已有几年历史,但我在 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);
您不应在 rb
对象上调用 GetComponent
。您应该在 class MonoBehaviour
本身上调用 GetComponent
。然后您需要获取该调用的结果并将其分配给 rb
void Start()
{
rb = GetComponent <Rigidbody> ();
}
如果修复此问题后您仍然在 rb.AddForce (movement);
调用中获得 NRE,这意味着脚本附加到的游戏对象没有附加 Rigidbody
您需要确保您也向对象添加一个。
为了超越教程显示的内容,您可能需要做的一件事是将 RequireComponent
属性放在 MonoBehavior
class 上,这样脚本会自动添加一个 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);
}
}