Unity3D - 如何在没有动画的情况下控制Light.Intensity

时间:2015-08-31 21:44:48

标签: animation unity3d light

我有以下动画:

观看视频:Animation Light

注意:动画控件的下方图片

enter image description here

如何使用脚本获得相同的结果?我的意图是脚本没有" 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;在代码中。

提前谢谢。

1 个答案:

答案 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 *幅度)您可以根据需要将其更改为工作,但重点应该是明确的。

频率变量将改变我们来回动画的速度。