代码改变世界

【Unity 3D】学习笔记四十二:粒子特效

2017-05-14 11:45  tlnshuju  阅读(2416)  评论(0编辑  收藏  举报

粒子特效


粒子特效的原理是将若干粒子无规则的组合在一起。来模拟火焰,爆炸。水滴,雾气等效果。

要使用粒子特效首先要创建,在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);
	
	
	}
}
执行: