Unity 遊戲開發技巧集錦之使用cookie類型的紋理模擬雲層的移動

Unity 遊戲開發技巧集錦之使用cookie類型的紋理模擬雲層的移動

使用cookie類型的紋理模擬雲層的移動

現實生活中,當陽光直射大地,而天空中又有不少雲時,雲層的影子老是會投射在大地上,風吹着雲層移動,影子也跟着運動,如圖3-28所示。cookie

 

 

圖3-28  天空中的雲朵與大地上的影子函數

要在遊戲中,模擬與之相似的大氣現象時,就須要使用cookie類型的紋理。3d

製做雲層效果的紋理

本小節將使用PhotoShop繪製有云層效果的紋理圖,而後爲其添加透明度信息。具體操做過程以下:orm

(1)使用PhotoShop建立512×512像素大小的圖。對象

(2)在PhotoShop內,單擊【濾鏡】|【渲染】|【雲彩】命令,便可在瞬間完成雲層的繪製,如圖3-29所示。blog

 

 

圖3-29  使用PhotoShop繪製雲層遊戲

(3)全選(Ctrl+A)並複製(Ctrl+C)此圖像,切換到通道窗口下,新建通道,使用默認的名稱Alpha 1,選中新建的通道,而後粘貼(Ctrl+V)。這樣透明度的信息也就添加完了。遊戲開發

(4)存儲此雲層紋理,而後導入到Unity。開發

在Unity中完成的準備工做

爲了模擬雲層的移動效果,須要想遊戲場景中添加相應對象,並作些簡單設置,具體步驟以下:it

(1)在Project視圖裏,選中導入的雲層紋理,而後在Inspector視圖裏設置下列屬性值,如圖3-30所示。

 

  • q  Texture Type爲Cookie;
  • q  Light Type爲Directional;

 

 

 

圖3-30  設置雲層紋理的屬性

(2)單擊GameObject|Create Other|Terrain和Directional Light命令,爲遊戲添加地形(Terrain)和方向光源(Directional Light)對象。

(3)選中Directional Light,而後在Inspector視圖裏,修改光源下列屬性,如圖3-31所示。

 

  • q  Position的X、Y、Z均設置爲0;
  • q  Rotation的X、Y、Z設置爲90、0、0;此時光線會與地形平面垂直,如圖3-32所示,這是爲了不陰影扭曲。
  • q  Cookie設置爲雲層紋理;
  • q  Cookie Size設置爲200;此屬性控制照射在地形上的雲層的密度,值越大密度越小。
  • q  Shadow Type設置爲No Shadows;

 

 

 

圖3-31  修改光源的屬性        圖3-32  光線與地形平面垂直

編寫控制雲層移動的腳本

光是將雲層的陰影投射在地形平面上,還看不出什麼效果,因此本小節打算編寫一個腳本,用於控制雲層的移動,這樣的話效果會更好些。在Project視圖下,建立一個C#腳本,並命名爲MovingShadows。打開此腳本,寫入下面的代碼:

 

  • 01     using UnityEngine;
  • 02     using System.Collections;
  • 03    
  • 04     public class MovingShadows : MonoBehaviour
  • 05     {
  • 06              public float windSpeedX;                             //在X軸方向上的速度
  • 07              public float windSpeedZ;                              //在z軸方向上的速度
  • 08              public float lightCookieSize;                       //直線光源Cookie Size屬性的值
  • 09              private Vector3 initPos;
  • 10              //腳本被初始化時,調用此函數
  • 11              void Start ()
  • 12              {
  • 13                       initPos = transform.position;
  • 14              }
  • 15              //運行遊戲時,每幀都調用此函數
  • 16              void Update ()
  • 17              {
  • 18                        //在X軸方向,移動雲層
  • 19                       if (Mathf.Abs(transform.position.x) >= Mathf.Abs(initPos.x) + lightCookieSize)
  • 20                       {
  • 21                                 Vector3 pos = transform.position;
  • 22                                pos.x = initPos.x;
  • 23                                 transform.position = pos;
  • 24                       }
  • 25                       else
  • 26                       {
  • 27                                 transform.Translate(Time.deltaTime * windSpeedX, 0, 0, Space.World);
  • 28                       }
  • 29                        //在Z軸方向,移動雲層
  • 30                       if (Mathf.Abs(transform.position.z) >= Mathf.Abs(initPos.z) + lightCookieSize)
  • 31                       {
  • 32                                 Vector3 pos = transform.position;
  • 33                                 pos.z = initPos.z;
  • 34                                 transform.position = pos;
  • 35                       }
  • 36                       else
  • 37                       {
  • 38                                 transform.Translate(0, 0, Time.deltaTime * windSpeedZ,Space.World);
  • 39                       }
  • 40              }
  • 41     }

 

此腳本將被賦予方向光源。遊戲開始運行時,腳本11行的Start()函數被執行,獲知當前方向光源的位置;遊戲運行時,16行的Update()在每幀都被執行的,做用是控制方向光源在XZ平面上的移動。

選中被賦予MovingShadows腳本的方向光源,在Inspector視圖裏能夠看到腳本組件上的3個屬性:Wind Speed X、Wind Speed Z和Light Cookie Size,如圖3-33所示。

提示:屬性的含義在腳本的註釋中有說明。

 

 

圖3-33  腳本組件上的3個屬性

雲層效果展現

設置好雲層的移動速度,調整好攝像機的視圖效果後,就能夠運行遊戲了。固然了,看到的就是雲層在地形表面上移動的場景了,如圖3-34所示。

 

 

圖3-34  模擬雲層移動的效果

本文選自:Unity 遊戲開發技巧集錦大學霸內部資料,轉載請註明出處,尊重技術尊重IT人!

相關文章
相關標籤/搜索