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;
                }
            }
        }
    }
  • 相关阅读:
    #Leetcode# 21. Merge Two Sorted Lists
    #Leetcode# 118. Pascal's Triangle
    #LeetCode# 136. Single Number
    #Leetcode# 26. Remove Duplicates from Sorted Array
    #LeetCode# 167. Two Sum II
    #Leetcode# 58. Length of Last Word
    #LeetCode# 35. Search Insert Position
    POJ 2492 J-A Bug's Life
    #Leetcode# 27. Remove Element
    【前端】.easyUI.c#
  • 原文地址:https://www.cnblogs.com/kuluodisi/p/7341079.html
Copyright © 2011-2022 走看看