如何解决我是 C# 和 Unity 的新手,需要帮助调试 Rigidbody.velocity 运动
我第一次使用 Unity 和 C#,我想制作一个 2D 平台游戏,我正在按照本教程 https://www.youtube.com/watch?v=TcranVQUQ5U 获取代码。我一直在跟踪刚体和代码的所有内容,但是当我测试我的水平移动时,它不起作用。这是我的代码:
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
private Rigidbody2D body;
private void awake()
{
body = GetComponent<Rigidbody2D>();
}
private void Update()
{
body.velocity = new Vector2(Input.GetAxis("Horizontal"),body.velocity.y);
}
}
这是我的错误:
NullReferenceException: 未将对象引用设置为对象的实例 PlayerMove.Update ()(在 Assets/Scripts/PlayerMove.cs:14)
解决方法
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
private Rigidbody2D body;
private void Awake()
{
body = GetComponent<Rigidbody2D>();
}
private void Update()
{
if(body !=null){
body.velocity = new Vector2(Input.GetAxis("Horizontal"),body.velocity.y);
}
else{
Debug.Log("body not set to an instance");
}
}
}
body = GetComponent<Rigidbody2D>();
中发生的事情是关键部分。
正如@yong-shun 所说,body
以某种方式未设置,很可能是因为 awake
应该是 Awake()
(unity/C# 区分大小写)。
此方法的作用是获取与此脚本连接到同一对象的任何“RigidBody2D”组件。
如果您附加了 RigidBody
而不是 RigidBody2D
,此脚本也会失败,因为没有 RigidBody2D
可以获取和设置 body
。
如果 body
设置正确,则可以为播放器的刚体提供速度并在每次更新时移动。
如果没有设置body,预览窗口底部会显示错误信息,而不是抛出错误和崩溃。(这就是 else{Debug.Log("body not set to an instance");
所做的)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。