慢慢淡化粒子系统的不透明度

时间:2016-04-19 19:42:55

标签: c# unity3d

我正在尝试编写一些代码,当玩家到达某个位置时,缓慢淡化粒子的不透明度。

当玩家到达位置时粒子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;
    }
}

2 个答案:

答案 0 :(得分:1)

这是因为你有一个while循环...你需要每帧只执行一次。就目前而言,在alpha为0.9之前,您的代码将无法完成,因此您永远不会看到转换。

答案 1 :(得分:0)

我通过使用盒式对撞机设置为调用协程的触发器来修复此问题。

(感谢您的帮助)