最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity的粒子特效
粒子特效概述
粒子特效的原理是将若干粒子进行无规则组合,以此来模拟火焰、爆炸、水滴、雾气等效果。若要使用粒子特效,首先需要创建。在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滑块动态调整粒子的最大尺寸、消失时间、生成数量以及各轴的移动速度。