Unity教程之-Unity5中的particle(粒子)缩放

关于Unity 5 中的例子缩放,搜索了半天竟然还有人说:As far as I know that is not possible to do from code. 后来在assetstore找到一款插件Particle Scaler,这货居然还需要10刀, 居然只能在编辑器中使用,在运行中然并卵的节奏还是让人疼,我表示很不满啊!

然后功夫不负有心人!!!找到了解决方案。废话不说,贴上代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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();
foreach (ParticleSystem particle in particles)
{
initialSizes.Add(particle.startSize);
ParticleSystemRenderer renderer = particle.GetComponent();
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();
foreach (ParticleSystem particle in particles)
{
particle.startSize = initialSizes[arrayIndex++] * gameObject.transform.localScale.magnitude;
ParticleSystemRenderer renderer = particle.GetComponent();
if (renderer)
{
renderer.lengthScale = initialSizes[arrayIndex++] *
gameObject.transform.localScale.magnitude;
renderer.velocityScale = initialSizes[arrayIndex++] *
gameObject.transform.localScale.magnitude;
}
}
}
 
}

使用:

建立一个空对象,把上面的名字为ScaleParticles.cs的拖拽到空对象上。把你需要的粒子效果作为一个子对象挂载到空对象上。

如下所示;

Unity教程之-Unity5中的particle(粒子)缩放_第1张图片

修改检视板中的scale size 大小,来修改粒子大小。

Unity教程之-Unity5中的particle(粒子)缩放_第2张图片

是不是很简单实用呢。好了这就是今天的类容,本篇unity3d教程到此结束,下篇我们再会!

你可能感兴趣的:(Unity3D)