Unity3D动态天空之UniSky
找工作时一家公司时给我出的题目,去uniSky官网看了看快速入门就做了出来,时间自动流逝,并且可以手动设置时间段以及相应的天气效果,直接上代码,要.package的留邮箱啊,我在博客园找不到上传的地方
![](/assets/blank.gif)
![](/assets/blank.gif)
1 /// <summary> 2 /// 天气状态 3 /// </summary> 4 public enum WeatherState 5 { 6 /// <summary> 7 /// 晴天 8 /// </summary> 9 SUNNY_DAY, 10 11 /// <summary> 12 /// 雨天 13 /// </summary> 14 RAINY_DAY, 15 16 /// <summary> 17 /// 雪天 18 /// </summary> 19 SNOWY_DAY, 20 21 /// <summary> 22 /// 雾天 23 /// </summary> 24 FOGGY_DAY, 25 26 /// <summary> 27 /// 阴天 28 /// </summary> 29 CLOUD_DAY 30 }
天气状态
![](/assets/blank.gif)
![](/assets/blank.gif)
1 /// <summary> 2 /// 时间状态 3 /// </summary> 4 public enum TimeState 5 { 6 /// <summary> 7 /// 早晨 8 /// </summary> 9 MORNING, 10 11 /// <summary> 12 /// 上午 13 /// </summary> 14 AM, 15 16 /// <summary> 17 /// 中午 18 /// </summary> 19 NOONING, 20 21 /// <summary> 22 /// 下午 23 /// </summary> 24 PM, 25 26 /// <summary> 27 /// 傍晚 28 /// </summary> 29 DUSK, 30 31 /// <summary> 32 /// 夜晚 33 /// </summary> 34 NIGHT 35 }
时间状态
![](/assets/blank.gif)
![](/assets/blank.gif)
1 using UnityEngine; 2 using System.Collections; 3 4 public class SkyController : MonoBehaviour 5 { 6 //导入UniSky插件 7 private UniSkyAPI uniSky; 8 9 //存储当前时间状态 10 private TimeState nowTime; 11 //存储当前天气状态 12 private WeatherState nowWeather; 13 14 //时间状态是否更改 15 private bool changeTime = false; 16 //天气状态是否更改 17 private bool changeWeather = false; 18 19 //时间流逝速度 20 public float timeSpeed = 0.0F; 21 22 void Start () 23 { 24 //初始化UniSky插件 25 uniSky = GameObject.Find("UniSkyAPI").GetComponent("UniSkyAPI") as UniSkyAPI; 26 uniSky.InstantiateUniSky(); 27 //初始化时间状态(上午)和天气状态(晴天) 28 nowWeather = WeatherState.SUNNY_DAY; 29 nowTime = TimeState.AM; 30 //防止bug天空 31 uniSky.SetStormCloudCover(-3.5F); 32 uniSky.LerpStormCloudCover(-3.5F, -3.5F); 33 34 //去掉鼠标 35 Screen.showCursor = false; 36 } 37 38 void Update() 39 { 40 //根据键盘输入改变时间状态和天气状态 41 ChangeTimeAndWeather(); 42 //根据时间状态和天气状态绘制相关效果 43 RealizeTimeAndWeather(); 44 45 //如果没有强行改变时间,则时间正常流逝,反之则强行改变时间的这一帧时间不流逝 46 if (changeTime) 47 changeTime = false; 48 else 49 ChanageTime(); 50 51 if (changeWeather) 52 { 53 ResetSky(); 54 changeWeather = false; 55 } 56 57 //输出当前的时间和天气 58 Debug.Log(nowTime + "," + nowWeather + "," + changeWeather); 59 } 60 61 void OnGUI() 62 { 63 GUI.Label(new Rect(0, 0, 100, 20), "操作说明:"); 64 65 GUI.Label(new Rect(0, 50, 500, 20), "F1-F6功能键切换时间:F1->早晨 F2->上午 F3->中午 F4->下午 F5->黄昏 F6->晚上"); 66 GUI.Label(new Rect(0, 80, 500, 20), "1-5数字键切换天气: 1->晴天 2 ->雨天 3->大风 4->雾天 5->阴天"); 67 68 GUI.Label(new Rect(0, 130, 200, 20), "W->人物向前"); 69 GUI.Label(new Rect(0, 160, 200, 20), "S->人物向后"); 70 GUI.Label(new Rect(0, 190, 200, 20), "A->人物向左"); 71 GUI.Label(new Rect(0, 220, 200, 20), "D->人物向右"); 72 GUI.Label(new Rect(0, 250, 200, 20), "空格->跳跃"); 73 GUI.Label(new Rect(0, 280, 200, 20), "鼠标->旋转"); 74 } 75 76 /// <summary> 77 /// 时间自动流逝 78 /// </summary> 79 void ChanageTime() 80 { 81 uniSky.SetTime(uniSky.GetTime() + Time.deltaTime * timeSpeed); 82 } 83 84 /// <summary> 85 /// 重置天空 86 /// </summary> 87 void ResetSky() 88 { 89 //云少 90 uniSky.SetCloudCover(-2); 91 uniSky.LerpCloudCover(-2, -2); 92 //云白 93 uniSky.SetPrecipitationLevel(1); 94 uniSky.LerpPrecipitationLevel(1, 1); 95 //光多 96 uniSky.SetSunIntensity(0.5F); 97 uniSky.LerpSunIntensity(0.5F, 0.5F); 98 99 //不打雷 100 uniSky.SetLightningFrequency(0); 101 //不下雨 102 uniSky.SetRainLevel(0, 0); 103 uniSky.LerpRainLevel(0, 0, 0); 104 //雨不滴落下屏幕上 105 uniSky.SetDropletLevel(1); 106 uniSky.LerpDropletLevel(1, 1); 107 //没烟雾 108 uniSky.SetFogLevel(0); 109 uniSky.LerpFogLevel(0, 0); 110 111 //正常卷云 112 uniSky.SetGlowVariance(10); 113 uniSky.LerpGlowVariance(10, 10); 114 115 //清除缓存 116 uniSky.ClearDropletBuffer(); 117 } 118 119 /// <summary> 120 /// 实现时间天气效果 121 /// </summary> 122 void RealizeTimeAndWeather() 123 { 124 //--------------------------------------------时间 ----------------------------------------- 125 126 //早晨 127 if(nowTime == TimeState.MORNING) 128 { 129 uniSky.SetTime(8); 130 } 131 132 //上午 133 if (nowTime == TimeState.AM) 134 { 135 uniSky.SetTime(10); 136 } 137 138 //中午 139 if (nowTime == TimeState.NOONING) 140 { 141 uniSky.SetTime(12); 142 } 143 144 //下午 145 if (nowTime == TimeState.PM) 146 { 147 uniSky.SetTime(14); 148 } 149 150 //傍晚 151 if (nowTime == TimeState.DUSK) 152 { 153 uniSky.SetTime(16); 154 } 155 156 //晚上 157 if (nowTime == TimeState.NIGHT) 158 { 159 uniSky.SetTime(20); 160 } 161 162 //--------------------------------------------天气 ----------------------------------------- 163 164 //晴天 165 if (nowWeather == WeatherState.SUNNY_DAY) 166 { 167 //云少 168 uniSky.SetCloudCover(-2); 169 uniSky.LerpCloudCover(-2, -2); 170 //云白 171 uniSky.SetPrecipitationLevel(1); 172 uniSky.LerpPrecipitationLevel(1, 1); 173 //少卷云 174 uniSky.SetGlowVariance(15); 175 uniSky.LerpGlowVariance(15, 15); 176 } 177 178 //雨天 179 if (nowWeather == WeatherState.RAINY_DAY) 180 { 181 //云多 182 uniSky.SetCloudCover(-1); 183 uniSky.LerpCloudCover(-1, -1); 184 //云黑 185 uniSky.SetPrecipitationLevel(0.3F); 186 uniSky.LerpPrecipitationLevel(0.3F, 0.3F); 187 //光少 188 uniSky.SetSunIntensity(0.2F); 189 uniSky.LerpSunIntensity(0.2F, 0.2F); 190 //打雷 191 uniSky.SetLightningFrequency(200); 192 //下雨 193 uniSky.SetRainLevel(200, 200); 194 uniSky.LerpRainLevel(200, 200, 200); 195 //雨在屏幕图像上滴落(0到5) 196 uniSky.SetDropletLevel(100); 197 uniSky.LerpDropletLevel(100, 100); 198 //多卷云 199 uniSky.SetGlowVariance(5); 200 uniSky.LerpGlowVariance(5, 5); 201 } 202 203 //雪天 204 if (nowWeather == WeatherState.SNOWY_DAY) 205 { 206 //云多 207 uniSky.SetCloudCover(-1.5F); 208 uniSky.LerpCloudCover(-1.5F, -1.5F); 209 //光少 210 uniSky.SetSunIntensity(0.25F); 211 uniSky.LerpSunIntensity(0.25F, 0.25F); 212 //多卷云 213 uniSky.SetGlowVariance(-4); 214 uniSky.LerpGlowVariance(-4, -4); 215 } 216 217 //雾天 218 if (nowWeather == WeatherState.FOGGY_DAY) 219 { 220 //云多 221 uniSky.SetCloudCover(1); 222 uniSky.LerpCloudCover(1, 1); 223 //光少 224 uniSky.SetSunIntensity(0.2F); 225 uniSky.LerpSunIntensity(0.2F, 0.2F); 226 //雾多 227 uniSky.SetFogLevel(0.02F); 228 uniSky.LerpFogLevel(0.02F, 0.02F); 229 } 230 231 //阴天 232 if (nowWeather == WeatherState.CLOUD_DAY) 233 { 234 //云多 235 uniSky.SetCloudCover(2); 236 uniSky.LerpCloudCover(2, 2); 237 //光少 238 uniSky.SetSunIntensity(0.2F); 239 uniSky.LerpSunIntensity(0.2F, 0.2F); 240 } 241 } 242 243 /// <summary> 244 /// 改变时间天气状态 245 /// </summary> 246 void ChangeTimeAndWeather() 247 { 248 //--------------------------------------------时间 ----------------------------------------- 249 250 //F1键为早晨 251 if (Input.GetKeyDown(KeyCode.F1)) 252 { 253 changeTime = true; 254 nowTime = TimeState.MORNING; 255 } 256 257 //F2键为上午 258 if (Input.GetKeyDown(KeyCode.F2)) 259 { 260 changeTime = true; 261 nowTime = TimeState.AM; 262 } 263 264 //F3键为中午 265 if (Input.GetKeyDown(KeyCode.F3)) 266 { 267 changeTime = true; 268 nowTime = TimeState.NOONING; 269 } 270 271 //F4键为下午 272 if (Input.GetKeyDown(KeyCode.F4)) 273 { 274 changeTime = true; 275 nowTime = TimeState.PM; 276 } 277 278 //F5键为傍晚 279 if (Input.GetKeyDown(KeyCode.F5)) 280 { 281 changeTime = true; 282 nowTime = TimeState.DUSK; 283 } 284 285 //F6键为晚上 286 if (Input.GetKeyDown(KeyCode.F6)) 287 { 288 changeTime = true; 289 nowTime = TimeState.NIGHT; 290 } 291 292 //--------------------------------------------天气 ------------------------------------------- 293 294 //数字键1为晴天 295 if (Input.GetKeyDown(KeyCode.Alpha1)) 296 { 297 changeWeather = true; 298 nowWeather = WeatherState.SUNNY_DAY; 299 } 300 301 //数字键2为雨天 302 if (Input.GetKeyDown(KeyCode.Alpha2)) 303 { 304 changeWeather = true; 305 nowWeather = WeatherState.RAINY_DAY; 306 } 307 308 //数字键3为雪天 309 if (Input.GetKeyDown(KeyCode.Alpha3)) 310 { 311 changeWeather = true; 312 nowWeather = WeatherState.SNOWY_DAY; 313 } 314 315 //数字键4为雾天 316 if (Input.GetKeyDown(KeyCode.Alpha4)) 317 { 318 changeWeather = true; 319 nowWeather = WeatherState.FOGGY_DAY; 320 } 321 322 //数字键5为阴天 323 if (Input.GetKeyDown(KeyCode.Alpha5)) 324 { 325 changeWeather = true; 326 nowWeather = WeatherState.CLOUD_DAY; 327 } 328 } 329 }
核心控制类
效果图
转载于:https://www.cnblogs.com/coqn/archive/2013/06/07/3125380.html
Unity3D动态天空之UniSky相关推荐
- Unity3d 动态字体
https://www.xuebuyuan.com/2147872.html Unity3d 动态字体 2014年09月05日 ⁄ 综合 ⁄ 共 2101字 ⁄ 字号 小 中 大 ⁄ 评论关闭 目前测 ...
- Unity3D动态修改RectTransform
Unity3D动态修改RectTransform 改变RectTransform的width,height GetComponent<RectTransform>().rect.width ...
- Unity3D动态创建地形网格(一)
Unity3D动态创建地形网格(一) 这次简单的写一个动态创建地形网格的脚本给大家分享一下. 这次是第一部分,仅仅实现了通过高度图动态生成地形的部分.假如以后有心情和时间,再来慢慢的补充多通道刷地形材 ...
- 关于Unity3D动态生成连续性网格几何体总结【第三部分】(贴图篇)
关于Unity3D动态生成连续性网格几何体总结[第三部分](贴图篇) 文章目录 关于Unity3D动态生成连续性网格几何体总结[第三部分](贴图篇) 前言 一.动态建立UV值 二.贴图的平铺与拉伸 二 ...
- (转)Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用
引言: 在使用 Unity3d 开发微端.或者网页游戏的时候经常需要将资源打包成 AssetBundle ,然后通过 www 的方式动态的下载资源.今天要分享的是我再动态下载 Animation 骨骼 ...
- unity3d 动态合批设置_【CocosCreator】突破动态合图
1. 动态合图的默认规则 引擎中对动态合图的描述如下: 它能在项目运行时动态的将贴图合并到一张大贴图中.当渲染一张贴图的时候,动态合图系统会自动检测这张贴图是否已经被合并到了图集(图片集合)中,如果没 ...
- Unity3D 动态加载资源方式
在Unity3d游戏开发中,我们经常需要频繁创建物体,而其中的资源读取就是个问题.其中Unity为我们资源读取提供了几种基本方法,总的来说分为从内部读取和从外部读取. 1.Resources.Load ...
- unity3d 动态合批设置_Unity动态合批(Dynamic Batching)与静态合批(Static Batching)
动态合批与静态合批其本质是对将多次绘制请求,在允许的条件下进行合并处理,减少cpu对gpu绘制请求的次数,达到提高性能的目的. 1.静态合批是将静态(不移动)GameObjects组合成大网格,然后进 ...
- Unity3D 动态加载CAD模型 最后总结
相关技术文档下载:网盘技术宣传文档 请大家先看过文档之后再来咨询 我不是销售而是技术人员 FQA 能不能直接转换? 不能!不能!不能!重要的事情说三遍!需要转中间格式(svz,公司自有) 中间格式那么 ...
最新文章
- Python网络协议模块学习之smtplib
- java 反射获取对象_使用Java反射机制获取对象
- 多线程共享java_java多线程之共享资源
- ras私钥c#转java_RSA密钥,JAVA与.NET之间转换
- mysql case when sum count_SQL语句为什么在这种case when情况下要用sum而不是count
- ubuntu如何更改crontab的默认编辑器
- android适配各种分辨率的问题
- linq 清除一条数据中的某个字段值_利用Postman中Tests断言校验返回结果
- 数据挖掘之模糊集与模糊逻辑
- 八爪鱼 ajax 循环采集,网页数据采集五大循环方式详解 - 八爪鱼采集器
- 大学十年(一个程序员的路程)(林锐博士)《1----9》
- Three.js - 光源使用详解1(环境光 AmbientLight、点光源 PointLint)
- ESP32-C3——专为物联网应用场景设计
- 阿里云大数据工程师ACP认证例题
- android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新
- 数据脱敏技术的实践指南
- Unity——用代码实现序列帧动画
- Springboot项目使用Idea直接生成docker镜像部署到Centos7.6
- 硬件设计——MOS管实际应用详解
- 腾讯广告 上传行为数据【添加企业客服微信】