[Unity3D]Unity3D游戏开发之使用UniSky呼风唤雨

       大家好,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。

       好,继续我们在上一篇中实现的地形,在这一篇文章中我们来为这个地形添加天气效果。我们使用的是UniSky插件,大家可以在Assets Store中找到这个插件。首先,我们引入资源包,注意不要带有中文路径,否则会报错。此时,在项目中会增加一个UniSky的文件夹,如图所示:

[Unity3D]Unity3D游戏开发之使用UniSky呼风唤雨_第1张图片[Unity3D]Unity3D游戏开发之使用UniSky呼风唤雨_第2张图片

        接下来,找到UniSky/Resources/下的UniSkyAPI,这是一个预设文件,我们将其拖入到我们的场景中来,将其和主摄像机关联,如图所示:

[Unity3D]Unity3D游戏开发之使用UniSky呼风唤雨_第3张图片

       接下来创建一个空的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;
		
		//初始化UniSky
		uniSky.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:做成特效动画文件特别大):

[Unity3D]Unity3D游戏开发之使用UniSky呼风唤雨_第4张图片

         最后给出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)。如果你想要粉红色或绿色的云:D
SetColorVariance(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(float
frequency);

      谢谢大家,大家晚安!

你可能感兴趣的:(unity3d)