簡體   English   中英

Unity:如何將時間腳本轉換為 24 小時而不是小數

[英]Unity: How to transfer time script to 24 hours and not decimals

所以我在網上找到了一個 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 小時,並且在使用我制作的睡眠腳本時更容易修改。

要轉換01之間的值(間隔[0, 1] ),您只需乘以新間隔的大小,然后添加間隔的第一個值。

因此,如果您有一個變量value並想要一個區間: [MIN, MAX] ,計算如下:

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

在你的情況下,你想要區間[1, 24]所以它是:

var newValue = (value * 23) + 1;

簡單的數學,希望對你有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM