如何让这个脚本在白天和黑夜停留更长时间?
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);
}
}
只需确保您的曲线从 0 到 1 跟随 X 轴,并使其成为 Y 轴上您想要的值。
希望对您有所帮助,
我不太理解这段代码,所以我很难修改它。
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);
}
}
只需确保您的曲线从 0 到 1 跟随 X 轴,并使其成为 Y 轴上您想要的值。
希望对您有所帮助,