You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Unity实现物体旋转同步时报字段初始化器引用非静态成员错误

报错触发原因

C#语法规定,类的字段初始化器(声明字段时直接赋值的操作,即你代码里的float SquidRot = Squid.z;)执行时机早于实例构造完成阶段,此时非静态成员Squid还未完成初始化赋值,无法被直接引用,因此触发该报错。

同时你现有代码还存在两处逻辑错误:

  • Squid.z读取的是Squid的位置Z坐标,不是旋转角度的Z轴值,要读取欧拉角Z轴需要用Squid.eulerAngles.z
  • SquidRot本身是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:15:03