Unity3D教程:如何使用動畫(huà)系統制作(zuò)下(xià)雨效果

發表日(rì)期:6/2/2018 10:05:52 PM    浏覽次數:7706     

  很(hěn)多遊戲都(dōu)會有(yǒu)下(xià)雨這(zhè)個(gè)場(chǎng)景,那(nà)麽在開(kāi)發過程中要如何實現(xiàn)下(xià)雨呢(ne)?隻需要借助自(zì)帶的(de)動畫(huà)系統就可以制作(zuò)下(xià)雨效果,鑒于有(yǒu)些開(kāi)發者開(kāi)不知道(dào),那(nà)麽就看(kàn)看(kàn)下(xià)面的(de)實現(xiàn)方法吧(ba)。
  
  使用動畫(huà)系統制作(zuò)下(xià)雨效果方法
  
  先制作(zuò)下(xià)雨的(de)雨滴漣漪。
  
  步驟1:
  
  在project中新建文(wén)件(jiàn)夾,命名為(wèi)rainFX。将圖片素材RainStreak及Ripple導入到rainFX文(wén)件(jiàn)夾中,創建一個(gè)plane,改名為(wèi)RippleObj,創建一個(gè)material,命名為(wèi)ripple。(将導入的(de)Ripple貼圖的(de)Alpha from Grayscale 打上(shàng)勾,以使貼圖的(de)背景透明(míng))
  
  步驟2:
  
  将ripple材質賦給RippleObj。
  
  修改材質的(de)Shader為(wèi)Particles/Addtive,将Ripple貼圖賦給ripple材質的(de)Texture,在inspector窗口中修改Particle Texture,Tilling的(de)x值設為(wèi)0.1666,y為(wèi)1,offset的(de)x為(wèi)0.8333,y為(wèi)0。選中RippleObj,将Shader下(xià)的(de)Tint Color改為(wèi)白色。(改為(wèi)白色為(wèi)了使雨滴更加明(míng)顯一點)

  
  修改後效果:
  
  步驟3:
  
  選中RippleObj,按Ctrl+6,調出Animation窗口,點擊窗口下(xià)的(de)Ripple(material),會發現(xiàn)下(xià)面都(dōu)是灰色不可選狀态。

  
  點擊RippleObj右邊的(de)一個(gè)小(xiǎo)按鈕,會出現(xiàn)[Create New Clip],點擊。此時(shí)Ripple(Material)下(xià)的(de)選項都(dōu)已可用。

  
  點擊後會出現(xiàn)下(xià)面的(de)對(duì)話(huà)框,提示保存動畫(huà)文(wén)件(jiàn)。命名為(wèi)RainAnimation,保存。

  
  步驟4:
  
  選擇Ripple(Material)下(xià)的(de)Main Tex.offset.x,點擊右邊的(de)小(xiǎo)橫線->Addkey。

  
  拖動時(shí)間(jiān)軸到0.05,再次Addkey,修改offset.x為(wèi)0.1666。分别在0幀Addkey,offset.x為(wèi)0,0.05幀Addkey,offset.x為(wèi)0.1666,0.1幀Addkey,offset.x為(wèi)0.3333,0.15幀Addkey,offset.x為(wèi)0.5,0.2幀Addkey,offset.x為(wèi)0.6666,0.25幀Addkey,offset.x為(wèi)0.8333。效果圖如下(xià):

  
  步驟5:
  
  此時(shí)的(de)Animation窗口中有(yǒu)一條從(cóng)0.0—0.25的(de)紅色斜線,用鼠标框選六個(gè)關鍵幀,右鍵—>Both Tangents—>Constant(右鍵需在紅色的(de)關鍵點上(shàng)點擊)。此時(shí)斜線被改為(wèi)梯形上(shàng)升的(de)線。選擇Tint Color.a,在0.0幀修改Tint Color.a為(wèi)1,0.25幀即最後一幀設置Tint Color.a為(wèi)0。使動畫(huà)有(yǒu)一個(gè)透明(míng)漸變的(de)效果。


  
  到此,漣漪效果制作(zuò)完成。
  
  步驟6:開(kāi)始添加腳本,控制漣漪的(de)消失,腳本名:RippleDestroy。
1
2
3
4
5
6
7
8
9
10
using UnityEngine;
using System.Collections;
 
