【小沐学Unity3d】Unity插件之天气系统UniStorm

news2024/11/23 7:49:37

文章目录

  • 1、简介
    • 1.1 描述
    • 1.2 兼容性
    • 1.3 价格
    • 1.4 特点
    • 1.5 示例
  • 3、安装
    • 3.1 新建Unity项目
    • 3.2 安装插件UniStorm
    • 3.3 介绍UniStorm工具栏
    • 3.4 入门使用
  • 4、脚本开发
    • 4.1 接口简介
      • 4.1.1 天气
      • 4.1.2 时间
      • 4.1.3 程度
      • 4.1.4 季节
      • 4.1.5 系统
      • 4.1.6 其他
    • 4.2 接口测试
      • 4.2.1 测试1
  • 结语

1、简介

UniStorm - 体积云、天空、模块化天气和云阴影

1.1 描述

UniStorm 是 AAA 动态天空、天气、云阴影、大气雾和程序性体积云的终极解决方案。UniStorm为您提供了调整天空中每个组件的选项。

UniStorm 是一款非常强大的动态昼夜天气系统,能够以极快的帧速率创建 AAA 级动态生成的天气、照明和天空。UniStorm具有300多个可定制的组件,允许用户创建任何可以想象的环境。

在这里插入图片描述

1.2 兼容性

Unity可编程渲染管线(SRP)是让您能够通过C#脚本控制渲染的一个功能。SRP是支撑通用渲染管线(URP)和高清渲染管线(HDRP)的底层技术。

在这里插入图片描述

在这里插入图片描述

1.3 价格

在这里插入图片描述

1.4 特点

  • AAA 体积云
    UniStorm 4.0 带来一个完全重新设计的云系统,能够创建 AAA 的程序化、自我投影、PBR、体积云,其帧率优异且仅使用一个绘制调用!UniStorm 的云使用的是最新的渲染以及性能技术,例如时间性重投和 LOD。UniStorm 的云包含 4 个质量设置以及一个体积和 2D 选项,并都可以在运行时或在 UniStorm 编辑器中进行更改。这使其能够支持众多设备和电脑。简单易用的 API 让添加游戏内的质量控制变得简单无阻。其中还包含一个演示操作的示例。

