制作昼夜循环时,如何将方向光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
相关产品推荐
相关产品推荐

