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

制作昼夜循环时,如何将方向光X轴旋转值超360度后重置为0?

修复方向光旋转重置问题

你的脚本核心问题有两个:

  • 每次Update里都把lightRotation.x重新赋值为degreePerSecond * Time.deltaTime,导致这个变量永远不会累积到360,重置的判断条件根本触发不了
  • 用transform.Rotate直接修改旋转的方式,没办法准确跟踪总旋转角度,就算强行重置eulerAngles,后续的旋转操作还是会继续叠加,没法保证值始终在0-360范围内

直接修改成下面的写法,通过维护一个累计旋转角度,实时控制方向光的欧拉角,确保X轴值永远在0-360之间:

public class DayNightCycle : MonoBehaviour
{
    public float degreePerSecond = 0.6f;
    // 维护累计的旋转角度
    private float totalRotationX = 0f;

    void Update()
    {
        // 累加本次帧的旋转角度
        totalRotationX += degreePerSecond * Time.deltaTime;
        
        // 用取模运算直接把角度限制在0-360范围内
        totalRotationX %= 360f;
        
        // 直接设置方向光的欧拉角,确保X轴是处理后的值
        transform.eulerAngles = new Vector3(totalRotationX, transform.eulerAngles.y, transform.eulerAngles.z);
    }
}

如果一定要用重置到0的逻辑(而不是取模),可以改成这样:

public class DayNightCycle : MonoBehaviour
{
    public float degreePerSecond = 0.6f;
    private float totalRotationX = 0f;

    void Update()
    {
        totalRotationX += degreePerSecond * Time.deltaTime;
        
        if (totalRotationX >= 360f)
        {
            totalRotationX = 0f;
        }
        
        transform.eulerAngles = new Vector3(totalRotationX, transform.eulerAngles.y, transform.eulerAngles.z);
    }
}

两种写法都能保证X轴旋转值始终处于0-360之间,后者会在达到360时直接跳回0,前者则通过取模自然循环,效果基本一致,看你需求选择。

内容的提问来源于stack exchange,提问作者IronLightning85

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:12