【问题标题】:A problem with the rotation of objects in c#c#中物体旋转的问题
【发布时间】:2021-12-18 07:09:01
【问题描述】:
using System.Collections.Generic;
using UnityEngine;

public class RotationPlasmaCast : MonoBehaviour
{
    float LockPos = 0;
    public Transform Squid;
    float SquidRot = Squid.z;

    void FixedUpdate()
    {
        transform.rotation = Quaternion.Euler(LockPos, LockPos, SquidRot.rotation);
    }
}

我使用此代码使我的弹丸 (PlasmaCast) 的旋转与我的播放器 (Squid) 的旋转相同。 Unity告诉我:

字段初始值设定项不能引用非静态字段、方法或属性“RotationPlasmaCast.Squid”

有谁知道为什么 Unity 给我一个错误?

【问题讨论】:

  • 您不能将已声明的变量用作另一个变量声明的值。而是在AwakeStart 中分配SquidRot 值。原因是因为 Transform 不是编译时常量,它是运行时值,因此在声明中没有任何意义(因为被分配的值在编译时是未知的)。

标签: c# rotation quaternions


【解决方案1】:

假设您想存储 Squid 的 Z 旋转以在代码中的其他位置使用,您可以将初始旋转设置为 0,并在 FixedUpdate() 函数期间更新该值以匹配其当前旋转并将其传递给您的变换像这样:

using System.Collections.Generic;
using UnityEngine;

public class RotationPlasmaCast : MonoBehaviour
{
    float LockPos = 0;
    public Transform Squid;
    float SquidRot = 0;

    void FixedUpdate()
    {
        SquidRot = Squid.rotation.z;
        transform.rotation = Quaternion.Euler(LockPos, LockPos, SquidRot);
    }
}

值得注意的是,根据游戏对象的层次结构,您可能需要使用“localRotation”而不是“rotation”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多