Brakeys多人教程Ep2:PlayerMotor脚本CS1519/CS1001错误求助
问题修复:PlayerMotor.cs的两个编译错误
错误原因分析
- CS1519:第9行的
velocity = new Vector3(zero);写在了类的成员声明区域,C#不允许在类的字段定义外直接执行赋值语句,这类代码必须放在方法(比如Start())或者字段初始化器中。 - CS1001:
zero不是C#的有效标识符,Unity中表示零向量应该用Vector3.zero,或者给Vector3构造函数传入三个0参数(new Vector3(0, 0, 0))。
修复方案
把错误的赋值语句改成字段初始化的形式,或者移到Start()方法中初始化。这里推荐直接用字段初始化,更简洁:
修复后的完整代码
using UnityEngine; [RequireComponent(typeof(Rigidbody))] public class PlayerMotor : MonoBehaviour { // 直接用Vector3.zero初始化velocity字段 private Vector3 velocity = Vector3.zero; private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } // 获取移动向量 public void Move(Vector3 _velocity) { velocity = _velocity; } // 每帧物理更新时执行 void FixedUpdate() { PerformMovement(); } // 根据velocity变量执行移动逻辑 void PerformMovement() { if (velocity != Vector3.zero) { rb.MovePosition(rb.position + velocity * Time.fixedDeltaTime); } } }
也可以选择另一种方式:保留private Vector3 velocity;,然后在Start()方法里添加velocity = Vector3.zero;,两种写法效果完全一致。
内容的提问来源于stack exchange,提问作者Mr Pigeon
相关产品推荐
相关产品推荐

