我正在使用纸板sdk,当我注意使用纸板sdk进行Unity时,我试图使对象颜色变亮。我使用下面的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);
}
}
Teleport脚本中的SetGazedAt方法
public void SetGazedAt(bool gazedAt) {
GetComponent<Renderer>().material.color = gazedAt ? Color.clear : Color.red;
}
答案 0 :(得分:2)
我在@piojo的帮助下想出来了。我使用Coroutines来处理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);
}
答案 1 :(得分:0)
将bool gazedAt设置为static并在fill类中使用它,方法是指定你在其中声明gazedAt的类if(classNAME.gazedAt == true){lerp code goes here}; 。还要确保填充脚本附加到场景中的gameobject。
答案 2 :(得分:0)
我认为你实际上并不需要Fill
类,但你只想修改SetGazedAt
来取一个百分比或一个时间,而不是一个bool(插值代替颜色/关)。
由于lerp并不复杂,我建议你输掉另一堂课。您需要开始/结束/当前时间,并且您需要开始和结束值。 lerp函数将开始/结束颜色作为第一个参数,将百分比(作为[0,1]
范围中的分数)作为第三个参数。分数为(current-start)/(end-start)
(当变化完成一半时为0.5,或者颜色A为50%,颜色为50%。)
所以SetGazedAt
可以非常简单:
GetComponent<Renderer>().material.color = Color.Lerp(Color.clear, Color.red, fraction);
当然,您需要作为参数传递的计时信息,因此您可以计算分数。另请注意,该分数被钳制到[0,1]
,因此您无需担心超出范围。