Unity代码出现CS0201错误,请求排查第31行代码问题
嘿,我来帮你搞定这个Unity里的CS0201错误!
解决Unity中的CS0201错误:"只有赋值、调用、递增、递减、await和新对象表达式可用作语句"
错误原因分析
你碰到的这个错误,问题出在第31行的代码:
rigidbody.velocity + Vector3.up * 100f;
这行代码只是计算出了一个新的Vector3数值,但完全没说要把这个结果用到哪儿——既没赋值给变量,也没作为参数调用方法。C#编译器可不接受这种“无意义”的单独表达式,所以直接抛出了错误。
修正方案
你得把计算后的结果赋值回rigidbody.velocity,明确告诉编译器你要修改刚体的速度。有两种等价的写法,选哪种都可以:
- 直接赋值(更直观):
rigidbody.velocity = rigidbody.velocity + Vector3.up * 100f;
- 使用复合赋值运算符(更简洁):
rigidbody.velocity += Vector3.up * 100f;
额外的小优化建议
另外,我注意到你在Update里每帧都调用GetComponent<Rigidbody>(),这其实有点浪费性能——每帧都去查找组件没必要。建议你在Start方法里提前缓存这个组件引用,修改后的完整代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyScript : MonoBehaviour { protected Joystick joystick; protected Joybutton joybutton; protected bool jump; protected Rigidbody rigidbody; // 新增缓存变量 // Start在第一帧更新前调用 void Start() { joystick = FindObjectOfType<Joystick>(); joybutton = FindObjectOfType<Joybutton>(); rigidbody = GetComponent<Rigidbody>(); // 提前缓存Rigidbody引用 } // Update每帧调用一次 void Update() { rigidbody.velocity = new Vector3(joystick.Horizontal * 100f, rigidbody.velocity.y, joystick.Vertical * 100f); if(!jump && joybutton.Pressed) { jump = true; rigidbody.velocity += Vector3.up * 100f; // 修正后的跳跃代码 } if(jump && !joybutton.Pressed) { jump = false; } } }
这样每帧就不用重复查找组件了,能小幅度提升运行效率~
内容的提问来源于stack exchange,提问作者Егор
相关产品推荐
相关产品推荐