在这里插入图片描述

  • 内置 Photon PUN 2 网络的支持
    UniStorm 包含了你需要的一切来让 UniStorm 与 PUN 2 一起使用,让 PUN 2 同步 UniStorm 多玩家的天气、时间和日期 。内含了一个示例场景。

  • 大气雾
    大气雾考虑到了阳光和月光方向以及颜色对场景、UniStorm 的云和天空盒子的应用。

  • 云阴影
    高效的实时屏幕空间云阴影,来将当前的云层和云型匹配,以添加逼真的视觉效果。

  • 具有精确星座排列的 4k 恒星
    UniStorm 的夜空包含了 4k 恒星以及精确的星座排列。编辑器内有控制星座紧密度的选项。

  • 程序化极光
    UniStorm 让用户按天气类型对极光自定义调整强度、颜色、状况等等!

  • 性能
    UniStorm 的体积云的特色是时间性重投和 LOD,都具有 4 个质量设置(低、中、高和超级),经过估算其效率远比以前的设置更高。这使 UniStorm 能够在几乎所有计算机上顺畅运行。多亏了 UniStorm 着色器,摄像头远裁平面距离没有最大限制,因此你可以使用任何距离。

  • 内置轻量级选项
    何必为必要的功能多付钱呢?UniStorm 拥有一个内置轻量级 2D 云选项,对低端的移动设备或电脑特别适合。用户可以从编辑器中选择移动端选项,它将自动应用所有优化设置,而无需覆盖颜色等自定义设置。

  • 动态模块化天气
    模块化天气能让用户创建自定义天气类型。沙尘暴、极光、冰雹风暴、雷暴等都可以实现。对于多少天气类型 UniStorm 是没有任何限制的,而且最好的是它能让用户对每个天气类型自定义特效、设置和音效。UniStorm 带来 31 种天气类型!其中包括:极光、吹起的叶子、吹起的雪、吹起的草、萤火虫、晴朗、大致晴朗、部分多云、大致多云、多云、阴天、多雾、细雨、小雨、雨、大雨、冰雹、雷暴、小雪、雪、大雪、雷雪、火雨、尘暴以及更多!
    在这里插入图片描述

  • 云配置
    UniStorm 的每个天气类型都具有可自定义的云配置。这可以使你自定义云的外观来为每个天气类型提供大量的变化。使用 UniStorm 的云配置,用户必定会找到适合他们的云类型。晴朗、蓬松、松软、均衡、以及风格化云配置都包含在内。然而你随时可以创建属于你自己的!

  • VR 和移动端可用
    UniStorm 的多合一功能也支持移动和 VR(目前仅是多通道)。里面甚至还有一个易用的选项可以自动将所有优化设置应用于指定平台,同时保持用户的自定义设置!

  • 高级天气生成
    UniStorm 的天气是基于 UniStorm 编辑器中设置的降水率生成的。易用的线图可让用户对每个月设置天气类型的降水率, 然后 UniStorm 会生成对应的天气。夏季的降水量可以比冬季的少,反之亦然。UniStorm 有选项来以随机的起始时间和每小时天气来生成日常天气,这些都基于游戏内计时以及降水率为基础。如果用户不想生成天气,也可以选择静态天气。
    在这里插入图片描述

  • 全局天气着色器和渲染
    UniStorm 的全局着色器允许物体在下雨和下雪天气类型中接受雨雪渲染。雨渲染能使表面变得更有光泽,仅用于小于 90 度的表面。大多数表面的内部都会保持干燥,例如建筑物和屋顶的内部。雪的功能相同,但带有积雪渲染效果。雪的纹理、雪泵纹理和雪的高光级别都可以自定义调整。当天气不是下雨或下雪时, UniStorm 会淡化天气渲染。

  • 天气和天气过渡
    UniStorm 允许用户创建无限数目的天气类型。每次天气变换时, UniStorm 都会根据全局过渡速度进行无缝的转换。每种天气类型都可以利用其云层、云风格、云高度、粒子特效、阳光强度、月光强度、云阴影强度、音效、风量以及其他各种设置进行自定义,从而实现了真正独特且高自定义性的天气。

  • 程序化闪电和雷击
    UniStorm 的程序化闪电系统允许对象能被雷击中。用户可以规定闪电击中地面和物体的概率。当雷击中时,用户可以自定义其产生的特效。利用适合的标签甚至是火特效都可以做到。

  • 白天/夜晚循环和颜色控制
    UniStorm 允许你调整每天不同时候的环境和天空的所有颜色,例如日、月颜色、环境光色、阴影和云阴影强度、雾色、天空颜色、环境反射强度等等!每种颜色都具有自己的个体颜色选项来供降水天气类型使用。
    在这里插入图片描述

  • 时间、日期和内置日历
    UniStorm 具有内置时间和日期系统,可帮助你追踪玩家的游戏时间。UniStorm 的日历是精确的,甚至可以使用当前的时间和日期。

  • 可自定义的月相系统
    UniStorm 的可自定义月相系统允许用户构建属于他们自己的月相。UniStorm 的月相可用数量没有上限的。用户可以直接在 UniStorm 编辑器上预览他们的月相以及设置起始月相。UniStorm 自动分配所有所需纹理,并每天更新月相。每一个月相也具有自己的月光强度。这可以根据用户需要使新月和镰月月相的亮度低于全月的亮度。

  • 天气类型条件
    可选的天气类型条件可以让 UniStorm 的天气生成器根据达到的指定条件来生成天气类型。这些包括的条件例如有:特定季节和温度以及仅在自定义事件或程序化调用某种特定天气类型的能力。

  • UniStorm 配置文件
    从一个 UniStorm 配置文件中导入和导出你的 UniStorm 设置。这可以让用户保存他们的设置并将他们在其他 UniStorm 系统之间转移,而无需手动应用颜色和设置。

  • 每日不同时候的声音和音乐
    UniStorm 允许用户自定义每日不同时候播放的音效和/或音乐。每个音效和歌曲之间的延迟时间可被调整。其可用的数量没有上限。

  • 声音管理器
    UniStorm 的声音管理员使用 Unity 音频混合器来处理所有 UniStorm 创建出来的音效。这使你对全局、环境、天气和音乐音量具有精确的控制,并可用于用户 UI 或可在 UniStorm 编辑器中控制。

  • 内置事件
    UniStorm 的内置事件可以在游戏内的每小时、每天、每月、每年甚至在天气转变过程中被调用,让用户轻松创建游戏功能。
    在这里插入图片描述

  • 包括示例
    UniStorm 包含 6 个示例场景来演示 UniStorm 可以做到的不同功能。另外还包含一个保存示例系统,来让用户可以手动或自动保存他们的游戏时间、日期、天气、温度以及更多。这些数据之后能被加载,用户可以直接跟进上次的进度。

  • 编辑器
    UniStorm 的编辑器设计受到其众多用户反馈的影响,因此很直观、强大并提供一个低学习曲线。UniStorm 的编辑器具自我描述性,因此每个组件都在编辑器的工具提示中有解释。

  • API 和文档
    UniStorm 的 API 可以助力其他游戏机制和功能,例如访问其温度、时间、日期、当前天气、预报天气、季节以及更多。内含教程视频和外部文档来帮助用户充分利用 UniStorm。

  • 支持 CTS 天气管理器
    UniStorm 包含一个外部系统来过渡到 CTS 的天气渲染器,让你的地形在下雪或下雨时具有积雪和湿度的渲染。(不包括 CTS)

