C# 统一:如何将时间脚本转换为24小时而不是小数
所以我在网上找到了一个Unity的脚本,它是一个日夜循环,但它是以小数为单位的,0.1到1,但我希望它是1到24 下面是我正在使用的代码,我已经尝试过摆弄十进制值,但是我不能得到正确的结果C# 统一:如何将时间脚本转换为24小时而不是小数,c#,unity3d,time,decimal,C#,Unity3d,Time,Decimal,所以我在网上找到了一个Unity的脚本,它是一个日夜循环,但它是以小数为单位的,0.1到1,但我希望它是1到24 下面是我正在使用的代码,我已经尝试过摆弄十进制值,但是我不能得到正确的结果 using UnityEngine; using System.Collections; public class DayNightCycle : MonoBehaviour { public Light sun; public float secondsInFullDay = 1
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;
}
}
使用UnityEngine;
使用系统集合;
公共课日夜循环:单一行为{
公共照明太阳;
公众浮标秒全天=120f;
[范围(0,24)]
公共浮点数currentTimeOfDay=0;
[hideininstecpt]
公共浮动时间乘数=1f;
漂浮强度;
void Start(){
sunInitialIntensity=sun.intensity;
}
无效更新(){
UpdateSun();
currentTimeOfDay+=(Time.deltaTime/secondsSinFullDay)*时间乘数;
如果(currentTimeOfDay>=24){
currentTimeOfDay=0;
}
}
void UpdateSun(){
sun.transform.localRotation=Quaternion.Euler((currentTimeOfDay*360f)-90170,0);
浮点数乘子=1;
如果(currentTimeOfDay=0.75f){
强度倍增管=0;
}
否则如果(currentTimeOfDay=0.73f){
强度倍增管=数学夹具01(1-((当前时间-0.73f)*(1/0.02f));
}
sun.intensity=sunInitialIntensity*intensityMultiplier;
}
}
我想要的结果是昼夜循环从1工作到24,而不是从0工作到1,这样游戏就有24小时,而且使用我制作的睡眠脚本时更容易修改。在
0
和1
之间转换值(间隔[0,1]
)您只需乘以新间隔的大小,然后加上间隔的第一个值
因此,如果您有一个变量值
并需要一个间隔:[MIN,MAX]
,则计算如下:
var newValue = (value * (MAX - MIN)) + MIN;
在您的情况下,您需要间隔[1,24]
,因此:
var newValue = (value * 23) + 1;
简单的数学,希望有帮助。时间=时间*23+1?说明:
time*23
将你的数字从区间[0;1]转换为[0;23],然后加1,这样你就有了区间[1;24]我认为同样的一个Ludovic,你应该将你的0,1转换为0,23,只是相乘。我认为滑块值只是一个normalized位置值。@LudovicFeltz更新的代码,意外地在DataTime对象中输入了一个错误的值,该对象有一个整数,是从1/1/01开始的天数,还有一个分数,是24小时的小数部分。因此,发布的代码使用.25(从午夜到早上6:00的时间)和.75(从下午6:00到午夜的时间)。希望能有帮助