C# Unity实现物体旋转同步时报字段初始化器引用非静态成员错误
报错触发原因
C#语法规定,类的字段初始化器(声明字段时直接赋值的操作,即你代码里的float SquidRot = Squid.z;)执行时机早于实例构造完成阶段,此时非静态成员Squid还未完成初始化赋值,无法被直接引用,因此触发该报错。
同时你现有代码还存在两处逻辑错误:
Squid.z读取的是Squid的位置Z坐标,不是旋转角度的Z轴值,要读取欧拉角Z轴需要用Squid.eulerAngles.zSquidRot本身是float类型,不存在rotation属性,SquidRot.rotation的写法不成立
解决方案
将Squid旋转值的读取逻辑挪到Unity的生命周期函数中执行,同时修正旋转取值、赋值的错误逻辑即可,修复后的代码如下:
using UnityEngine; public class RotationPlasmaCast : MonoBehaviour { // 锁定的X、Y轴旋转值,设为常量更合理 const float LockPos = 0; public Transform Squid; void FixedUpdate() { // 每帧读取Squid的Z轴欧拉角,同步到当前弹丸的旋转 float squidRotZ = Squid.eulerAngles.z; transform.rotation = Quaternion.Euler(LockPos, LockPos, squidRotZ); } }
额外注意:需要在Unity Inspector面板中给当前脚本的
Squid字段赋值,拖入对应玩家对象的Transform组件,否则运行时会触发空引用报错。如果不需要每帧同步旋转,也可以把旋转值读取逻辑放到Start中执行,降低性能消耗。
内容的提问来源于stack exchange,提问作者Kingnate
相关产品推荐
相关产品推荐