1.5 示例

https://unistorm-weather-system.fandom.com/wiki/Documentation

  • 基本示例 - UniStorm 的基本标准演示。
  • 动态雪示例 - 提供在非地形对象上动态构建雪的演示。
  • 植物生长示例 - 根据多种不同因素提供动态生长植物的演示。
  • 保存并加载示例 - 一个演示,提供了一个有效的保存和加载系统,允许您保存 UniStorm 的时间、天气、日期和玩家的位置,然后在您保存的位置加载它。
  • 生成示例 - 提供允许在运行时生成角色的示例的演示。然后,所有效果和组件在运行时应用于 UniStorm。
  • 生命体征生存示例 - 提供生存示例的演示,其中玩家受到 UniStorm 因素/变量的影响,例如温度(温暖)、天气(干燥)和时间(饥饿)。
  • 天气预报器示例 - 演示如何使用天气预报器系统为 UniStorm 生成每周预报。
  • 高级 UI 示例 - 演示引用 UniStorm 以显示当前时间、日期、温度、天气、季节、月相等的高级 UI。
  • 自动保存示例 - 演示如何使用自动保存系统来保存玩家的位置和 UniStorm 变量。然后可以随时加载它以从玩家离开的地方继续。
  • 程序闪电示例 - 演示 UniStorm 2.4 的新闪电系统,该系统具有程序闪电和改进的闪电生成。
  • 事件示例 1(生成每日对象)- 演示 UniStorm 2.4 的新事件系统在一天中的特定时间生成对象。
  • 事件示例 2(随机每日天气) - 演示 UniStorm 2.4 的新事件系统在一天中的特定时间生成对象。
  • 事件示例 3(在夜间启用和禁用灯光)- 演示 UniStorm 2.4 的新事件系统在一天中的特定时间生成对象。

3、安装

3.1 新建Unity项目

运行Unity Hub,切换到项目分页,打开界面如下:
在这里插入图片描述
选择核心模板,选择3D,如下:
在这里插入图片描述
新项目加载资源中。
在这里插入图片描述
新项目创建成功,进入后界面如下:
在这里插入图片描述

3.2 安装插件UniStorm

将插件下载后直接导入即可。

