Unity 之基于URP使用UniStorm Weather System天气系统

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity 之基于URP使用UniStorm Weather System天气系统
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速实现 UniStorm 基于URP的天气系统

为初学者节省宝贵的学习时间,避免困惑!


前言:

  Unity 版本:2021.3.38f1

  UniStorm-Volumetric-Clouds-Sky-v5.3.1.unitypackage

  URP中使用UniStorm URP System时,需要先搭建好URP的环境,这里不在赘述,不清楚的童鞋,可以去网上找一下教程。

我这里做测试时使用的Unity版本是2021.3.38f1UniStorm 插件可以去官网 Asset Store下载。

TechX 教程效果:

在这里插入图片描述


文章目录

  • 一、导入UniStorm-Volumetric-Clouds-Sky-v5.3.1.unitypackage插件
  • 二、安装UniStorm URP Support
  • 三、配置URP管线资源
    • 1、设置UniversalRenderPipelineAsset
    • 2、设置UniversalRenderPipelineAsset_Renderer
    • 3、添加URP Renderer Features
  • 四、UniStorm URP Support 示例场景
  • 五、UniStorm System 示例演示


UniStormVolumetricCloudsSkyv531unitypackage_65">一、导入UniStorm-Volumetric-Clouds-Sky-v5.3.1.unitypackage插件


UniStorm包导入到Unity中,导入之后可以看到UniStorm Weather System文件夹,其中可以看到URP Support文件夹,表示这个插件支持URP

在这里插入图片描述


UniStorm_URP_Support_74">二、安装UniStorm URP Support


找到位于 UniStorm Weather System>URP Support>UniStorm URP Support 下的 UnityPackage,并将其导入到当前项目中(您可以通过在 Unity 中双击 UniStorm URP Support UnityPackage 文件来导入)。

这将更新多个脚本和着色器以与 URP 兼容,添加一些新脚本,并向管道资源添加一些图像效果。

在这里插入图片描述


URP_86">三、配置URP管线资源


打开Project Settings面板,从Graphics选项中找到当前使用的渲染管线。

在这里插入图片描述

1、设置UniversalRenderPipelineAsset


选择当前的渲染管线UniversalRenderPipelineAsset,在Inspector面板上找到属性Depth Texture并勾选。

在这里插入图片描述

2、设置UniversalRenderPipelineAsset_Renderer


选择当前的渲染管线UniversalRenderPipelineAsset,在Inspector面板上找到Renderer List列表并选中UniversalRenderPipelineAsset_Renderer。

如下图所示,设置Rendering下的Rendering Path为Forward,设置Depth Priming Mode 为Forced。

设置Compatibility下的Internediate Texture 为Always,这将使添加的Render Features可见

在这里插入图片描述

URP_Renderer_Features_109">3、添加URP Renderer Features


在完成设置之后你可以转到“Window”>“UniStorm”>“Add URP Renderer Features”。这会自动将添加所需的渲染器功能添加到你的通用渲染管道资产中。

在这里插入图片描述



UniStorm_URP_Support__119">四、UniStorm URP Support 示例场景


你现在可以测试位于 UniStorm Weather System>URP Support>Scene 下的 UniStorm URP Support示例场景。

场景中UniStorm URP System为天气系统管理脚本,在这里可以对天气系统进行各种各样的配置。

在这里插入图片描述


UniStorm_System__130">五、UniStorm System 示例演示


这里以5种天气的切换为例,可以切换晴天、雾天、小雨、中雨和大雨,同时还可以切换时间段,正午、黄昏和傍晚。

在这里插入图片描述

/// <summary>
/// 天气类型
/// </summary>
public enum WeatherType : int
{
    Sun = 1,    //晴天
    Fog = 2,    //雾天
    LightRain = 3,    //小雨
    ModerateRain = 4,    //中雨
    HeavyRain = 5,    //大雨
}

/// <summary>
/// 当前天气的时间段
/// </summary>
public enum WeatherTimeType : int
{
    Noon = 1,    //正午
    Dusk = 2,    //黄昏
    Evening = 3,    //傍晚
}
 
public class WeatherControl : MonoBehaviour
{
    /// <summary>
    /// 根据天气时间和天气类型改变天气
    /// </summary>
    /// <param name="weatherType"></param>
    /// <param name="weatherTimeType"></param>
    public void ChangeWeather(WeatherType weatherType, WeatherTimeType weatherTimeType)
    {
        ChangeWeatherTimeType(weatherTimeType);

        ChangeWeatherType(GetWeather(weatherType),true);
    }

    private void ChangeWeatherType(UniStorm.WeatherType weatherType,bool isInstantly=false)
    {
        if (isInstantly)
        {
            //Change Weather UI Instantly
            UniStormManager.Instance.ChangeWeatherInstantly(weatherType);
        }
        else
        {
            //Change Weather UI With Transition
            UniStormManager.Instance.ChangeWeatherWithTransition(weatherType);
        }           
    }       

