在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;
}
我在@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]
,所以您不需要担心越界。