找工作时一家公司时给我出的题目,去uniSky官网看了看快速入门就做了出来,时间自动流逝,并且可以手动设置时间段以及相应的天气效果,直接上代码,要.package的留邮箱啊,我在博客园找不到上传的地方

 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 }

天气状态

 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 }

时间状态

  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相关推荐

  1. Unity3d 动态字体

    https://www.xuebuyuan.com/2147872.html Unity3d 动态字体 2014年09月05日 ⁄ 综合 ⁄ 共 2101字 ⁄ 字号 小 中 大 ⁄ 评论关闭 目前测 ...

  2. Unity3D动态修改RectTransform

    Unity3D动态修改RectTransform 改变RectTransform的width,height GetComponent<RectTransform>().rect.width ...

  3. Unity3D动态创建地形网格(一)

    Unity3D动态创建地形网格(一) 这次简单的写一个动态创建地形网格的脚本给大家分享一下. 这次是第一部分,仅仅实现了通过高度图动态生成地形的部分.假如以后有心情和时间,再来慢慢的补充多通道刷地形材 ...

  4. 关于Unity3D动态生成连续性网格几何体总结【第三部分】(贴图篇)

    关于Unity3D动态生成连续性网格几何体总结[第三部分](贴图篇) 文章目录 关于Unity3D动态生成连续性网格几何体总结[第三部分](贴图篇) 前言 一.动态建立UV值 二.贴图的平铺与拉伸 二 ...

  5. (转)Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用

    引言: 在使用 Unity3d 开发微端.或者网页游戏的时候经常需要将资源打包成 AssetBundle ,然后通过 www 的方式动态的下载资源.今天要分享的是我再动态下载 Animation 骨骼 ...

  6. unity3d 动态合批设置_【CocosCreator】突破动态合图

    1. 动态合图的默认规则 引擎中对动态合图的描述如下: 它能在项目运行时动态的将贴图合并到一张大贴图中.当渲染一张贴图的时候,动态合图系统会自动检测这张贴图是否已经被合并到了图集(图片集合)中,如果没 ...

  7. Unity3D 动态加载资源方式

    在Unity3d游戏开发中,我们经常需要频繁创建物体,而其中的资源读取就是个问题.其中Unity为我们资源读取提供了几种基本方法,总的来说分为从内部读取和从外部读取. 1.Resources.Load ...

  8. unity3d 动态合批设置_Unity动态合批(Dynamic Batching)与静态合批(Static Batching)

    动态合批与静态合批其本质是对将多次绘制请求,在允许的条件下进行合并处理,减少cpu对gpu绘制请求的次数,达到提高性能的目的. 1.静态合批是将静态(不移动)GameObjects组合成大网格,然后进 ...

  9. Unity3D 动态加载CAD模型 最后总结

    相关技术文档下载:网盘技术宣传文档 请大家先看过文档之后再来咨询 我不是销售而是技术人员 FQA 能不能直接转换? 不能!不能!不能!重要的事情说三遍!需要转中间格式(svz,公司自有) 中间格式那么 ...

最新文章

  1. Python网络协议模块学习之smtplib
  2. java 反射获取对象_使用Java反射机制获取对象
  3. 多线程共享java_java多线程之共享资源
  4. ras私钥c#转java_RSA密钥,JAVA与.NET之间转换
  5. mysql case when sum count_SQL语句为什么在这种case when情况下要用sum而不是count
  6. ubuntu如何更改crontab的默认编辑器
  7. android适配各种分辨率的问题
  8. linq 清除一条数据中的某个字段值_利用Postman中Tests断言校验返回结果
  9. 数据挖掘之模糊集与模糊逻辑
  10. 八爪鱼 ajax 循环采集,网页数据采集五大循环方式详解 - 八爪鱼采集器
  11. 大学十年(一个程序员的路程)(林锐博士)《1----9》
  12. Three.js - 光源使用详解1(环境光 AmbientLight、点光源 PointLint)
  13. ESP32-C3——专为物联网应用场景设计
  14. 阿里云大数据工程师ACP认证例题
  15. android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新
  16. 数据脱敏技术的实践指南
  17. Unity——用代码实现序列帧动画
  18. Springboot项目使用Idea直接生成docker镜像部署到Centos7.6
  19. 硬件设计——MOS管实际应用详解
  20. 腾讯广告 上传行为数据【添加企业客服微信】

热门文章

  1. Flutter组件学习(19)GridView
  2. csgo怎么控制电脑玩家_手机怎么去控制电脑,专治孩子玩游戏
  3. 第1-4章 java复习
  4. Windows Server 2012 中删除或弃用的功能
  5. 计算机书籍阅览记录统计
  6. php trim 过滤符号,phptrim_php过滤函数trim实现原理
  7. 网络ping不通,试试这8招
  8. 谈谈自己为公司设计的jmeter自动化部署框架
  9. Qt插件机制及加载流程
  10. matlab优化工具箱多目标遗传算法gamultiobj函数的实例