将UniStorm代码文件夹中的Assets复制到当前新建项目的Assets中即可。然后Unity自动加载复制进去的文件。
当然这个过程中可能会报错如下:
在这里插入图片描述
鼠标双击上面报错的地方,弹出VS编辑器,打开报错的代码文件,如下:
在这里插入图片描述
将上面文件中所有的“MinAttribute”修改为“UnityEngine.PostProcessing.MinAttribute”,如下:

using UnityEngine;
using UnityEngine.PostProcessing;
 
namespace UnityEditor.PostProcessing
{
    [CustomPropertyDrawer(typeof(UnityEngine.PostProcessing.MinAttribute))]
    sealed class MinDrawer : PropertyDrawer
    {
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            UnityEngine.PostProcessing.MinAttribute attribute = (UnityEngine.PostProcessing.MinAttribute)base.attribute;
 
            if (property.propertyType == SerializedPropertyType.Integer)
            {
                int v = EditorGUI.IntField(position, label, property.intValue);
                property.intValue = (int)Mathf.Max(v, attribute.min);
            }
            else if (property.propertyType == SerializedPropertyType.Float)
            {
                float v = EditorGUI.FloatField(position, label, property.floatValue);
                property.floatValue = Mathf.Max(v, attribute.min);
            }
            else
            {
                EditorGUI.LabelField(position, label.text, "Use Min with float or int.");
            }
        }
    }
}

保存文件后,Unity自动编译加载文件。错误解决!

然后选择Unity菜单项 Window—>UniStorm—>Create Weather System(创建一个UniStorm System组件 ) 即可,注意创建的组件不要改名,否则内置脚本会找不到。
在这里插入图片描述
在Hierarchy界面中会自动创建一个UniStorm System的对象节点。
在这里插入图片描述

(1)在Asset Store中搜索并下载Unistorm插件,或者从其他渠道获取Unistorm的.unitypackage文件。
(2)在Unity编辑器中,选择Assets -> Import Package -> Custom Package…,打开文件选择对话框。
(3)选择您下载的Unistorm插件的.unitypackage文件,点击Open按钮。
(4)在导入资源包的窗口中,勾选您需要导入的资源,然后点击Import按钮。
(5)或者您需要在Unity编辑器中,将UniStorm_Source文件夹拖拽到项目视图中的Assets文件夹下。
(6)等待Unity完成导入后,在项目视图中找到UniStorm -> Prefabs -> UniStorm System,并将其拖拽到场景视图或者层次视图中。
(7)选中场景视图或者层次视图中的UniStorm System对象,在检查器视图中可以看到它的组件和设置项。
(8)在检查器视图中,找到Player & Camera设置项,并选择您的玩家对象和摄像机对象。这两个对象是必要的,因为Unistorm会根据它们的位置来生成天气效果。
(9)您可以在检查器视图中调整其他设置项来定制您想要的天气系统。例如,您可以在Weather Options设置项下选择不同的天气类型、频率、音效等。您也可以在Sky Options设置项下调整天空、太阳、月亮、星星等组件的外观和行为。
(10)您可以点击播放按钮来预览和测试您的天气系统。如果您对效果满意,就可以保存并应用到您的项目中了。如果不满意,就可以继续调整设置项直到达到理想效果。

3.3 介绍UniStorm工具栏

  • Player & Camera

该设置允许你选择Unistorm的玩家和播放器对象,并且选项会根据你的选择有所调整,该天气系统必须选择Player和Camera对象,它将根据Player和Camera对象的位置确定生成天气的范围

Player和Camera为必要物体,如果该插件无法找到它们,将会在运行的时候报错,也无法看到天气效果

Get Player at Runtime: 是否可以在运行期间获得你的Player,可以通过名字或则标签。
Use Runtime Delay: 是否会一直等待进行初始化,直到Player被创建并找到。
Use UniStorm Menu: 是否使用UniStorm菜单,该菜单可在运行中通过ESC键触发,功能是选择不同的天气类型。
在这里插入图片描述

  • Time Management

时间管理允许你控制各种与时间有关的设置,如开始时间,时间流等。

在这里插入图片描述

  • Weather Management

