Unity3D 层级细节(LOD)的使用

Unity3D 层级细节(LOD)的使用,第1张

层级细节(LOD),根据物体在游戏画面中所占视图的百分比来掉调用不同复杂度的模型的。简单的说,就是当一个物体距离摄像机比较远的时候使用低模,当物体距离摄像机比较进的时候使用高模。这是优化游戏渲染效率的常用手法,缺点是占用大量内存。一般是在解决运行是流畅度的问题,采用的是空间换时间的方式。

示例:

1.准备三组模型,高精度模型,中精度模型,低精度模型,按照复杂程度由高到低的顺序排列并命名,如“模型LOD0”,“模型LOD1”,“模型LOD2”等,数字字号越低则模型越复杂,反之则越简单。如下图所示:

2.定义一个空对象,添加LODGroup组件:

3.将准备好的三种不同高精度的模型,拖拽到空对象的LODGroup组件的各个级别上。首先给LOD 0(表示摄像机最近距离显示)添加对应的模型。

4.在LOD组件添加模型的过程中会d出如图所示的信息表示把添加的模型作为LODGroup组件所属对象的子物体,单击“Yes,Reparent”:

5.为使构造的LOD游戏毒性显示得更加自然,需要把LOD下的子物体进行对齐处理(相对父物体的位置归0):

6.在Scenes视图中,拖动摄像机分别近距离与远距离观察模型变化。

在Project Setting中与LOD组件相关参数

LOD Bias和MaxiMum LOD Level

执行unity 编辑器菜单:Edit--Project Setting--Quality 会打开Quality Setting窗口找到other下的参数,如图所示:

MaxiMum LOD Level:最大的LOD级别,表示游戏使用的最高的LOD级别。在该级别以上模型不会被使用,并且在编译的时候忽略。(节省存储空间和内存空间)。

Bias LOD:LOD偏离,LOD级别基于物体在屏幕上的大小。当物体的大小在两个LOD级别之间,可以选择低细节模型或者高细节模型。数值取值为0~1,数值越接近0,则低细节模型。

分为三层tilemap

草地层,悬崖层,覆盖层

Z分别为0,50,100

悬崖的tilemap设置 mode改为Individual模式

分别在各自层级上刷上草和悬崖

在覆盖层上刷上悬崖上层的草皮

刷完后的效果

打开草地的整体效果,这样便完成了第二层草地覆盖第一层悬崖的视觉效果,但实际上第二层的草地和第一层的草地是同一层tilemap,只有悬崖上的覆盖层使用了一个单独的层级,使视觉上显示为覆盖层和草皮像在同一层

同理,如果还需要第三层的话,在需要的位置继续在悬崖层刷上悬崖

在覆盖层刷上覆盖草皮,如此,便实现了视觉上的高度关系,后期只要处理好人物的行走障碍,让人物的寻路贴了悬崖边缘,就可以了

注意,虽然可以做这样的背面悬崖的效果,但是不要在靠近背面悬崖的地方放置植物,石头等装饰物,会产生层级错误,

其他物体的z设置为200

加上植物后的整体效果,层级显示正确

多个场景会反复出现相同的UI窗体,多个场景反复加载(复用)

各个UI脚本之间的传值,容易交错,耦合度高(UI之间不相互联系,通过消息传递)

要手工控制窗体中间的层级关系(使用栈结构保持控制当前所有需要显示的UI窗体)

多个UI窗体之间相互叠加,容易出现误 *** 作(对当前窗体遮挡处理)

窗体自动加载管理

语言的国际化

尽量让框架本身完成与具体业务无关的事务性工作,让开发人员只需要专注游戏的业务逻辑

开发最简版

1.窗体自动加载管理

2.缓存UI窗体

3.窗体生命周期管理

UI框架的核心类设计

1.BaseUIForms基础UI窗体

2.UIManager UI窗体管理

3.UIType窗体类型

4.SysDefine 系统定义类

链接: https://pan.baidu.com/s/1-PomcmeBh2Up1S3iHWTHqQ

提取码:41cf

创建一些文件夹把贴图素材导入MyAtlas

把脚本素材分别放到

然后定义一个 UI基类

还有一个UI管理类 先列举出字段

然后搭设场景

几个空节点还有UICamera

Canvans设置 为按相机照射 UIScaleMode调整为宽高比例缩放match一般是0.5或者按高度适配

相机处理设置为正交模式 照射层级只有UI 还有记得把相机往后拉一点点不然没有图片

然后再Nomal下创建这样的界面 记得定好锚点

在Resources保存为预制体 到时候动态加载

然后记得把UI相机的这个去掉

然后添加常量名字

在UIManager添加UI创建方法

创建一个

挂给我们的LoginUI预制体

创一个空节点 挂上脚本

因为没设置窗口激活所以是隐藏的

然后UI层级管理的话要用到栈 “先进后出”

Stack<T>

类似于收盘子洗盘子 羽毛球筒放进去拿出来

还有类似于q的d夹

然后UIManager添加方法 有些判断写反了 又改了改

然后是把常量提取出来定义

我又把他的监听类 添加Transform也可以传递 语法糖改为C#6

UI基类封装常用方法

提供一个方法类Find Add的封装

然后拿去测试

这里定义一些窗口的常量定义

登录逻辑

人物选择界面逻辑


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8004157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存