public class RippleDestroy : MonoBehaviour
{
    public void DestroyMe()
    {
        Destroy(gameObject);    //删除自(zì)身(shēn)
    }
}
  
  将腳本賦給RippleObj。
  
  在Animation窗口中,最後一幀即0.25幀處,點擊右邊的(de)Add Event按鈕,在0.25幀添加一個(gè)事(shì)件(jiàn)并将DestroyMe()賦給Function。


  
  步驟7:
  
  将RippleObj拖到rainFX文(wén)件(jiàn)夾中,使之成為(wèi)一個(gè)prefab。然後可以将場(chǎng)景中的(de)RippleObj删掉。

  
  創建一個(gè)空物(wù)體(tǐ)。GameObject—>Create Empty。改名為(wèi)ripple,此時(shí)場(chǎng)景中隻有(yǒu)Main Camera,ripple。
  
  創建一個(gè)rippleFX腳本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using UnityEngine;
using System.Collections;
 
public class rippleFX : MonoBehaviour
{
    public GameObject rippleObj;    //漣漪實例
    int ti;        //計(jì)時(shí)器(qì)
     
   void Start ()
    {
         
    }
     
    void Update ()
    {
        ti++;
        if(ti>=5)        //每隔5幀,計(jì)時(shí)器(qì)發生(shēng)作(zuò)用
        {
            GameObject tempObj=Instantiate(rippleObj) as GameObject;        //複制漣漪物(wù)體(tǐ)
            tempObj.transform.parent=gameObject.transform;                //設置子(zǐ)物(wù)體(tǐ)
            tempObj.animation.Play();                                    //播放(fàng)動畫(huà)文(wén)件(jiàn)
            tempObj.transform.position=transform.position+new Vector3(Random.Range(10,-10),0,Random.Range(10,-10));//移動漣漪物(wù)體(tǐ)到一個(gè)随機(jī)位置
        }
    }
}
  
  将rippleFX腳本賦給空物(wù)體(tǐ)ripple,再将prefab物(wù)體(tǐ)RippleObj賦給ripple的(de)腳本的(de)變量RippleObj即可。

  
  點擊運行,即可出現(xiàn)地(dì)上(shàng)很(hěn)多漣漪的(de)效果。
  
  漣漪做完了,下(xià)一篇繼續寫雨滴的(de)做法~~
  
  接着昨天的(de)(一),今天上(shàng)下(xià)雨效果的(de)後半部分。在最後附上(shàng)網盤鏈接,有(yǒu)使用的(de)素材及本次的(de)工(gōng)程源文(wén)件(jiàn),想看(kàn)看(kàn)的(de)童鞋可以下(xià)載~~
  
  下(xià)雨效果分兩部分:地(dì)上(shàng)的(de)漣漪和(hé)空中的(de)雨滴。那(nà)麽現(xiàn)在就開(kāi)始,是使用unity3d的(de)粒子(zǐ)系統制作(zuò)下(xià)落的(de)雨滴。
  
  步驟1:
  
  新建一個(gè)粒子(zǐ)系統。
  
  GameObject—>Create other—>Particle System。改名為(wèi)raindrop。
  
  步驟2:
  
  新建一個(gè)材質(material),改名為(wèi)跟貼圖一樣的(de)名稱RainStreak,修改材質的(de)Shader為(wèi)Particles/Addtive。

  
  将貼圖RainStreak賦給材質,修改Tiling的(de)x為(wèi)8。

  
  修改RainStreak貼圖的(de)Wrap Mode為(wèi)clamp(8為(wèi)使貼圖在單位面積上(shàng)顯示8個(gè),即使單個(gè)貼圖的(de)面積變小(xiǎo),然後修改Wrap Mode為(wèi)clamp即使粒子(zǐ)系統中顯示的(de)粒子(zǐ)為(wèi)變小(xiǎo)後的(de)單個(gè)貼圖)。

  
  步驟3:
  
  将RainStreak的(de)Material賦給粒子(zǐ)系統的(de)Render下(xià)面的(de)Material。
  
  此時(shí)粒子(zǐ)系統中顯示的(de)即為(wèi)雨滴的(de)貼圖。
  
  步驟4:
  
  修改粒子(zǐ)系統的(de)Shape,使之變為(wèi)圓柱形。

  
  調節參數Emission下(xià)的(de)Rate,可修改雨滴密度。

  
  Rotate by Speed下(xià)的(de)Angular Velocity可改變雨滴的(de)下(xià)落方向。

  
  調節各個(gè)參數完畢後,即可達到最終效果(多調下(xià)參數,以便達到更好(hǎo)的(de)效果)。
  
  到此,下(xià)雨效果完成。

上(shàng)一篇:unity3d中的(de)http通(tōng)信 post/get
下(xià)一篇: Houdini分布式網絡渲染農(nóng)場(chǎng)配置教程