天气管理允许你调整与天气有关的各种设置,比如天气类型、云雾颜色和闪电设置等等。
Weather Generation: 是否产生天气,如果Disable的话,UniStorm将一直保持一种天气类型,除非使用代码控制其改变。
在这里插入图片描述

  • Celestial Setting

该设置用于控制太阳、月亮、星星和大气的颜色。
在这里插入图片描述

3.4 入门使用

创建一个空对象:Player。

在这里插入图片描述
并将它的Position修改为(10,10,10)。
在这里插入图片描述

场景相机MainCamera设置为(0,0,0) 并将其分别赋值给PlayerTransform和PlayerCamera字段。
在这里插入图片描述
点击Unity的Play最上面的三角形的播放按钮:
在这里插入图片描述

运行按下Esc 在菜单中选择多云天气进行切换你可以看到,天气变换。
在这里插入图片描述
从下拉框选择了一种天气之后,鼠标点击下面的按钮“Change Weather”,之后需要等待一小会,天气才会过渡到新的天气效果来。

/*      插件天气对照表
0   Clear				 		//清除 万里无云        
1   Mostly Clear		 		//晴时多云              
2   Mostly Cloudy	    		//大部多云              
3   Partly Cloudy				//局部多云;少云         
4   Cloudy						//阴天的		
5   Lightning Bugs			    //萤火虫
6   Blowing Pollen			    //吹花粉
7   Blowing Leaves			    //吹树叶
8   Blowing Pine Needles 	    //吹松针
9   Blowing Snow				//高吹雪,飞雪
10  Foggy						//有雾的
11  Overcast					//阴天的
12  Hail						//下冰雹
13  Heavy Rain					//大暴雨
14  Rain						//雨
15  Light Rain					//小雨
16  Drizzle					    //下毛毛雨
17  Heavy Snow					//大雪
18  Snow						//雪
19  Light Snow					//小雪
20  Thunderstorm				//雷雨
21  Thunder Snow				//雷阵雨
22  Dust Storm					//尘暴
23  Fire Rain					//火雨
24  Fire Storm					//大火
 */

4、脚本开发

UniStorm提供了大量有用的API,使自定义和更改UniStorm变得容易。联合风暴的
API 可从 2 个不同的脚本访问。访问时请务必使用正确的实例接口。

4.1 接口简介

4.1.1 天气

//Changes UniStorm's weather, regardless of conditions, with the transition speed to the weather type parameter.
UniStormManager.Instance.ChangeWeatherWithTransition(WeatherType weatherType);

//Changes UniStorm's weather instantly, regardless of conditions, to the weather type parameter.
UniStormManager.Instance.ChangeWeatherInstantly(WeatherType weatherType);

//Generates a random weather type, regardless of conditions, from UniStorm's All Weather Type list
UniStormManager.Instance.RandomWeather();

//Get the name of the current weather type string CurrentWeatherTypeName =
UniStormSystem.Instance.CurrentWeatherType.WeatherTypeName;

//Gets the forecasted weather type's name
string WeatherForecastName = UniStormManager.Instance.GetWeatherForecastName();

//Gets the hour that the forecasted weather will change
string WeatherForecastName = UniStormManager.Instance.GetWeatherForecastHour();

//Disables or enables all UniStorm particle effects depending on the ActiveState bool, , but does not affect their emission amount.
UniStormManager.Instance.ChangeWeatherEffectsState(bool ActiveState);

//Disables or enables all UniStorm weather sounds depending on the ActiveState bool, but does not affect their current volume.
UniStormManager.Instance.ChangeWeatherSoundsState(bool ActiveState);

//Get the current UniStorm temperature
int CurrentTemperature = UniStormSystem.Instance.Temperature;

4.1.2 时间

//Get the current UniStorm Minute
int CurrentMinute = UniStormSystem.Instance.Minute;

//Get the current UniStorm Hour
int CurrentHour = UniStormSystem.Instance.Hour;

//Sets UniStorm's Date
UniStormManager.Instance.SetDate(int Year, int Month, int Day);

//Sets UniStorm's Time
UniStormManager.Instance.SetTime (int Hour, int Minute);

