大家好,歡迎大家關注我的部落格,我的部落格地址是blog.csdn.net/qinyuanpei。
好,繼續我們在上一篇中實現的地形,在這一篇文章中我們來為這個地形添加天氣效果。我們使用的是UniSky外掛程式,大家可以在Assets Store中找到這個外掛程式。首先,我們引入資源套件,注意不要帶有中文路徑,否則會報錯。此時,在項目中會增加一個UniSky的檔案夾,:
接下來,找到UniSky/Resources/下的UniSkyAPI,這是一個預設檔案,我們將其拖入到我們的情境中來,將其和主攝像機關聯,:
接下來建立一個空的GameObject對象,用來綁定指令碼,我們一起來看下面的指令碼,該指令碼可以在UniSky\Example Project\Assets路徑下找到:
using UnityEngine;using System.Collections;public class UniSkyScript : MonoBehaviour {//定義UniSkyAPI執行個體private UniSkyAPI uniSky;void Awake() {//擷取執行個體uniSky = GameObject.Find("UniSkyAPI").GetComponent("UniSkyAPI") as UniSkyAPI;//初始化UniSkyuniSky.InstantiateUniSky();//設定初始化值uniSky.SetTime(12.0f);//設定一天的時間(0-24小時迴圈)uniSky.SetAmbientLighting(new Color(0.1f, 0.1f, 0.1f, 0.1f));//設定周圍環境光線照顏色uniSky.SetStormCenter(new Vector3(0,0,0));//設定風暴中心uniSky.SetSunShadows(LightShadows.Soft);//設定太陽陰影//常用的方法uniSky.LerpCloudCover(0.5f, 5000.0f);//設定雲層層級(從-5到5)uniSky.LerpPrecipitationLevel(0.6f, 5000.0f);//設定雲層中沉澱物的層級(從0到2)uniSky.LerpStormCloudCover(-1.0f, 10000.0f);//設定暴風雨覆蓋層級(-3.5到-1.0)uniSky.LerpRainLevel(500, 0.2f, 10000.0f);//設定雨的層級uniSky.LerpStormLevel(300, 0.4f, 20000.0f);//設定風暴層級uniSky.LerpSunIntensity(0.2f, 10000.0f);//設定太陽高度uniSky.LerpFogLevel(0.02f, 20000.0f);//設定雲霧層級uniSky.LerpAmbientLighting(new Color(0.0f, 0.0f, 0.0f, 0.0f), 5000);//設定周圍環境光線照顏色uniSky.ClearDropletBuffer();//清理霧滴緩衝uniSky.LerpDropletLevel(10, 20000.0f);//設定霧滴層級}void Update() {}}
指令碼中的方法都定義在UniSkyAPI類檔案中,大家可以自行查閱瞭解,現在我們將這個指令碼和剛才建立的空的遊戲體綁定,運行遊戲,效果如下(ps:做成特效動畫檔案特別大):
最後給出UniSkyAPI中方法注釋:
//一天的時間(0到24小時迴圈)SetTime(float time);LerpTime(float time, float milliseconds);GetTime();//返回太陽的顏色GetSunColor();//啟用或禁用太陽和月亮的陰影。類型: "LightShadows.None" 、"LightShadows.Hard"和 "LightShadows.Soft"public void SetSunShadows(LightShadows sunShadows)public void SetMoonShadows(LightShadows moonShadows) //設定暴風雨雲層中心的座標SetStormCenter(Vector3 stormCenter); //散射半徑,他影響著天空的顏色(預設是45000,通常情況下是一個真實的天空)SetScatteringRadius(float scatteringRadius);LerpScatteringRadius(float scatteringRadius, float milliseconds); //主大氣層的覆蓋是(-5到5)void SetCloudCover(float cloudCover);LerpCloudCover(float cloudCover, float milliseconds); //黑暗的雲層,不是暴風雨的大氣層。(2-0,越低,雲層顏色越深)SetPrecipitationLevel(float precipitationLevel);LerpPrecipitationLevel(float precipitationLevel, float milliseconds); //暴風雨的覆蓋層級是(建議是-3.5到-1.0)SetStormCloudCover(float cloudCover);LerpStormCloudCover(float cloudCover, float milliseconds); //雨的數量。沒有大暴雨的,但是都是小雨。(任何地方都是從0-1000)SetRainLevel(float rainLevel, float sfxLevel);LerpRainLevel(float rainLevel, float sfxLevel, float milliseconds); //特大暴雨。一片都有雨。(任何地方都是從0-200)SetStormLevel(float stormLevel, float sfxLevel);LerpStormLevel(float stormLevel, float sfxLevel, float milliseconds); //太陽的亮度或濃度。由於黑暗中陰天或暴風雨天(0到0.5)淡入淡出SetSunIntensity(float intensity);LerpSunIntensity(float intensity, float milliseconds); //設定內建霧(0到0.03)SetFogLevel(float fogLevel);LerpFogLevel(float fogLevel, float milliseconds); //設定螢幕映像上滴落的速率(0到5)SetDropletLevel(float dropletLevel);LerpDropletLevel(float dropletLevel, float milliseconds);//設定雲的方向,加速度和演化的速度。X=x方向和加速度,Y=y方向和加速度,Z=演化速度(0到1)SetCloudSpeedDirection(Vector3 speedDirection);LerpCloudSpeedDirection(Vector3 speedDirection, float milliseconds);//光暈差異。設定雲邊緣的照明強度(0到10)。提示:設定為0左右,會有一個很好的捲雲效果。SetGlowVariance(float glowVariance);LerpGlowVariance(float glowVariance, float milliseconds); //設定雲褪色到大氣中的距離(0到20)SetViewDistance(float viewDistance);LerpViewDistance(float viewDistance, float milliseconds); //調節預設顏色。建議RGB的預設值(1.5,1.5,1.5)。如果你想要粉紅色或綠色的云:DSetColorVariance(Vector3 colorVariance);LerpColorVariance(Vector3 colorVariance, milliseconds);//如果你想時間自動迴圈,這個是時間流逝的速度。(0到0.1)SetSpeedOfTime(float speedOfTime);//改變光散射到雲中,隻影響雲的顏色。最好是保持他的預設值,40.(-20到100)SetRayleighLevel(float rayleighLevel);//如果啟用該選項,一天中時間的播放器與系統時鐘同步。SetUseSystemTime(bool enabled); //改變環境光線的顏色。我建議在一天的時間內進行插值或混濁。SetAmbientLighting(Color ambientLevel);LerpAmbientLighting(Color ambientLevel, float milliseconds); //設定月亮的大小SetMoonSize(float moonSize); //清除霧滴緩衝ClearDropletBuffer(); //設定打雷閃電的頻率。越高越頻繁(0到100)。SetLightningFrequency(floatfrequency);
謝謝大家,大家晚安!