NGUI之粒子特效縮放

本文用的主要是調節粒子的Start Size來實現粒子特效的縮放,話不多說直接上代碼

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class EffectScale : MonoBehaviour
{

    private List<ScaleData> scaleDatas = null;
    private UIRoot uiRoot;
    void Awake()
    {
        scaleDatas = new List<ScaleData>();
        foreach (ParticleSystem p in transform.GetComponentsInChildren<ParticleSystem>(true))
        {
            scaleDatas.Add(new ScaleData() { transform = p.transform, beginScale = p.transform.localScale });
        }
        uiRoot = NGUITools.FindInParents<UIRoot>(gameObject);
        
    }

    void Start()
    {
        float h = 2;
        float designScale = 0.002604167f;    // 開發時的UIRoot縮放比
        float temp = h / uiRoot.manualHeight;
        float realeScale = temp / designScale ;
        foreach (ScaleData scale in scaleDatas)
        {
            SetParticleScale(scale.transform.gameObject, realeScale);
        }
    }

    void SetParticleScale(GameObject go, float scale)
    {
        if (go == null)
            return;

        ParticleSystem[] particleSystemArray = go.GetComponentsInChildren<ParticleSystem>();
        foreach (ParticleSystem particle in particleSystemArray)
        {
            particle.startSize *= scale;
        }
    }

    class ScaleData
    {
        public Transform transform;
        public Vector3 beginScale = Vector3.one;
    }
}

代碼直接放着,說一下比較坑的一點是縮放比例,之前看到的文章是用當前屏幕的比例除上編輯時使用的比例,以此來算出的一個比例但是在NGUI中並不適用,於是用UIRoot來進行的計算,這樣就可以了,關於UIRoot相關的可以看一下這一篇文章.
思路就是算出當前的縮放比和編輯時的縮放比然後用編輯時的尺寸乘上這個縮放比就能算出當前的尺寸.

參考
Momo:http://www.xuanyusong.com/archives/4271

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章