如何让这个脚本在白天和黑夜停留更长时间?

How to I make this script stay in day and night longer?

我不太理解这段代码,所以我很难修改它。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SunScript : MonoBehaviour {
    public float duration = 1.0F;
    public Light lt;
    void Start() {
        lt = GetComponent<Light>();
    }
    void Update() {
        float phi = Time.time / duration * 0.1f * Mathf.PI;
        float amplitude = Mathf.Cos(phi) * 0.5F + 0.5F;
        lt.intensity = amplitude;
    }
}

这会循环上下移动光的强度。但是,我想让它在开始向另一个方向后退之前保持最亮和最暗一段时间。我应该怎么做?

如何替换 Mathf.Cos(phi) 中的一个 these 函数而不只是余弦?

使用该页底部的公式:

float amplitude = Mathf.Sin(Mathf.PI / 2f * Mathf.Cos(phi)) * 0.5f + 0.5f;

对于带有 b 项的公式,您可以这样做(使用额外的临时变量使其更具可读性)。

float b = // whatever your b parameter is or have this declared as a class field that you can set in the Unity editor
float cosine = Mathf.Cos(phi);
float numerator = 1f + (b * b);
float denominator = 1f + (b * b * cosine * cosine);
float amplitude = (Mathf.Sqrt(numerator / denominator) * cosine) * 0.5f + 0.5f;

您也可以使用 Unity AnimationCurve 来实现:

public class SunScript : MonoBehaviour
{
    public float duration = 1.0F;
    public AnimationCurve curve;

    private Light lt;

    void Start()
    {
        lt = GetComponent<Light>();
    }

    void Update()
    {
        lt.intensity = curve.Evaluate((Time.time % duration) / duration);
    }
}

只需确保您的曲线从 01 跟随 X 轴,并使其成为 Y 轴上您想要的值。

希望对您有所帮助,