我正在尝试编写一些代码,当玩家到达某个位置时,缓慢淡化粒子的不透明度。
当玩家到达位置时粒子alpha值会改变,但它不会慢慢消失,只会突然改变。
我是编程新手,所以我想知道我是否遗漏任何明显的东西。谢谢!
public class IncreaseFog : MonoBehaviour {
Renderer rend;
GameObject character;
float valToBeLerpedFrom = 9f;
float tParam = 0f;
float speed = 0.01f;
float characterPosition;
Color c;
void Start () {
rend = GetComponent<Renderer>();
character = GameObject.Find("CHARACTER");
}
void Update() {
characterPosition = character.transform.position.x;
if(characterPosition >= 190f) {
StartCoroutine(increaseFog());
}
}
IEnumerator increaseFog()
{
tParam = 0f;
while (tParam < 1)
{
tParam += Time.deltaTime;
valToBeLerpedFrom = Mathf.Lerp(0f, 0.9f, tParam);
c = rend.material.GetColor("_TintColor");
c.a = (valToBeLerpedFrom);
rend.material.SetColor("_TintColor", c);
}
rend.material.SetColor("_TintColor", c);
yield return valToBeLerpedFrom;
}
}
答案 0 :(得分:1)
这是因为你有一个while循环...你需要每帧只执行一次。就目前而言,在alpha为0.9之前,您的代码将无法完成,因此您永远不会看到转换。
答案 1 :(得分:0)
我通过使用盒式对撞机设置为调用协程的触发器来修复此问题。
(感谢您的帮助)