Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一:如何将时间脚本转换为24小时而不是小数_C#_Unity3d_Time_Decimal - Fatal编程技术网

C# 统一:如何将时间脚本转换为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

所以我在网上找到了一个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;
    }
}
使用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到午夜的时间)。希望能有帮助