//Get the current time of day state
UniStormSystem.CurrentTimeOfDayEnum CurrentTimeOfDayState = UniStormSystem.Instance.CurrentTimeOfDay;

//Sets the length, in minutes, of UniStorm's days
UniStormManager.Instance.SetDayLength(int MinuteLength);

//Sets the length, in minutes, of UniStorm's nights
UniStormManager.Instance.SetNightLength(int MinuteLength);

//Gets the current UniStorm day of the week
System.DayOfWeek CurrentDayOfWeek = UniStormManager.Instance.GetDate().DayOfWeek;

//Gets the current UniStorm date
System.DayOfWeek CurrentDayOfWeek = UniStormManager.Instance.GetDate().DayOfWeek;

4.1.3 程度

//Set UniStorm's Music volume using a value from 0 (Fully muted) to 1 (Full volume).
UniStormManager.Instance.SetMusicVolume(float Volume);

//Set UniStorm's Ambience volume using a value from 0 (Fully muted) to 1 (Full volume).
UniStormManager.Instance.SetAmbienceVolume(float Volume);

//Set UniStorm's Weather volume using a value from 0 (Fully muted) to 1 (Full volume).
UniStormManager.Instance.SetWeatherVolume(float Volume);

4.1.4 季节

//Get the current season
UniStormSystem.CurrentSeasonEnum currentSeason = UniStormSystem.Instance.CurrentSeason;

4.1.5 系统

//Change the player transform and player camera to UniStorm, if they need to be changed or updated.
UniStormManager.Instance.ChangePlayerComponents(Transform PlayerTransform, Camera CameraSource);

4.1.6 其他

//Changes UniStorm's moon phase color. The updated color will be applied at noon when UniStorm's moon is updated.
UniStormManager.Instance.ChangeMoonPhaseColor(Color MoonPhaseColor)

4.2 接口测试

4.2.1 测试1

(1)创建UniStorm System对象。
在这里插入图片描述

(2)创建空对象:Player
在这里插入图片描述
(3)鼠标点击UniStorm System对象,右侧属性区域配置UniStorm System对象。
在这里插入图片描述
(4)创建一个Button对象。

在这里插入图片描述
(5)修改Button对象的文本。
在这里插入图片描述

(6)创建一个Script对象。
在这里插入图片描述

  • Weather_Button.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Weather_Button : MonoBehaviour
{
    void Start()
    {
		//TODO
    }
    
    void Update()
    {
		//TODO
    }
    
    public void changeWeather()
    {
        UniStormSystem.Instance.ChangeWeather(UniStormSystem.Instance.AllWeatherTypes[18]);
    }
}

(7)将上面这个Script对象拖拽到Hierarchy树中的Button对象上。
在这里插入图片描述
(8)点击On Click() 的+按钮。绑定Weather_Button 脚本中的函数接口。
将Button对象拖拽到第2行的第一个文本框里面。接着从后面的下拉框选择脚本里的函数。
在这里插入图片描述
(9)点击Play播放按钮,如下。
在这里插入图片描述
点击按钮之后,慢慢的开始下雪了。冬天来了,春天还会远吗?
(10)再添加一个按钮,控制时间变化。
在这里插入图片描述
它对应的脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;

public class Weather_Time : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        //TODO
    }

    // Update is called once per frame
    void Update()
    {
        //TODO
    }

    private string GetCurrentTime()
    {
        DateTime dateTime = DateTime.Now;
        string strNowTime = string.Format("{0:D}{1:D}{2:D}{3:D}{4:D}{5:D}", dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second);

        print(strNowTime);
        return strNowTime;
    }

    public void changeTime()
    {
        DateTime dateTime = DateTime.Now;
        UniStormManager.Instance.SetTime(dateTime.Hour, dateTime.Minute);
    }
}

