IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> unity使用UniStorm插件根据当前城市动态修改天气效果 -> 正文阅读

[游戏开发]unity使用UniStorm插件根据当前城市动态修改天气效果

一、效果图

?

二、Unity接入天气

?Unity接入心知天气? ?https://blog.csdn.net/qq_42345116/article/details/121932488

三、UniStorm天气插件使用

1.插件下载

链接:https://pan.baidu.com/s/1QTbidZcgKEqnSsP3_mG5wA?
提取码:syq1

下载完直接导入Unity就好

2.下面的连接,可以简单了解面板的各参数使用

https://www.cnblogs.com/forever-Ys/p/13492008.html

https://blog.csdn.net/qq_55117297/article/details/121355376

不了解也没关系,下面简单教大家如何实现上面的效果

四、效果实现?

1.创建一个UniStorm System

2.修改UniStorm System 属性

很多小伙伴可以看出网上其他案例或者插件Demo中这个PlayerTransform选项可以是其他物体。

这里解释一下为什么我要将PlayerTransform和PlayerCamera的值都设置成场景的Main Camera相机。

首先创建一个空物体改名为Player位置设置为100,100,100? 场景相机MainCamera设置为0,0,0 并将其分别赋值给PlayerTransform和PlayerCamera字段?

Player对象

?

Main Camera对象

?将这两个值将其分别赋值给PlayerTransform和PlayerCamera字段?

?运行按下Esc 在菜单中选择Rain天气进行切换你可以看到,天气变了,声音也有,为什么下雨特效消失了呢?

操作:?按下Esc 在菜单中选择Rain,单击Change Weather按钮(注意:我这里示范用了一个空场景,如果你按下Esc没有出现菜单,那是因为第二步修改UniStorm System 属性时 把设置成Disabled,关掉了导致的)

效果:

?天气效果出来了,但是下雨特效没出来,为啥呢?

导致这个的原因就是我们的Player组件和相机不在同一个位置造成的,插件生成的天气其实是一个有范围的半圆,中心点位置就是Player的位置,特效的位置也是在Player下,当Player位置与相机位置距离很远时特效就会消失,(上面天气效果没有消失,是因为半圆覆盖的范围很大,相机位置并没有“逃离”这个半圆范围)。

?3.UniStorm System自带的天气 对照表

/*      插件天气对照表
    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					//(原子爆炸等引起的)风暴性大火
 */

调用?UniStormSystem.Instance.AllWeatherTypes[下标] (天气List)可以获取对应天气

然后使用?UniStormManager.Instance.ChangeWeatherInstantly(WeatherType) 切换天气

public void SetWeather() 
{

   WeatherType weather = UniStormSystem.Instance.AllWeatherTypes[0]; 
   Debug.Log(weather.WeatherTypeName); //打印天气的名称

   //两种切换效果
   //UniStormManager.Instance.ChangeWeatherWithTransition(weather); //过渡切换 
   UniStormManager.Instance.ChangeWeatherInstantly(weather); //直接切换
}

4.现当地天气和插件的天气切换都搞定了,现在我们要根据当地天气配置对应的插件天气了,怎么做呢?

新建一个WeatherData.cs数据类,这里存放当地天气和对应的插件天气下标

using System;

[Serializable]
public class WeatherData
{
    public string weatherName; //当地天气 
    public int uniStormWeatherIndex; //插件天气下标
}

我们创建WeatherDataConfig继承ScriptableObject(继承这个的子类,可以当成基础数据使用)

using System.Collections.Generic;
using UnityEngine;

//这个表示 我们右键文件夹 Create/DataConfig/WeatherDataConfig 可以生成一个文件为WeatherDataConfig数据文件,我们的数据配置就是在这个文件下
[CreateAssetMenu(menuName = "DataConfig/WeatherDataConfig", fileName = "WeatherDataConfig")]
public class WeatherDataConfig : ScriptableObject
{
    public List<WeatherData> weatherData;
}

这两个脚本创建完后,右键创建一个WeatherDataConfig数据文件,如下图

?

数据配置?

根据心知天气返回的所有天气和UniStorm System自带的天气 对照表进行配置

5.数据配置完毕 ,我们写一个?切换天气的脚本

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

//天气切换
public class ChangeWeather : MonoBehaviour
{

    [SerializeField] WeatherDataConfig weatherData; //天气数据 我们配置的文件拖入即可


    //单例
    static ChangeWeather instance;
    public static ChangeWeather GetInstacne() 
    {
        return instance;
    }

    void Awake() 
    {
        instance = this;
    }

    void Start()
    {
    }

    public void SetWeather(string weatherName) 
    {
        //根据传过来的天气名称找到对应的插件天气下标
        int index = 0;
        for (int i = 0; i < weatherData.weatherData.Count; i++)
        {
            //名称相同 获取天气下标
            if (weatherData.weatherData[i].weatherName.Equals(weatherName))
            {
                index = weatherData.weatherData[i].uniStormWeatherIndex;
                break;
            }
        }
        
        //根据插件天气下标,获取天气
        WeatherType weather = UniStormSystem.Instance.AllWeatherTypes[index];
        Debug.Log(weather.WeatherTypeName);

        //UniStormManager.Instance.ChangeWeatherWithTransition(weather); //过度切换
        UniStormManager.Instance.ChangeWeatherInstantly(weather); //直接切换
    }
}

6.回到第二步接入天气所创建的脚本,CityWeather.cs

?7.新建空物体CityWeather,布局如下

ok,效果完成。?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:15:39  更:2022-01-24 11:15:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:32:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码