您的位置:首页 > 移动开发 > Unity3D

Unity处女作学习总结--第四、五天

2017-08-22 22:59 218 查看

第四天

之前把数据存取给完成了,但是这一步只能通过代码测试,还没有做到面板可视化。

天空盒:

本来开始我对于背景是打算做一个超大背景图片,但是发现这样很不好,一方面图片质量肯定会有问题,还有就是图片可能会绘制遮盖(比如说 UI 始终会遮盖Sprite(2D元素)),所以最后选择了天空盒,效果相当的不错。

按钮视觉控制:

按钮通常有好几种形态(Normal , Highlighted,Pressed, Disable),我们通常需要控制按钮的可用性,举个例子:当我们没有存档的时候,Load 按钮应该是不可用的,这时我们把他给变成灰色,当有存档的时候,将他设置为白色。

这个也是很简单,看一下官方API,基本就能用了。这里面麻烦的是你把控制代码放在哪里,什么时候执行,用什么方式执行。为了效果与效率兼顾,就要好好考虑一下。

进度条(-Scene):

有一句话说得好:进度条都是假的。讲道理,大部分时候,这个其实主要的作用就是显得游戏正经一点,告诉玩家游戏没崩溃。

本人从这里学的:Unity异步加载方法

里面有几点注意一下:

1、用 UISlider 来模拟进度条,把 Interactable = false;让玩家不能拖进度条。

2、然后在适当的地方放一些图片,加一点动画,显得整个场景有生气一些。

3、场景元素尽可能少,以方便快速载入该场景。

4、目标载入场景的 索引 可以通过一个类的静态成员或方法搞定。

第四天~~~

第五天

将之前的场景连贯起来。

有时,游戏中需要一些不希望被销毁的对象一直存在,比如GameMaster,PC(角色的挂载体)等。这些在单独设计场景的时候很好处理,直接拖拽对象,添加引用就好。但是在实际的需求中,往往需要动态的进行对象的建立与销毁。

比如在载入新场景时,如果这个场景是一个 实际游玩场景,那么最方便可控的就是脚本生成对象,再进行处理,这也非常方便需求更改的处理。

为此,我觉得应该监听 场景变化 , 并在场景活动前由GameMaster 之类的进行一下场景的预处理。

在这里说一下,本来消息监听可以很方便的通过 Unity自带的BroadCastMessage,SendMessage等功能实现,但是有一位国外大佬说如果大量使用这些功能,那么游戏运行的效率 就会很 Low,所以在这部分我还是决定使用委托事件系统进行监听。总之代码结构及实现又是想了半天。

委托事件不熟的朋友可以看我之前的文章,只论使用,觉得还是挺清楚的:

C# delegate/event 在Unity中的使用

还有就是对于UI进行了一下再处理,在不同的场景设立不同的UI脚本,这样脚本之间引用就不会乱。

还有就是如果是切换场景后,需要动态生成对象时,有时对象还没有生成,但是原场景的对象已经在找新对象的引用了,这个时候如果不做处理就是空引用异常。

这个的解决方法也很简单,有两种:

一种建立协程(Coroutine)确保找到对象。

一种就是通过不间断调用函数来找到对象(如Update()),并在找到对象之前将所有的(或部分必要的)与之相关的代码全部不调用,一个if(target == null) 就解决了。

第五天~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 总结