現實生活中,當陽光直射大地,而天空中又有不少雲時,雲層的影子老是會投射在大地上,風吹着雲層移動,影子也跟着運動,如圖3-28所示。cookie
圖3-28 天空中的雲朵與大地上的影子函數
要在遊戲中,模擬與之相似的大氣現象時,就須要使用cookie類型的紋理。spa
本小節將使用PhotoShop繪製有云層效果的紋理圖,而後爲其添加透明度信息。具體操做過程以下:orm
(1)使用PhotoShop建立512×512像素大小的圖。對象
(2)在PhotoShop內,單擊【濾鏡】|【渲染】|【雲彩】命令,便可在瞬間完成雲層的繪製,如圖3-29所示。遊戲
圖3-29 使用PhotoShop繪製雲層遊戲開發
(3)全選(Ctrl+A)並複製(Ctrl+C)此圖像,切換到通道窗口下,新建通道,使用默認的名稱Alpha 1,選中新建的通道,而後粘貼(Ctrl+V)。這樣透明度的信息也就添加完了。開發
(4)存儲此雲層紋理,而後導入到Unity。it
爲了模擬雲層的移動效果,須要想遊戲場景中添加相應對象,並作些簡單設置,具體步驟以下:io
(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人!