zoukankan      html  css  js  c++  java
  • unity特效ParticleSystem在UI上缩放(自适应屏幕)

    结合了下面这两个方案:

    http://www.xuanyusong.com/archives/4271

    http://www.unity.5helpyou.com/3630.html

    第一个方案,应付不了复杂些的特效;

    两篇文章结合后的代码如下:

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class ScaleParticles : MonoBehaviour {
        private List<float> m_initialSizes = new List<float>();
    
        public void CacheParticleScale() {
            // Save off all the initial scale values at start.
            ParticleSystem[] particles = gameObject.GetComponentsInChildren<ParticleSystem>();
            for (int i=0;i<particles.Length;i++) {
                m_initialSizes.Add(particles[i].startSize);
                
                ParticleSystemRenderer renderer = particles[i].GetComponent<ParticleSystemRenderer>();
                if (renderer) {
                    m_initialSizes.Add(renderer.lengthScale);
                    m_initialSizes.Add(renderer.velocityScale);
                }
            }
        }
    
        public void ResetParticleScale() {
            float designWidth = 1920;//开发时分辨率宽
            float designHeight = 1080;//开发时分辨率高
            float designScale = designWidth / designHeight;
            float scaleRate = (float)Screen.width / (float)Screen.height;
            float scaleFactor = scaleRate / designScale;
    
            // Scale all the particle components based on parent.
            int arrayIndex = 0;
            ParticleSystem[] particles = gameObject.GetComponentsInChildren<ParticleSystem>();
            for (int i = 0; i < particles.Length; i++) {
                float rate = 1;
                if (scaleRate < designScale) {
                    rate = scaleFactor;
                }
                else {
                    rate = 1;
                }
    
                particles[i].startSize = m_initialSizes[arrayIndex++] * rate;
                ParticleSystemRenderer renderer = particles[i].GetComponent<ParticleSystemRenderer>();
                if (renderer) {
                    renderer.lengthScale = m_initialSizes[arrayIndex++] *
                    rate;
                    renderer.velocityScale = m_initialSizes[arrayIndex++] *
                    rate;
                }
            }
        }
    }
  • 相关阅读:
    448. Find All Numbers Disappeared in an Array
    447. Number of Boomerangs
    441. Arranging Coins
    438. Find All Anagrams in a String
    437. Path Sum III
    434. Number of Segments in a String
    422. Valid Word Square
    415. Add Strings
    414. Third Maximum Number
    [codility]Array-closest-ascenders
  • 原文地址:https://www.cnblogs.com/kuluodisi/p/7341079.html
Copyright © 2011-2022 走看看