我是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);
答案 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);
}
}