(11)再添加一个文本框,显示时间变化。
在这里插入图片描述
它对应的脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class Text_Time : MonoBehaviour
{
    public TextMeshProUGUI TxtCurrentTime;

    // Start is called before the first frame update
    void Start()
    {
        TxtCurrentTime = transform.GetComponent<TextMeshProUGUI>();
        // TxtCurrentTime = GetComponent<TextMeshPro>();
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
        {
            //TODO
        }

        //获取系统当前时间
        System.DateTime NowTime = System.DateTime.Now.ToLocalTime();
        TxtCurrentTime.text = NowTime.ToString("HH:mm:ss");
    }
}

(12)点击Play播放按钮,如下。
在这里插入图片描述
点击第2个按钮,如下:
在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教你如何使用Nodejs搭建HTTP web服务器并发布上线公网

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 转载自内网穿透工具的文章&#xff1a;使用Nodejs搭建HTTP服务&#xff0c;并实现公网远程访问「内网穿透」 前言 Node.js…

60岁的机器视觉工程师,你还在敲代码?不想做机器视觉工程师,还可以做什么?机器视觉工程师职业生命线有多长​?

如果按程序员参加工作时间为22岁计算,平均退役年龄为35岁计算的话,程序员的职业寿命大概为14年。为什么程序员的职业生命线如此短暂呢?大致有以下几点—— 1、编程技术层出不穷,迭代速度非常快,这时候就需要我们不断的学习,不断地保持学习能力,当随着年龄的增长我们的学…

【数据结构】链表:带头双向循环链表的增删查改

本篇要分享的内容是带头双向链表&#xff0c;以下为本片目录 目录 一、链表的所有结构 二、带头双向链表 2.1尾部插入 2.2哨兵位的初始化 2.3头部插入 2.4 打印链表 2.5尾部删除 2.6头部删除 2.7查找结点 2.8任意位置插入 2.9任意位置删除 在刚开始接触链表的时候&…

86. print输出函数知识拓展(有练习题)

86. print输出函数知识拓展&#xff08;有练习题&#xff09; 文章目录 86. print输出函数知识拓展&#xff08;有练习题&#xff09;1. print函数语法2. 横着输出数字序列3. 竖着输出数字序列4. 循环输出5. 总结 1. print函数语法 print[prɪnt]&#xff1a;打印&#xff0c;…

少儿编程scratch -- 基础篇

1.开篇 花费40分钟 首先&#xff0c;我们学的是scratch(划痕&#xff09;&#xff0c;Scratch 是麻省理工学院的“终身幼儿园团队”在 2007 年 [5] 发布的一种图形化编程工具&#xff0c;主要面对全球青少年开放&#xff0c;是图形化编程工具当中最广为人知的一种&…

ShardingSphere-JDBC整合SpringBoot JPA读写分离失败

问题 最近在整合ShardingSphere JDBC和Spring Boot的时候遇到一个问题,当ORM框架使用JPA时,读写分离会失效,查询仍然走主库并不会走从库!同样的配置使用Mybatis就没有任何问题。 在查阅各种资料后,初步确定未JPA事务问题 ShardingSphere负载均衡算法 我当前使用的版本是…

FIDO认证 无密码的愿景

目录 1、简介 2、关于FIDO联盟 3、FIDO如何工作 3.1 FIDO 注册 3.2 FIDO登录 4、FIDO2 4.1 W3C WebAuthn 4.2 CTAP2 4.3 CTAP1 4.4 FIDO UAF 4.5 FIDO U2F 5、FIDO身份验证的优势 5.1 安全 5.2 便利性 5.3 隐私政策 5.4 可扩展性 1、简介 FIDO&#xff08;在线…

Python 爬虫(一):爬虫伪装

1 简介 对于一些有一定规模或盈利性质比较强的网站&#xff0c;几乎都会做一些防爬措施&#xff0c;防爬措施一般来说有两种&#xff1a;一种是做身份验证&#xff0c;直接把虫子挡在了门口&#xff0c;另一种是在网站设置各种反爬机制&#xff0c;让虫子知难而返。 2 伪装策…

【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2 第二章——安装Atlas 200I DK A2跑通第一个案例

