09 特效系統

  

  粒子系統
粒子組件:在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 ();
    }
相關文章
相關標籤/搜索