【发布时间】:2016-04-20 21:17:27
【问题描述】:
我正在尝试编写一些代码,当玩家到达某个位置时,慢慢会淡化粒子的不透明度。
当玩家到达该位置时,粒子的 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;
}
}
【问题讨论】:
-
我注意到的一件事是 StartCoroutine 可能会被多次调用,因为玩家将保持超过 190 作为位置。我认为更好的方法是在场景中使用新的 GameObject,添加 BoxCollider 组件,然后在该组件上检查
Trigger。请注意,如果您的游戏是 2D,则需要 BoxCollider2D;如果您的游戏是 3D,则需要 BoxCollider。将以下脚本添加到此触发器void OnTriggerEnter(Collider other) { // start fade fog. }这将确保您的代码仅触发一次并且更易于维护,因为您不会对位置进行硬编码。 -
很简单 不要调用 StartCoroutine();从更新。从开始调用它。享受