文章目录
- 一、前言
- 二、插件下载安装
- 三、快速开始
-
- [1、请查看项目中的 `Enviro 3 -- Sky and Weather` 文件夹,将 `Enviro 3` 预制体拖放到您的场景中。](#1、请查看项目中的
Enviro 3 – Sky and Weather文件夹,将Enviro 3预制体拖放到您的场景中。) - [2、在场景层次结构中选择 `Enviro 3` 对象,在 `Enviro Manager` -> `Setup` -> `Camera` 字段中指定您的主摄像机。](#2、在场景层次结构中选择
Enviro 3对象,在Enviro Manager->Setup->Camera字段中指定您的主摄像机。) - 3、您可能需要检查场景中旧的方向光并将其停用。
- [1、请查看项目中的 `Enviro 3 -- Sky and Weather` 文件夹,将 `Enviro 3` 预制体拖放到您的场景中。](#1、请查看项目中的
- [四、URP 支持](#四、URP 支持)
-
- 1、按照上面的"快速开始"部分操作。
- [2、在 `Enviro Manager` -> `Setup` 部分点击 `Activate URP Support` 按钮。项目将重新编译,请稍等片刻。当显示 `Render Pipeline: URP` 时表示完成。](#2、在
Enviro Manager->Setup部分点击Activate URP Support按钮。项目将重新编译,请稍等片刻。当显示Render Pipeline: URP时表示完成。) - [3、打开 `Project Settings` -> `Graphics`,双击您的渲染管线资产。](#3、打开
Project Settings->Graphics,双击您的渲染管线资产。) - [4、启用 `Depth Texture深度纹理` 选项,然后打开分配的 URP 渲染器。](#4、启用
Depth Texture深度纹理选项,然后打开分配的 URP 渲染器。) - [5、将 `Enviro URP Render Feature` 添加到您的渲染器中。](#5、将
Enviro URP Render Feature添加到您的渲染器中。)
- 五、色调映射
- 六、模块系统
- 七、组件
-
- [1、Enviro 天气区域](#1、Enviro 天气区域)
- 2、特效移除区域
- [4、Enviro 反射探针](#4、Enviro 反射探针)
- [5、Enviro 体积光](#5、Enviro 体积光)
- 八、渐变与曲线
- 专栏推荐
- 完结
一、前言
Enviro 3 - 天空与天气是一个模块化设计的天空、体积云和天气系统。易于使用,众多自定义选项,视觉效果震撼!
功能
- 动态天空
- 照明
- 体量云
- 雾和体积光照
- 天气系统
- 北极光
- 虚拟现实
- 动态时间系统,包含日历。
- 逼真的太阳和月亮位置模拟(纬度/经度)。
- 高效 2D 云
- 季节模拟
- 温度模拟
- 湿度与雪模拟
- 粒子效果管理
- VFX 图形支持
- 音频管理
- 程序化闪电风暴
- 游戏逻辑的事件系统
二、插件下载安装
三、快速开始
1、请查看项目中的 Enviro 3 -- Sky and Weather 文件夹,将 Enviro 3 预制体拖放到您的场景中。

2、在场景层次结构中选择 Enviro 3 对象,在 Enviro Manager -> Setup -> Camera 字段中指定您的主摄像机。

3、您可能需要检查场景中旧的方向光并将其停用。

四、URP 支持
1、按照上面的"快速开始"部分操作。
2、在 Enviro Manager -> Setup 部分点击 Activate URP Support 按钮。项目将重新编译,请稍等片刻。当显示 Render Pipeline: URP 时表示完成。

3、打开 Project Settings -> Graphics,双击您的渲染管线资产。

4、启用 Depth Texture深度纹理 选项,然后打开分配的 URP 渲染器。

5、将 Enviro URP Render Feature 添加到您的渲染器中。

五、色调映射
Enviro 不会限制其效果的亮度。它被设计为与色调映射一起使用,以获得最佳效果和逼真、惊艳的视觉效果。
-
URP 已经内置了后处理系统。只需在场景层次结构中右键单击创建一个新的
Global Volume。然后创建一个新的配置文件并添加Tonemapping模块。选择ACES模式以获得最佳效果。

-
您还需要在相机上启用
Post Processing选项才能使其工作!

六、模块系统
Enviro 3 采用模块化设计。您可以在 Enviro Manager 中添加和移除不同的模块。

- 配置(Configuration):包含所有模块的设置。您可以切换此配置以轻松加载完全不同的 Enviro 3 设置。
- 保存所有模块(Save all Module):点击此按钮将保存所有模块设置到其指定的预设中。
- 加载所有模块(Load all Module):点击此按钮将从其指定的预设中加载所有模块设置。
- 添加模块(Add Modules):点击相应的按钮以添加尚未添加的模块。已添加的模块将显示为灰色且无法重复添加。
- 移除模块(Remove Modules) :点击每个模块左侧的小
X可以移除该模块。
1、时间模块
此模块控制日期、时间和地理位置。如果移除此模块,将显示一个简单的 NonTime 模块,您可以在其中设置太阳和月亮的位置。其他模块需要这些信息才能正常工作。

时间 API:
csharp
// 获取带 UTC 偏移的时间
float timeOfDay = Enviro.EnviroManager.instance.Time.GetTimeOfDay();
// 获取不带 UTC 偏移的时间
float universalTimeOfDay = Enviro.EnviroManager.instance.Time.GetUniversalTimeOfDay();
// 设置时间
Enviro.EnviroManager.instance.Time.SetTimeOfDay(12.5f);
// 获取或设置单独的日期/时间组件
Enviro.EnviroManager.instance.Time.seconds = 1;
Enviro.EnviroManager.instance.Time.minutes = 1;
Enviro.EnviroManager.instance.Time.hours = 1;
Enviro.EnviroManager.instance.Time.days = 1;
Enviro.EnviroManager.instance.Time.months = 1;
Enviro.EnviroManager.instance.Time.years = 1;
// 启用或禁用时间模拟
Enviro.EnviroManager.instance.Time.Settings.simulate = true;
2、光照模块
此模块控制场景光照,如方向性的太阳光和月光、环境光以及反射探针。

光照 API:
csharp
// 强制更新全局反射探针
Enviro.EnviroManager.instance.Lighting.UpdateReflectionForced();
// 启用/禁用 Enviro 对直接光照的控制
Enviro.EnviroManager.instance.Lighting.Settings.setDirectLighting = false;
// 启用/禁用 Enviro 对环境光照的控制
Enviro.EnviroManager.instance.Lighting.Settings.setAmbientLighting = false;
3、反射模块

4、天空模块
此模块控制天空。您可以设置颜色、强度、太阳、月亮、星星和星系的视觉效果。

天空 API:
csharp
// 在内置管线和 URP 中创建并分配天空盒材质
Enviro.EnviroManager.instance.Sky.SetupSkybox();
// 更改天空盒的强度/亮度
Enviro.EnviroManager.instance.Sky.Settings.intensity = 0.5f;
// 更改月亮模式。Simple 模式将使月亮处于与太阳相对的位置
Enviro.EnviroManager.instance.Sky.Settings.moonMode = Enviro.EnviroSky.MoonMode.Simple;
// 在使用 "Simple" 月亮模式时更改月相
Enviro.EnviroManager.instance.Sky.Settings.moonPhase = 0f;
5、雾效模块
此模块控制基于指数高度的雾效和体积光渲染。如果使用了天气或质量模块,此处的某些设置将变灰并由这些模块控制。

雾效 API:
csharp
// 当未使用质量模块时,启用或禁用雾效渲染
Enviro.EnviroManager.instance.Fog.Settings.fog = true;
// 当未使用质量模块时,启用或禁用体积光渲染
Enviro.EnviroManager.instance.Fog.Settings.volumetrics = true;
// 当未使用质量模块时,更改体积光渲染质量
Enviro.EnviroManager.instance.Fog.Settings.quality = Enviro.EnviroFogSettings.Quality.Medium;
6、体积云模块
此模块控制您的体积云。您最多可以有两层云,每层都有自己的设置。云层覆盖率由实时生成的天气图处理。

- 启用
Cloud Shadow选项可将云阴影渲染到您的场景中。 - 启用
Depth Blending可将云与场景混合(例如,当飞越云层时)。 - 设置
Atmosphere Color Saturation Distance可将远处的云与大气混合。
体积云 API:
csharp
// 当未使用质量模块时,启用/禁用体积云
Enviro.EnviroManager.instance.VolumetricClouds.settingsQuality.volumetricClouds = false;
// 当未使用质量模块时,启用/禁用第二层云
Enviro.EnviroManager.instance.VolumetricClouds.settingsGlobal.dualLayer = true;
// 启用/禁用云与场景的混合
Enviro.EnviroManager.instance.VolumetricClouds.settingsGlobal.depthBlending = true;
// 第一层云的设置
Enviro.EnviroManager.instance.VolumetricClouds.settingsLayer1
// 第二层云的设置
Enviro.EnviroManager.instance.VolumetricClouds.settingsLayer2
7、平面云模块
此模块控制您的卷云层和 2D 云。两者都直接渲染在天空盒中。不使用天空模块而使用此模块将无效。

平面云 API:
csharp
// 启用/禁用卷云
Enviro.EnviroManager.instance.FlatClouds.settings.useCirrusClouds = true;
// 启用/禁用 2D 云
Enviro.EnviroManager.instance.FlatClouds.settings.useFlatClouds = true;
// 当未使用天气模块时,设置平面云的覆盖率
Enviro.EnviroManager.instance.FlatClouds.settings.cirrusCloudsCoverage = 1f;
Enviro.EnviroManager.instance.FlatClouds.settings.flatCloudsCoverage = 1f;
8、极光模块
此模块控制极光效果。该效果直接渲染在天空盒着色器中。因此,如果不使用天空模块,它将没有效果。

极光 API:
csharp
// 当未使用天气模块时,设置极光强度
Enviro.EnviroManager.instance.Aurora.Settings.auroraIntensityModifier = 1f;
// 设置极光亮度
Enviro.EnviroManager.instance.Aurora.Settings.auroraBrightness = 100f;
// 设置极光渲染步数以控制质量
Enviro.EnviroManager.instance.Aurora.Settings.auroraSteps = 24;
9、闪电模块
此模块会随机或在目标坐标处创建程序化闪电。
如果使用了音频模块,它还会播放雷声。

Lightning Storm选项将启用/禁用随机闪电。如果天气模块已添加到 Enviro 配置中,它将由天气模块控制。
闪电 API:
csharp
// 当未使用天气模块时,启用/禁用随机闪电
Enviro.EnviroManager.instance.Lightning.Settings.lightningStorm = false;
// 随机施放一道闪电
Enviro.EnviroManager.instance.Lightning.CastLightningBoltRandom();
// 从指定位置施放一道闪电到目标位置
Enviro.EnviroManager.instance.Lightning.CastLightningBolt(Vector3 from, Vector3 to);
10、环境模块
此模块控制您的季节、温度以及潮湿/积雪等环境状态。

环境 API:
csharp
// 启用或禁用 Enviro 计算当前季节
Enviro.EnviroManager.instance.Environment.Settings.changeSeason = false;
// 返回当前季节
Enviro.EnviroEnvironment.Seasons season = Enviro.EnviroManager.instance.Environment.Settings.season;
// 更改季节
Enviro.EnviroManager.instance.Environment.ChangeSeason(Enviro.EnviroEnvironment.Seasons.Spring);
// 返回当前的湿度和积雪量
float wetness = Enviro.EnviroManager.instance.Environment.Settings.wetness;
float snow = Enviro.EnviroManager.instance.Environment.Settings.snow;
// 返回当前温度
float temp = Enviro.EnviroManager.instance.Environment.Settings.temperature;
// 设置一个自定义温度修正值,该值将添加到当前温度中,供您的游戏逻辑使用
Enviro.EnviroManager.instance.Environment.Settings.temperatureCustomMod = 20f;
11、天气模块
天气模块包含一个天气类型列表,这些类型将控制大多数其他模块的设置。天气类型可以平滑过渡地自由更改。
天气模块将控制其他模块的设置。这些设置在其各自模块中将显示为灰色。

- 点击
Add按钮将新的(已存在的)天气类型添加到您的配置中。 - 点击
Create New将在您的项目中创建一个新的天气类型资源。 - 点击
x移除一个天气类型。 - 点击
Set Active切换到该天气类型。 - 您也可以在此检查器中更改和调整每种天气类型的设置。
天气 API:
csharp
// 通过过渡改变当前活动天气(仅当玩家不在 Enviro 区域中时有效)
Enviro.EnviroManager.instance.Weather.ChangeWeather("Weather Type Name");
// 立即改变当前活动天气,无过渡(仅当玩家不在 Enviro 区域中时有效)
Enviro.EnviroManager.instance.Weather.ChangeWeatherInstant(Enviro.EnviroWeatherType weatherType);
// 获取当前活动的天气类型
Enviro.EnviroWeatherType weatherType = Enviro.EnviroManager.instance.Weather.targetWeatherType;
// 获取当前活动的天气区域
Enviro.EnviroZone zone = Enviro.EnviroManager.instance.Weather.currentZone;
12、音频模块
音频模块控制环境音、天气音效和雷声音效。在此添加您自己的音效。这些音效可以由天气系统控制,以便仅播放选定的音频(例如,雨声或不同的昼夜环境音)。
您还可以在此处为所有三个类别设置主音量。

- 点击
Add按钮添加一个新的音效。请确保设置唯一的名称,以便能够在天气类型中选择它们。 Apply Changes按钮将为所有音效重新创建音频源。
音频 API:
csharp
// 设置每个音效类别的主音量
Enviro.EnviroManager.instance.Audio.Settings.ambientMasterVolume = 1f;
Enviro.EnviroManager.instance.Audio.Settings.weatherMasterVolume = 1f;
Enviro.EnviroManager.instance.Audio.Settings.thunderMasterVolume = 1f;
// 播放一次随机的雷声音效
Enviro.EnviroManager.instance.Audio.PlayRandomThunderSFX();
13、特效模块
特效模块为 Enviro 添加了粒子特效支持。使用预定义的发射滑块控制它们的发射率。如果添加了天气模块,这些将由天气模块控制。

- 点击
Add按钮添加一个新的粒子特效。给它一个唯一的名称,并将您的 Unity 粒子特效预制体分配给它。然后设置Control Type和Maximum Emission值。 - 点击
Apply Changes重新创建粒子特效。
特效 API:
csharp
// 当不使用天气模块时,设置发射率
Enviro.EnviroManager.instance.Effects.Settings.rain1Emission = 0.5f;
Enviro.EnviroManager.instance.Effects.Settings.rain2Emission = 0.5f;
Enviro.EnviroManager.instance.Effects.Settings.snow1Emission = 0.5f;
Enviro.EnviroManager.instance.Effects.Settings.snow2Emission = 0.5f;
Enviro.EnviroManager.instance.Effects.Settings.custom1Emission = 0.5f;
Enviro.EnviroManager.instance.Effects.Settings.custom2Emission = 0.5f;
14、质量模块
质量模块提供了预定义质量预设的功能,这些预设控制着最重要的性能相关设置。使用它可以让您的用户能够更改天空渲染的质量以匹配他们的硬件。

- 点击
Add添加一个已存在的 EnviroQuality 预设。 - 点击
Create New在您的项目中创建一个新的 EnviroQuality 预设。 - 点击
Set Default选择当前应使用的默认质量。
质量 API:
csharp
// 设置新的默认质量
Enviro.EnviroManager.instance.Quality.Settings.defaultQuality = Enviro.EnviroQuality newDefaultQuality;
// 获取所有质量的列表
List<Enviro.EnviroQuality> allQualities = Enviro.EnviroManager.instance.Quality.Settings.Qualities;
15、事件模块
使用此模块让您的游戏逻辑在触发不同事件时执行操作。
您可以在该模块的检查器中分配您自己的函数,或使用 API 来挂钩这些事件。

事件 API:
csharp
EnviroManager.instance.OnHourPassed += () =>
{
Debug.Log("一小时过去了!");
};
EnviroManager.instance.OnDayPassed += () =>
{
Debug.Log("新的一天!");
};
EnviroManager.instance.OnYearPassed += () =>
{
Debug.Log("新的一年!");
};
EnviroManager.instance.OnDayTime += () =>
{
Debug.Log("白天!");
};
EnviroManager.instance.OnNightTime += () =>
{
Debug.Log("夜晚!");
};
EnviroManager.instance.OnSeasonChanged += (EnviroEnvironment.Seasons s) =>
{
Debug.Log("季节变为: " + s.ToString());
};
EnviroManager.instance.OnWeatherChanged += (EnviroWeatherType w) =>
{
Debug.Log("天气变为: " + w.name);
};
EnviroManager.instance.OnZoneWeatherChanged += (EnviroWeatherType w, EnviroZone z) =>
{
Debug.Log("区域: " + z.name + " 的天气变为: " + w.name.ToString());
};
七、组件
Enviro 还附带了一些其他组件,为您提供附加功能。
1、Enviro 天气区域
Enviro Weather Zone 组件可用于区域性的自动天气变化。
您可以通过 (Components -> Enviro 3 -> Weather Zone) 菜单将其添加到游戏对象。

- 设置
Zone scale并将其移动到场景中所需的位置。一旦您的主摄像机进入该区域,天气将平滑过渡到当前活动区域的天气。 - 点击
Add按钮将其他天气类型添加到此区域。同时不要忘记设置Probabillity!如果启用了Auto Change Weather,则每过Weather Intervall游戏时间小时,系统将尝试根据天气类型的Probabillity设置来更改天气。 - 您也可以点击
Change Now按钮手动立即更改天气。
2、特效移除区域
该区域可以高性能地禁用雾效和使用 Enviro Weather Particle 着色器的粒子特效。
您可以通过 (Components -> Enviro 3 -> Effect Removal Zone) 菜单将其添加到游戏对象。

- 设置
Radius和Stretch值以增加/减少区域影响范围。您也可以移动游戏对象以将其放置在需要的区域。 - 降低
Density设置以开始移除雾效和粒子特效。
4、Enviro 反射探针
此反射探针脚本可以根据 Enviro 的时间进程渲染您的反射探针。在内置渲染管线中,它还允许您将体积云渲染到反射探针中。

- 当您在手动放置的探针上使用此组件时,请启用
Standalone Probe。
5、Enviro 体积光
将此组件添加到您的聚光灯和点光源上,使它们能够照亮雾并为其渲染体积光效果。此组件仅在您的 Enviro Manager 中使用了雾效模块并启用了体积光选项时才有效。

- 您可以设置
Intensity来增加/减少效果的亮度,也可以更改Range来增加/减少影响范围。
八、渐变与曲线
Enviro 大量使用了渐变和曲线。这些是基于 solarTime 和 lunarTime(范围从 0 到 1)进行计算的,它们描述了太阳/月亮在天空中的位置。

专栏推荐
完结
好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