准备相关软件 包括一台PC机&#xff08;空间大于10g)&#xff0c;读卡器&#xff0c;32gsd卡&#xff0c;一根网线。 具体步骤&#xff1a; 开始烧录开发板镜像&#xff1a;将sd卡插入读卡器&#xff0c;将读卡器插入PC机的USB接口&#xff0c;根据相关链接在PC机下载制卡工具…

混合云到底是什么?

大型企业不能再仅仅拥有本地系统就可以逃脱&#xff1b;因此&#xff0c;将一些数字化运营迁移到云端成为了必要。 第一步涉及选择是使用公共云还是私有云&#xff0c;或者两者都使用。使用两者是混合云。 但混合云到底是什么&#xff1f;在回答之前&#xff0c;让我们看看这…

图生图—AI图片生成Stable Diffusion参数及使用方式详细介绍

本文为博主原创文章&#xff0c;未经博主允许不得转载。 本文为专栏《Python从零开始进行AIGC大模型训练与推理》系列文章&#xff0c;地址为“https://blog.csdn.net/suiyingy/article/details/130169592”。 Stable Diffusion webui的详细安装步骤以及文生图&#xff08;txt2…

【Linux】Linux入门学习之常用命令四

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

Jenkins教程-Docker安装Jenkins,并构建任务等

本文主要介绍如何在docker中安装Jenkins&#xff0c;启动容器后&#xff0c;如何使用Jenkins构建自己的项目&#xff0c;创建任务等 文章目录 前言Docker安装Jenkins访问Jenkins并配置Jenkins构建项目创建任务源码管理构建触发器BuildPost Steps 设置手工触发构建 前言 参考链…

Redis集群安全加固

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130692909 一、为Redis启用密码验证 默认情况下&#xff0c;Redis不执行任何密码身份验证。能够通过IP端口连接Redis的客户端均可以直接访问Redis中的数据。在启动Redis服务时&#xff0c;通过设置req…

玩转自动化操作神器n8n之(1)n8n的简介与安装

文章目录 1. 简介 2. 安装2.1. 使用npx进行安装2.2. 使用docker进行安装 2.3. 设置端口&#xff08;可选&#xff09; 3. 登录4. 搜索工作流 1. 简介 n8n是一款强大的工作流程自动化工具&#xff0c;可以自定义想要使用的功能和应用程序。n8n基于节点能够将任何工具连接在一起…

使用插件快速生成代码

使用插件快速生成代码 咋们常说&#xff0c;授人以鱼不如授人以渔&#xff0c;在这里给大家提供一些技巧性的东西&#xff0c;方便一些新手同学可以快速上手&#xff0c;同时&#xff0c;也提高我们的开发兴趣与开发热情&#xff01; 主要讲什么呢&#xff0c;我们来学一学如何…

低代码信创开发核心技术(二):手撕灵活好用的Vue拖拉拽布局系统

前言 随着信息化时代的到来&#xff0c;软件已经成为企业和个人不可或缺的工具。然而&#xff0c;许多人在开发软件时遇到了各种问题&#xff0c;比如开发周期长、技术门槛高、成本高昂等等。为了解决这些问题&#xff0c;低代码平台应运而生。低代码平台是一种快速开发工具&a…

Golang每日一练(leetDay0067) 第十行、打家劫舍I

目录 195. 第十行 Tenth Line &#x1f31f; 198. 打家劫舍 I House Robber &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 195. 第十行 Tenth Line 给定一…

PySide6/PyQT多线程之 异常情况和优先级指南

前言 在PySide6/PyQT 中使用多线程时&#xff0c;线程的优先级和异常情况处理同样是重要的概念。 本文纯理论知识&#xff0c;无实操。换句话说&#xff0c;就是水文~~ 尽管在一般情况下我们不需要过多关注线程的优先级&#xff0c;但了解它的概念对于特定场景下的多线程编程仍…

Java每日一练(20230516) 最小栈、组合总和II、相同的树

目录 1. 最小栈 &#x1f31f; 2. 组合总和 II &#x1f31f;&#x1f31f; 3. 相同的树 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 最小栈 设计一个支持 push…