我有以下动画:
观看视频:Animation Light
注意:动画控件的下方图片
如何使用脚本获得相同的结果?我的意图是脚本没有" if"。
不喜欢这样:
public float minIntensity;
public float maxIntensity;
public float intensityAmount;
private Light light;
void Awake(){
light = GetComponent<Light>();
}
void Update(){
if (light.intensity > maxIntensity) {
light.intensity -= intensityAmount * Time.deltaTime;
}
else if (light.intensity < minIntensity) {
light.intensity += intensityAmount * Time.deltaTime;
}
}
我想知道是否有可能使用某些原生函数来执行此操作...如:(Math.Clamp,Math.Lerp,Quaternion.Slerp),没有任何条件,如果&#34;如果&#34;在代码中。
提前谢谢。
答案 0 :(得分:1)
就像你提到的那样,你可以使用一个夹子:
light.intensity = Mathf.Clamp(value, minIntensity, maxIntensity)
然而,尽管你想要什么类型的动画缺乏细节,我假设你想要打乒乓球&#34;在最小和最大之间如果是这种情况,我们可以使用我们友好的邻域正弦波。
public float Frequency = 10f;
public float Magnitude = 2f;
void Update() {
light.Intensity = Magnitude + Mathf.Sin(Time.timeSinceLevelLoad * Frequency) * Magnitude;
}
正弦波将从-1变为1,幅度值将使其从(-magnitude到+幅度)变为由于我们不想要负光强度,我们在开始时添加幅度,所以最终结果是(0到2 *幅度)您可以根据需要将其更改为工作,但重点应该是明确的。
频率变量将改变我们来回动画的速度。