2

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

下面是更改对象颜色的SetGazedAt代码。我将如何替换它或调用我拥有的Lerp脚本,我将其命名为填充?

填充.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);
}

}

Teleport 脚本中的 SetGazedAt 方法

public void SetGazedAt(bool gazedAt) { 


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


}
4

3 回答 3

2

在@piojo 的帮助下,我已经弄清楚了。我使用协程来处理 lerping 更新并删除了填充脚本。我现在只是在我较大的传送脚本中调用 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);

    }
于 2015-08-13T20:44:42.137 回答
0

将 bool GazedAt 设置为静态并在填充类中使用它,方法是指定您在其中声明 GazedAt 的类,如下所示 if(classNAME.gazedAt == true){lerp code goes here}; . 还要确保填充脚本附加到场景中的游戏对象。

于 2015-08-12T07:51:09.650 回答
0

我认为您实际上并不需要该Fill课程,但您只想修改SetGazedAt以获取百分比或时间,而不是布尔值(插值而不是颜色开/关)。

既然 lerp 没那么复杂,我建议你丢掉其他类。您需要开始/结束/当前时间,并且需要开始和结束值。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],因此您不必担心超出范围。

于 2015-08-12T08:21:47.410 回答