【发布时间】:2019-07-18 21:13:14
【问题描述】:
所以我在网上找到了一个 Unity 脚本,它是一个昼夜循环,但它以十进制工作,0.1 到 1,但我希望它是 1 到 24。
我使用的代码如下,我试过摆弄十进制值,但我无法正确。
using UnityEngine;
using System.Collections;
public class DayNightCycle : MonoBehaviour {
public Light sun;
public float secondsInFullDay = 120f;
[Range(0,24)]
public float currentTimeOfDay = 0;
[HideInInspector]
public float timeMultiplier = 1f;
float sunInitialIntensity;
void Start() {
sunInitialIntensity = sun.intensity;
}
void Update() {
UpdateSun();
currentTimeOfDay += (Time.deltaTime / secondsInFullDay) * timeMultiplier;
if (currentTimeOfDay >= 24) {
currentTimeOfDay = 0;
}
}
void UpdateSun() {
sun.transform.localRotation = Quaternion.Euler((currentTimeOfDay * 360f) - 90, 170, 0);
float intensityMultiplier = 1;
if (currentTimeOfDay <= 0.23f || currentTimeOfDay >= 0.75f) {
intensityMultiplier = 0;
}
else if (currentTimeOfDay <= 0.25f) {
intensityMultiplier = Mathf.Clamp01((currentTimeOfDay - 0.23f) * (1 / 0.02f));
}
else if (currentTimeOfDay >= 0.73f) {
intensityMultiplier = Mathf.Clamp01(1 - ((currentTimeOfDay - 0.73f) * (1 / 0.02f)));
}
sun.intensity = sunInitialIntensity * intensityMultiplier;
}
}
我想要的结果是昼夜循环从 1 到 24 而不是从 0 到 1,这样游戏中有 24 小时,并且使用我制作的 sleep 脚本时更容易修改.
【问题讨论】:
-
time = time * 23 + 1?说明:time * 23将您的号码从区间 [0;1] 转换为 [0; 23] 然后加 1 得到一个区间 [1; 24] -
我认为同样的 Ludovic,你应该将你的 0,1 转换为 0,23 只是相乘。我认为滑块值只是一个标准化的位置值。
-
@LudovicFeltz 更新代码,不小心放错了
-
DataTime 对象有一个整数,它是从 2001 年 1 月 1 日开始的天数和一个分数,它是 24 小时的小数部分。所以发布的代码使用 .25(从午夜到早上 6:00 的时间)和 .75(从下午 6:00 到午夜的时间)。
-
我用计算你的价值的方法发布了一个答案。希望对你有帮助