粒子系統
粒子組件:在Unity中製做粒子特效是經過ParticleSystem組件來實現的,能夠在Hierarchy中右鍵直接建立,也能夠經過建立一個空物體,爲空物體添加ParticleSystem組件來實現。shell
粒子系統屬性dom
(1)Duration:整個粒子系統的持續時間
(2)Looping:是否開啓循環,開啓後循環播放粒子效果
(3)Prewarm:是否看開啓預熱,只有在開啓循環以後才能夠勾選此選項
(4)Start Delay:預熱延遲。勾選預熱後不能勾選該選項
(5)Start Lifetime:粒子生命週期,一個粒子從出現到消失的時間
(6)Start Speed:粒子出現時的發射速度
(7)3D Start Size:可在XYZ軸上更改粒子的大小
(8)Start Size:粒子大小,直接更改
(9)Start Rotation:粒子出現時的旋轉角度
(10)Randomize Roation:粒子在運動過程當中的旋轉角度
(11)StartColor;粒子顏色(有多種顏色模式,漸變...)
(12)GravityModifier:粒子是否受重力影響,值爲零的時候不受重力
(預設值爲0,表明粒子沒受到重粒影響,因此會一直往上飄,當數值增長,粒子就會往下掉。)
(13)SimulationSpace:粒子座標系(自身座標,世界座標,自定義)
(14)SimulationSpeed:速度繼承,粒子速度繼承運動的速度
(15)ScalingMode:縮放比例
(16)PlayOnAwake:勾選後遊戲開始後播放
(17)MaxParticle:粒子釋放的最大數量
(假設設定爲100,當場景裏的粒子數量達到100上限時,發射器就會暫時中止發射射粒子,等部分粒子消失纔會繼續發射。)
(18)AutoRandomSeed:自動隨機出現粒子ide
粒子的發射模塊oop
RateoverTime:發射時間
RateoverTime:發射距離
Bursts:爆炸效果動畫
粒子系統的形狀模塊spa
Shape:形狀(球型,半球形,錐形,立方體,網格,圓形,刀鋒形)
Angle:椎體角度
Radius:椎體半徑
Length:椎體高度(當Emitform值爲volumeshell或volume時可用)
Emitform:粒子發射的位置
Randomize(Spherize) Direction:發射方向是否隨機插件
粒子在整個生命週期中的速度3d
Space:座標模式(世界座標,自身座標)code
Limit Velocity over Lifetime :速度限制模塊 orm
Separate Axes :分離軸
Speed : 速度限制
Dampen :阻尼,當速度超出速度限制的時候,會下降速度
Curve:曲線;
Random Between Two Constants:在兩個常量直接隨機
Random Between Two Curves :在兩條曲線直接隨機
速度繼承
Mode:initial:繼承速度,Current:當前速度
Force over Lifetime :x,y,z,在x,y,z軸施加力的限制
Space : 參考座標系
Randomize:只有在Random Between Two Constants 或者Random Between Two Curves時纔可啓用
在粒子的生命週期中顏色的變化
速度變化顏色發生的變化
Color :顏色值
Gradient:漸變
Random Between Two Gradients:在兩個漸變的顏色中隨機
Random Between Two Gradients :在兩個漸變的顏色中隨機
Size over Lifetime:在生命週期內控制粒子的尺寸
Curve:曲線
Random Between Two Constants:在兩個常數之間隨機
Random BeTween Two Curves :在兩個曲線之間隨機
Size by Speed :經過控制速度來控制粒子的尺寸
size:尺寸
Curve:曲線
Random Between Two Constants:在兩個常數之間隨機
Random BeTween Two Curves :在兩個曲線之間隨機
粒子在生命週期中的旋轉角度
經過速度控制粒子的旋轉角度
External Forces:外部力對粒子系統影響模塊
Noise:噪音
Separate Axes :單獨的軸
Strength:強度
Frequency:頻率
Scroll speed:滾動速度
Damping:阻尼
Octaves:振幅
Octaves Multiplier:增長振幅
Quality :質量
Remap:從新映射
Remap Curve:從新映射曲線
粒子系統的碰撞模塊
Planes:平面碰撞(碰撞類型:planes,world:世界座標碰撞)平面碰撞最多支持六個
Visualization:碰撞平面的顯示方式
ScalePlane:平面的縮放比例
Dampen:阻尼係數
Bounce:反彈係數
LifetimeLoss:在生命週期內碰撞丟失機率係數
MinKillSpeed:粒子系統碰撞銷燬的最小速度
MaxKillSpeed:粒子系統碰撞銷燬的最大速度
RadiusScale:粒子的半徑
SendCollisionMessage:是否發送碰撞信息
實現碰撞的方法 void OnParticleCollision (GameObject other) { Rigidbody body = other.GetComponent.<Rigidbody>(); if (body) { Vector3 direction = other.transform.position - transform.position; direction = direction.normalized; body.AddForce (direction * 5); } }
粒子系統的觸發模塊Triggers
colliders:粒子觸發的物體
Inside:粒子觸發內部
outside:粒子觸發外部
Enter:開始觸發
Exit:觸發結束
RadiusScale:觸發的半徑
VisualizeBounds:想象範圍
離子系統發射器:Sub Emitters
Brith:粒子剛生成的時候調用的子發射器
Collision:粒子碰撞的時候調用的子發射器
Death:粒子銷燬時調用的子發射器
粒子系統貼圖動畫
Tiles:分割數 X:水平方向分割 ;Y:豎直方向分割
Animation:WholeSheet:所有圖片參與幀動畫
SingleRow:單行圖片參與幀動畫
FraneoverTime:在生命週期內幀動畫變化的速度
Cycles:在粒子生命週期內,幀動畫循環的次數
粒子系統的渲染模塊
RenderMode:BillBoard:面板渲染
StretchedBillBorard:拉伸渲染
HorizontalBillBorard:水平渲染
VerticalBillBorard:垂直渲染
MeshBillBorard:網格渲染
NormalDirection:法線方向
Material:材質
SortMode:排序模式
Min/Max Particle Size:最小/最大的粒子尺寸
CustomShadows:是否開啓投影
ReceiveShadows:接受投影
SortingLayer:排序層級
Order in layer:在層中的順序
Resimulate:從新開始發射粒子
線性渲染
線性渲染使用到線性渲染組件(LineRenderer),該組件實在兩個或更多個點之間繪製出一條直線,一個線性渲染器組件能夠繪製任何線,從一個簡單的直線到複雜的螺旋線。若是要繪製兩條或更多條的線,須要建立更多的遊戲物體,每個遊戲物體都掛載線性渲染組件。
線性渲染組件(LineRenderer)
Cast Shadows:投射陰影
Receive Shadows:是否接受陰影
Motion Vectors:運動矢量(僅攝像機移動,遊戲物體移動,無運動)
Materials:畫線材質,能夠爲繪製出的線段添加材質,每個材質都會對畫線渲染一次
Positions:繪製線段的位置點,最少兩個,即在哪兩個點之間繪製線
Use World Space:使用世界座標
Loop:勾選後會使繪製的線段造成一個閉合的圖案
Width:繪製線段的寬度,能夠經過曲線控制隨着繪製的線段的長度的變化寬度隨之變化,使得繪製出的線更具備多樣性。
Color:畫線顏色,能夠設置爲漸變色。
Corner Vertices:數值越大,畫線的拐角處約圓滑
End Cap Vertices:同上,數值越大,畫線的兩端越圓滑
Alignment:畫線校準(View 以攝像機爲基準校準 Local 以自身爲基準校準)
Texture Mode:圖片填充方式(拉伸,平鋪...)
Light Probes:照明模式
LineRenderer經常使用屬性:
SetColor:設置顏色
SetPosition:設置點的位置
positionCount:設置頂點數目
SetStartWidth:設置起始寬度
SetEndWidth:設置結束寬度
拖尾渲染
拖尾渲染時使用拖尾渲染組件(Trail Renderer),來渲染出遊戲物體的移動軌跡的一種渲染模式
要讓那個物體產生拖尾效果就在哪個物體上掛載TrailRenderer組件
組件具體屬性同畫線渲染差很少
拖尾渲染也會根據Assert Store當中的插件MeleeWeapon Trail來製做刀光拖尾效果
MeleeWeapon Trail插件
Material:表示刀光拖尾效果材質球
LiftTime:表示刀光拖尾的持續時間
Base:表示刀光的起始位置
Tip:表示刀光的結尾位置
在要拖尾渲染的物體下建立兩個空的子物體,分別取名tip與base。分別用來表示刀光拖尾的結尾端與開端。將tip移動到武器的尾端,將base移動到武器的柄端
貼圖融合
把兩張圖片融合成一張圖片的效果。
實例:彈痕效果
原理:實現兩張圖片的融合,即將其中一張圖片的的像素點放到另一張圖片上。
一、須要兩張圖片,一張牆壁的圖片,一張彈痕的圖片,要實現用鼠標點擊牆壁圖片時,以點擊的位置爲中心點,將彈痕圖片的像素點設置在牆壁圖片
二、建立Unity工程,這兩張圖片拖到工程後,作如下修改設置
①須要設置這兩張圖片的TextureType爲Advanced;
②這兩張圖片都要勾選上Read/WriteEnable屬性,容許圖片進行像素編輯;
③設置彈痕圖片的MaxSize爲64,Format格式爲:RGBA32 bit;
④設置wall圖片的MaxSize爲2048,Format格式爲RGBA32 bit;
三、建立場景,直接將牆壁圖片託放在Plane上便可
在遊戲場景中建立一個plane,將處理過的牆面圖片拖上去
四、建立腳本PlaneScr,在腳本中實現使用鼠標點擊牆壁時可以生成相應的彈痕,將腳本掛載在Plane上
//得到強和子彈的紋理 public Texture2D bulletTexture; public Texture2D wallTexture; //定義一個牆面副本 Texture2D newWallTexture; //記錄牆面和子彈的寬高 float wall_height; float wall_width; float bullet_height; float bullet_width; //射線碰撞信息 RaycastHit hitInfo; //定義一個泛型隊列來存放圖像像素點信息 Queue <Vector2> uvQueue; 在Start方法中爲字段初始化 void Start () { uvQueue = new Queue<Vector2> (); //獲取牆的貼圖 wallTexture = GetComponent<MeshRenderer> ().material.mainTexture as Texture2D; //備份用做牆面的復原 newWallTexture = Instantiate (wallTexture); //將備份的圖片賦值給plane GetComponent<MeshRenderer> ().material.mainTexture = newWallTexture; //得到牆面和子彈的初始寬高 wall_height = newWallTexture.height; wall_width = newWallTexture.width; bullet_height = bulletTexture.height; bullet_width = bulletTexture.width; } 在Update方法中寫貼圖融合的效果,鼠標點擊牆面發射射線,以射線碰撞 的點爲中心,將彈孔圖片的像素點替換到牆面上 void Update () { //鼠標點擊 if (Input.GetMouseButtonDown (0)) { Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); if (Physics.Raycast (ray, out hitInfo)) { if (hitInfo.collider.name == "Plane") { Vector2 uv = hitInfo.textureCoord; uvQueue.Enqueue (uv); //說明子彈擊中了牆面 //開始將牆壁上點擊點爲中心,彈孔圖片大小的區域的像素點改爲彈孔的像素點 //遍歷子彈圖片區域,取出子彈圖片上的像素點 for (int i = 0; i < bullet_width; i++) { for (int j = 0; j < bullet_height; j++) { //獲得牆壁上對應子彈應該出現的每個像素點 float w = uv.x * wall_width - bullet_width / 2 + i; float h = uv.y * wall_height - bullet_height / 2 + j; //獲取牆面和子彈每個像素點的顏色 Color wallColor = newWallTexture.GetPixel ((int)w, (int)h); Color bulletColor = bulletTexture.GetPixel (i, j); //融合 newWallTexture.SetPixel ((int)w, (int)h, wallColor * bulletColor); } } //將修改後的融合圖片應用一下 newWallTexture.Apply (); //延遲3秒後 Invoke ("ReturnWall", 3f); } } } 恢復牆面(即讓彈孔消失的方法) //恢復牆面 void ReturnWall () { //第一個彈孔的出隊列 Vector2 uv = uvQueue.Dequeue (); for (int i = 0; i < bullet_width; i++) { for (int j = 0; j < bullet_height; j++) { float w = uv.x * wall_width - bullet_width / 2 + i; float h = uv.y * wall_height - bullet_height / 2 + j; //獲取原牆上的像素點 Color wallColor = wallTexture.GetPixel ((int)w, (int)h); newWallTexture.SetPixel ((int)w, (int)h, wallColor); } } newWallTexture.Apply (); }