在Unity中使用事件触发SetGazedAt来调整颜色

本文关键字:SetGazedAt 调整 颜色 事件 Unity | 更新日期: 2023-09-27 18:07:30

我正在使用纸板sdk,我试图在使用Unity的纸板sdk时凝视对象的颜色。我正在使用下面的lerping脚本,当我将它附加到对象时,它独立于凝视起作用,但是当我试图使它的一个版本在SetGazedAt中工作时,它不起作用。

下面是SetGazedAt的代码,它改变对象的颜色。我如何替换这个或调用Lerp脚本,我有,我已经标题填充?

Fill.cs

using UnityEngine;
using System.Collections;
public class Fill : MonoBehaviour {
float lerpTime = 2f;
float currentLerpTime;
//float moveDistance = 5f;

Color startColor = Color.clear;
Color endColor = Color.clear;

public void Start() {
    startColor = Color.clear;
    //endColor = new Color(0.0f,0.0f,1.0f,0.5f);
}
public void Update() {

    //reset when we press spacebar
    if (Input.GetKeyDown(KeyCode.Space)) {
        currentLerpTime = 0f;
        startColor = Color.clear;
        endColor = new Color(0.0f,0.0f,1.0f,0.5f);
    }
    //increment timer once per frame
    currentLerpTime += Time.deltaTime;
    if (currentLerpTime > lerpTime) {
        currentLerpTime = lerpTime;
    }
    //lerp!
    float perc = currentLerpTime / lerpTime;
    GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, perc);
}

}

传送脚本中的SetGazedAt方法

public void SetGazedAt(bool gazedAt) { 

    GetComponent<Renderer>().material.color = gazedAt ? Color.clear : Color.red;

}

在Unity中使用事件触发SetGazedAt来调整颜色

我在@piojo的帮助下弄明白了。我使用协程来处理快速更新,并删除了填充脚本。我现在只是在我的大型传送脚本中调用FillObject函数。

public void SetGazedAt(bool gazedAt) { 
        if (gazedAt == true) {
            aniTrigger = true;
            startColor = Color.clear;
            endColor = new Color(0.0f,0.0f,1.0f,0.8f);
            StartCoroutine(FillObject (startColor,endColor, 3 ));
            //GetComponent<Renderer>().material.color = Color.blue;
        } else {
            GetComponent<Renderer>().material.color = Color.clear;
        }

    }

和lerp函数

IEnumerator FillObject(Color startColor, Color endColor, float overTime)
    {
        float startTime = Time.time;
        while(Time.time < startTime + overTime)
        {
            //transform.position = Vector3.Lerp(source, target, (Time.time - startTime)/overTime);
            GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, (Time.time - startTime)/overTime);
            yield return null;
        }
        GetComponent<Renderer> ().material.color = endColor;
        var x = this.gameObject.name;
        TeleportNow (x);
    }

将bool gazedAt设置为静态,并通过指定在其中声明gazedAt的类来在填充类中使用它,如下所示gazedAt == true){lerp代码到这里};. 还要确保填充脚本附加到场景中的游戏对象。

我收集,你实际上不需要Fill类,但你只是想修改SetGazedAt采取一个百分比或一个时间,而不是一个bool(插值而不是颜色开/关)。

既然麻风没有那么复杂,我建议你放弃另一门课。你将需要开始/结束/当前时间,你将需要开始和结束值。lerp函数将开始/结束颜色作为第一个参数,百分比(作为[0,1]范围内的分数)作为第三个参数。分数为(current-start)/(end-start)(当变化完成一半时为0.5,或者50%颜色A, 50%颜色b)

所以SetGazedAt可以很简单:

GetComponent<Renderer>().material.color = Color.Lerp(Color.clear, Color.red, fraction);

当然,您需要作为参数传入的计时信息,以便您可以计算分数。还请注意,分数被限制为[0,1],所以您不需要担心越界。