unity的粒子特效

2015年01月18日 11:04 0 点赞 0 评论 更新于 2025-11-21 14:42

粒子特效概述

粒子特效的原理是将若干粒子进行无规则组合,以此来模拟火焰、爆炸、水滴、雾气等效果。若要使用粒子特效,首先需要创建。在Hierarchy视图中,点击“Create” -> “Particle System”即可完成创建。

粒子发射器

粒子发射器用于设定粒子的发射属性,例如粒子的大小、数量和速度等。创建完粒子对象后,在右侧的Inspector视图中可以看到所有的粒子属性:

  • emit:是否使用粒子发射器。
  • min size:粒子的最小尺寸。
  • max size:粒子的最大尺寸。
  • min energy:粒子的最小生命周期,单位为秒,表示N秒后粒子消失。
  • max energy:粒子的最大生命周期,单位为秒,表示N秒后粒子消失。
  • min emission:粒子每秒生成的最小数量。
  • max emission:粒子每秒生成的最大数量。
  • world velocity:粒子在3D世界中各轴的速度。
  • local velocity:粒子在自身坐标系中各个轴的移动速度。
  • rnd velocity:各个轴上粒子的随机速度。
  • emitter velocity scale:粒子继承发射的速度。
  • tangent velocity:粒子发射切线的速度。
  • angular velocity:粒子发射的角速度。
  • rnd angular velocity:粒子的随机角速度。
  • rnd rotation:粒子是否随机旋转。
  • simulate in worldspace:是否在世界坐标中模拟粒子。
  • one shot:选择此项后,粒子只发射一次;否则,粒子将连续发射。
  • ellipsoid:粒子产生的所有轴的位置。
  • min emitter range:设定粒子之间的间隙。

粒子动画

粒子动画用于设定粒子渲染中的动画效果。下面对粒子动画中的各个属性进行简单介绍:

  • does animate color:是否开启粒子动画的颜色,颜色将根据粒子自身的生命周期改变。
  • color animation[ n ]:设置动画渐变数组中的颜色。该数组长度为5,即当粒子的颜色发生改变时,会循环这5个颜色。
  • world rotation axis:粒子围绕世界坐标轴旋转。
  • local rotation axis:粒子围绕本地空间轴旋转。
  • size grow:粒子成长的生命周期。
  • rnd force:粒子运行时,每经过一帧就在粒子上加一个随机的力。
  • force:粒子运行时,每经过一帧就在粒子上加一个固定的力。
  • damping:阻力,用于减慢粒子的运动速度。
  • autodestruct:自动销毁粒子动画对象。

粒子渲染器

粒子渲染器主要用于粒子的渲染,涵盖渲染模式、粒子的缩放、粒子的尺寸等方面。其相关属性如下:

  • cast shadows:是否投射粒子的阴影。
  • receive shadows:是否接受粒子的阴影。
  • materials:粒子显示的材质。
  • camera velocity scale:相机缩放的速度。
  • stretch particles:粒子的显示状态,如横向或纵向。
  • length scale:粒子缩放的长度。
  • velocity scale:粒子缩放的速度。
  • max particle size:粒子最大的尺寸。
  • uv animation:设置粒子动画在水平方向和垂直方向上的数量以及播放贴图动画。

粒子效果实例

Unity为粒子提供了丰富的标准包。在Project视图中右键,选择“Import Package” -> “Particles”,即可导入粒子标准包,其中包含许多现成的粒子材质。

以下是一个简单的示例代码,用于动态调整粒子的相关属性:

using UnityEngine;
using System.Collections;

public class Script_06_11 : MonoBehaviour
{
// 粒子对象
GameObject particle = null;
// 粒子X轴方向速度
float velocity_x = 0.0f;
// 粒子Y轴方向速度
float velocity_y = 0.0f;
// 粒子Z轴方向速度
float velocity_z = 0.0f;

void Start ()
{
// 获得粒子对象
particle = GameObject.Find("ParticleSystem");
}

void OnGUI()
{
// 拖动设置粒子的最大尺寸
GUILayout.Label("粒子最大尺寸");
particle.particleEmitter.maxSize = GUILayout.HorizontalSlider (particle.particleEmitter.maxSize, 0.0f, 10.0f, GUILayout.Width(150));

// 拖动设置粒子的最大消失时间
GUILayout.Label("粒子消失时间");
particle.particleEmitter.maxEnergy = GUILayout.HorizontalSlider (particle.particleEmitter.maxEnergy, 0.0f, 10.0f, GUILayout.Width(150));

// 拖动设置粒子的最大生成数量
GUILayout.Label("粒子的最大生成数量");
particle.particleEmitter.maxEmission = GUILayout.HorizontalSlider (particle.particleEmitter.maxEmission, 0.0f, 100.0f, GUILayout.Width(150));

// 拖动设置粒子X轴的移动速度
GUILayout.Label("粒子x轴的移动速度");
velocity_x = GUILayout.HorizontalSlider (velocity_x, 0.0f, 10.0f, GUILayout.Width(150));
particle.particleEmitter.worldVelocity = new Vector3(velocity_x, particle.particleEmitter.worldVelocity.y, particle.particleEmitter.worldVelocity.z);

// 拖动设置粒子Y轴的移动速度
GUILayout.Label("粒子y轴的移动速度");
velocity_y = GUILayout.HorizontalSlider (velocity_y, 0.0f, 10.0f, GUILayout.Width(150));
particle.particleEmitter.worldVelocity = new Vector3(particle.particleEmitter.worldVelocity.x, velocity_y, particle.particleEmitter.worldVelocity.z);

// 拖动设置粒子Z轴的移动速度
GUILayout.Label("粒子z轴的移动速度");
velocity_z = GUILayout.HorizontalSlider (velocity_z, 0.0f, 10.0f, GUILayout.Width(150));
particle.particleEmitter.worldVelocity = new Vector3(particle.particleEmitter.worldVelocity.x, particle.particleEmitter.worldVelocity.y, velocity_z);
}
}

通过上述代码,可以利用GUI滑块动态调整粒子的最大尺寸、消失时间、生成数量以及各轴的移动速度。