    private void ChangeWeatherTimeType(WeatherTimeType dayTime)
    {
        switch (dayTime)
        {
            case WeatherTimeType.Noon:
                UniStormSystem.Instance.m_TimeFloat = 0.5f;
                break;
            case WeatherTimeType.Dusk:
                UniStormSystem.Instance.m_TimeFloat = 0.729f;
                break;
            case WeatherTimeType.Evening:
                UniStormSystem.Instance.m_TimeFloat = 0.8125f;
                break;
        }
    }

    /// <summary>
    /// 获取所有类型的天气
    /// </summary>
    /// <returns></returns>
    private List<UniStorm.WeatherType> GetAllWeatherTypes()
    {
        return UniStormSystem.Instance.AllWeatherTypes;
    }

    /// <summary>
    /// Sun-Mostly Clear    Fog-Foggy   LightRain-Light Rain    ModerateRain Rain    HeavyRain Heavy Rain
    /// </summary>
    /// <param name="weatherType"></param>
    /// <returns></returns>
    private UniStorm.WeatherType GetWeather(WeatherType weatherType)
    {
        string weathName = "";
        switch (weatherType)
        {
            case WeatherType.Sun:
                weathName = "Clear";
                break;
            case WeatherType.Fog:
                weathName = "Foggy";
                break;
            case WeatherType.LightRain:
                weathName = "Light Rain";
                break;
            case WeatherType.ModerateRain:
                weathName = "Rain";
                break;
            case WeatherType.HeavyRain:
                weathName = "Heavy Rain";
                break;
        }

        return GetWeatherByName(weathName);
    }

    /// <summary>
    /// 获取天气的名称
    /// </summary>
    /// <param name="weatherType"></param>
    /// <returns></returns>
    private UniStorm.WeatherType GetWeatherByName(string weatherName)
    {
        List<UniStorm.WeatherType> weatherTypes = GetAllWeatherTypes();
        IEnumerable<UniStorm.WeatherType> vs = weatherTypes.Where((item) => item.WeatherTypeName == weatherName);
        UniStorm.WeatherType weatherType = null;
        if (vs.Count() > 0)
        {
            weatherType = vs.FirstOrDefault();
        }
        return weatherType;
    }
}




TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步


END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

http://www.niftyadmin.cn/n/5536011.html

相关文章

android recyclerview 刷新 数据错乱的问题

前言 android recyclerview 错乱的问题 每次刷新item的背景框都发生偏移或者bug 解决方法 在添加数据之前先清空recyclerView的缓存 亲测有效&#xff01; binding.recycler.getRecycledViewPool().clear(); binding.recycler.setLayoutManager(new LinearLayoutManager(ge…

ReactNative如何实现沉浸式状态栏及渐变色Header【兼容Android和iOS】

沉浸式状态栏 需要用到react-native提供的StatusBar组件 import {StatusBar} from react-native;<StatusBar barStyle{dark-content} backgroundColor{transparent} translucent{true}></StatusBar>如果用到Navigation&#xff0c;需要设置如下属性 navigation.…

论文 | Measuring and Narrowing the Compositionality Gap in Language Models

存在的问题&#xff1a; 关于一个复杂的多跳问题&#xff0c;大语言模型可以正确回答基于该问题分解的多个子问题&#xff0c;但是对于这个问题的最终答案大语言模型可能最终还是给不出来正确的。该论文根据这个现象提出了一个术语&#xff0c;叫“组合性差距”。 解决的方法&…

ansible执行任务时,报错/usr/bin/env node没有文件或目录。

报错如图&#xff1a; 解决&#xff1a;添加软链即可 sudo ln -s /home/app/node-v18.20.3/bin/node /usr/bin/node

c++【入门】两个数之和

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 我们现在要做一个非常简单的题目&#xff0c;实现一个完整的程序。当它运行起来后&#xff0c;我们希望通过键盘输入两个整数&#xff0c;我们先把它们称为 a 和 b。然后把他们的和 a b 作为结果给存到sum&#xff0c;并输出…

【设计模式】设计模式学习线路与总结

文章目录 一. 设计原则与思想二. 设计模式与范式三. 设计模式进阶四. 项目实战 设计模式主要是为了改善代码质量&#xff0c;对代码的重用、解耦以及重构给了最佳实践&#xff0c;如下图是我们在掌握设计模式过程中需要掌握和思考的内容概览。 一. 设计原则与思想 面向对象编…

C# MathNet未完

Vector 在 MathNet.Numerics 中&#xff0c;Vector<T> 是表示向量的类。Vector<T> 可以是列向量或行向量&#xff0c;具体取决于你如何创建它以及如何使用它。以下是一些创建和使用 Vector<T> 的常见方法&#xff1a; 使用 Build.Dense 创建列向量&#xf…

Python/Django 服务器升级脚本

编写 Python/Django 服务器升级脚本可以根据具体需求而异&#xff0c;一般涵盖以下几个主要步骤&#xff1a; 在编写脚本之前&#xff0c;确保以下准备工作已完成&#xff1a; 确定需要升级的内容&#xff0c;例如代码、数据库结构、依赖库等。确保服务器和数据库备份&#x…