【推荐100个unity插件】unity易于使用模块化设计的天空、体积云和天气系统——Enviro 3

文章目录

一、前言

Enviro 3 - 天空与天气是一个模块化设计的天空、体积云和天气系统。易于使用,众多自定义选项,视觉效果震撼!

功能

  • 动态天空
  • 照明
  • 体量云
  • 雾和体积光照
  • 天气系统
  • 北极光
  • 虚拟现实
  • 动态时间系统,包含日历。
  • 逼真的太阳和月亮位置模拟(纬度/经度)。
  • 高效 2D 云
  • 季节模拟
  • 温度模拟
  • 湿度与雪模拟
  • 粒子效果管理
  • VFX 图形支持
  • 音频管理
  • 程序化闪电风暴
  • 游戏逻辑的事件系统

二、插件下载安装

https://assetstore.unity.com/packages/tools/particles-effects/enviro-3-sky-and-weather-236601#releases

三、快速开始

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 TypeMaximum 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) 菜单将其添加到游戏对象。

  • 设置 RadiusStretch 值以增加/减少区域影响范围。您也可以移动游戏对象以将其放置在需要的区域。
  • 降低 Density 设置以开始移除雾效和粒子特效。

4、Enviro 反射探针

此反射探针脚本可以根据 Enviro 的时间进程渲染您的反射探针。在内置渲染管线中,它还允许您将体积云渲染到反射探针中。

  • 当您在手动放置的探针上使用此组件时,请启用 Standalone Probe

5、Enviro 体积光

将此组件添加到您的聚光灯和点光源上,使它们能够照亮雾并为其渲染体积光效果。此组件仅在您的 Enviro Manager 中使用了雾效模块并启用了体积光选项时才有效。

  • 您可以设置 Intensity 来增加/减少效果的亮度,也可以更改 Range 来增加/减少影响范围。

八、渐变与曲线

Enviro 大量使用了渐变和曲线。这些是基于 solarTimelunarTime(范围从 0 到 1)进行计算的,它们描述了太阳/月亮在天空中的位置。


专栏推荐

地址
【unity游戏开发入门到精通------C#篇】
【unity游戏开发入门到精通------unity通用篇】
【unity游戏开发入门到精通------unity3D篇】
【unity游戏开发入门到精通------unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发------模型篇】
【unity游戏开发------InputSystem】
【unity游戏开发------Animator动画】
【unity游戏开发------UGUI】
【unity游戏开发------联网篇】
【unity游戏开发------优化篇】
【unity游戏开发------shader篇】
【unity游戏开发------编辑器扩展】
【unity游戏开发------热更新】
【unity游戏开发------网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

相关推荐
我是唐青枫4 小时前
C#.NET SqlKata 使用详解:优雅构建动态 SQL 查询
sql·c#·.net
唐青枫6 小时前
C#.NET NCrontab 深入解析:轻量级 Cron 表达式解析器
c#·.net
初九之潜龙勿用7 小时前
UU远程深度测评:聚焦游戏与Windows多屏场景,免费实用的远程控制选择
游戏·远程工作·远程
wanhengidc9 小时前
云手机在网络游戏中的主要功能
运维·服务器·游戏·智能手机
“抚琴”的人13 小时前
C# 取消机制(CancellationTokenSource/CancellationToken)
开发语言·c#·wpf·1024程序员节·取消机制
helloworddm15 小时前
Orleans Grain Directory 系统综合分析文档
c#·1024程序员节
嘀咕博客15 小时前
h5游戏免费下载:小霸王游戏机
游戏·游戏机
dengzhenyue16 小时前
C# 初级编程
开发语言·c#
怣疯knight17 小时前
unity实现2D人物从上面踩踏敌人,敌人减血的简易方法(类似马里奥的攻击手段)
unity·游戏引擎