1. 程式人生 > >【Unity 3D】學習筆記四十二:粒子特效

【Unity 3D】學習筆記四十二:粒子特效

空間 獲得 material package 一個 log 創建 spa mpi

粒子特效


粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。

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

技術分享



【Unity 3D】學習筆記四十二:粒子特效