【问题标题】:Unity: How to transfer time script to 24 hours and not decimalsUnity:如何将时间脚本转换为 24 小时而不是小数
【发布时间】: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 到午夜的时间)。
  • 我用计算你的价值的方法发布了一个答案。希望对你有帮助

标签: c# unity3d time decimal


【解决方案1】:

要在01(间隔[0, 1])之间转换一个值,您只需乘以新间隔的大小,然后加上间隔的第一个值。

所以如果你有一个变量value 并且想要一个区间:[MIN, MAX],计算如下:

var newValue = (value * (MAX - MIN)) + MIN;

在你的情况下,你想要间隔 [1, 24],所以它是:

var newValue = (value * 23) + 1;

简单的数学,希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-12-01
    • 2013-10-14
    • 2012-04-09
    • 2021-02-16
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多