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

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

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

現實生活中,當陽光直射大地,而天空中又有不少雲時,雲層的影子老是會投射在大地上,風吹着雲層移動,影子也跟着運動,如圖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)存儲此雲層紋理,而後導入到Unityit

Unity中完成的準備工做

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

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

  • q  Texture TypeCookie

  • q  Light TypeDirectional

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

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

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

  • q  PositionXYZ均設置爲0

  • q  RotationXYZ設置爲9000;此時光線會與地形平面垂直,如圖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 XWind Speed ZLight Cookie Size,如圖3-33所示。

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

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

雲層效果展現

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

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

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

相關文章
相關標籤/搜索