Unity修改Particles Render Material(Unity3D開發之二十三)

猴子原創,歡迎轉載。轉載請註明: 轉載自Cocos2Der-CSDN,謝謝!
原文地址: http://blog.csdn.net/cocos2der/article/details/48372999

美術在製作粒子特效的時候需要能修改讓粒子在某些時刻閃爍,看了下發現沒有設置能實現,所以加個腳本給美術使用。

原理就是讓美術能控制Render修改Image的Color

using UnityEngine;
using System.Collections;

public class ParticleBlink : MonoBehaviour {
    public float startBlinkTime = 0.0f;
    public float blinkFrameTime = 0.02f;
    public Color[] blinkColor = new Color[]{
        new Color(255.0f, 255.0f, 255.0f, 0.0f),
        new Color(255.0f, 255.0f, 255.0f, 255.0f)
    };

    private Material m_Material;
    private float m_BlinkLifeTime = 0.0f;
    private bool m_IsStartBlink = false;
    private int m_BlinkColorIndex = 0;

    // Use this for initialization
    void Start () {
        m_Material = GetComponent<Renderer>().material;
        m_BlinkLifeTime = 0;

        if (startBlinkTime > 0) {
            m_IsStartBlink = false;
            Invoke ("StartBlink", startBlinkTime);
        } else {
            m_IsStartBlink = true;
        }
    }

    // Update is called once per frame
    void Update () {
        if (m_IsStartBlink) {
            UpdateColor ();
        }
    }

    void UpdateColor()
    {
        if (blinkColor == null || blinkColor.Length <= 0) {
            return;
        }

        m_BlinkLifeTime += Time.deltaTime;
        if (m_BlinkLifeTime >= blinkFrameTime) {
            m_BlinkLifeTime = 0;

            // Render Material使用不同的Shader,這裏的Color變量名需要對應修改
            m_Material.SetColor ("_Color", blinkColor[m_BlinkColorIndex]);
            m_BlinkColorIndex += 1;
            if (m_BlinkColorIndex >= blinkColor.Length) {
                m_BlinkColorIndex = 0;
            }
        }
    }

    void StartBlink()
    {
        m_IsStartBlink = true;
    }
}

這裏寫圖片描述

  1. Start Blink Time:開始切換Color的時間
  2. Blink Frame Time:每一個Color保持的時間
  3. Blink Color:待切換的Color數組
發佈了151 篇原創文章 · 獲贊 303 · 訪問量 127萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章