1. 程式人生 > >Unity5中的粒子縮放(附測試原始碼)

Unity5中的粒子縮放(附測試原始碼)

本文章由cartzhang編寫,轉載請註明出處。 所有權利保留。 

文章連結:http://blog.csdn.net/cartzhang/article/details/49363241

作者:cartzhang


開始:

關於Unity 5 中的例子縮放,搜尋了半天竟然還有人說:

As far as I know that is not possible to do from code. 

然後到官方找來了外掛

https://www.assetstore.unity3d.com/cn/#!/content/4400

這貨居然還需要10刀。我表示很不滿啊!


BTW: 官方下載10美刀的居然只能在編輯器中使用,在執行中然並卵的節奏還是讓人疼啊!

---------

方法:

然後功夫不負有心人!!!找到了解決方案。

之前程式碼上有個public void UpdateScale() 

我不瞭解是不是之前的版本的函式。反正是現在沒戲了。

做了簡單修改,然後就大功告成了。

還是程式碼啊!

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

public class ScaleParticles : MonoBehaviour
{
    // @zpj default scale size;
    public float ScaleSize = 1.0f;
    private List<float> initialSizes = new List<float>();

    void Awake()
    {
        // Save off all the initial scale values at start.
        ParticleSystem[] particles = gameObject.GetComponentsInChildren<ParticleSystem>();
        foreach (ParticleSystem particle in particles)
        {
            initialSizes.Add(particle.startSize);
            ParticleSystemRenderer renderer = particle.GetComponent<ParticleSystemRenderer>();
            if (renderer)
            {
                initialSizes.Add(renderer.lengthScale);
                initialSizes.Add(renderer.velocityScale);
            }
        }
    }

    void Start()
    {
        gameObject.transform.localScale = new Vector3(ScaleSize, ScaleSize, ScaleSize);
        // Scale all the particle components based on parent.
        int arrayIndex = 0;
        ParticleSystem[] particles = gameObject.GetComponentsInChildren<ParticleSystem>();
        foreach (ParticleSystem particle in particles)
        {
            particle.startSize = initialSizes[arrayIndex++] * gameObject.transform.localScale.magnitude;
            ParticleSystemRenderer renderer = particle.GetComponent<ParticleSystemRenderer>();
            if (renderer)
            {
                renderer.lengthScale = initialSizes[arrayIndex++] *
                    gameObject.transform.localScale.magnitude;
                renderer.velocityScale = initialSizes[arrayIndex++] *
                    gameObject.transform.localScale.magnitude;
            }
        }
    }

}


使用:

建立一個空物件,把上面的名字為ScaleParticles.cs的拖拽到空物件上。把你需要的粒子效果作為一個子物件掛載到空物件上。

如下所示;


修改檢視板中的scale size 大小,來修改粒子大小。


是不是很簡單實用呢。

原始碼呢:

免分下載地址如下: 原始碼地址:http://download.csdn.net/detail/cartzhang/9207203

-------------------------------------

就是這樣。

若有問題,請隨時聯絡! 非常感謝!!!