Unity层级细节(LOD)的使用

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

下面我们分步骤来构造一个最简单的LOD模型示例:

步骤1:准备3组模型,高精度模型,中精度模型,和低精度模型,并按照复杂程度自高向低的为模型命名,如“模型名称LODO0”、“模型名称LOD1”等,最后的数字序号越低,表示复杂程度越高。如图所示:

步骤2:定义一个空对象,添加LODGroup组件,如图所示:

步骤三:分别将刚刚准备好的三种不同精度的模型,拖拽到空对象的LODGroup组件的各个级别上。首先给LOD组件的“LOD 0”(LOD 0
表示摄像机最近距离显示)添加对应的模型。(LOD 0 对应高精度模型,然后拖拽到Add上面即可)如图所示:

步骤四:在LOD组件添加模型的过程中会弹出如图所示的提示信息,表明要把添加的模型作为LODGroup组件所属对象的子物体,单击”Yes,Reparent”按钮即可。

步骤五:为使构造的LOD游戏对象显示得更加自然,需要把LOD下的三个子物体进行”对齐“处理。(将其相对于父物体的坐标置为0)如图所示:

步骤六:在Scenes视图中,拖动摄像机分别近距离与远距离观察模型的变化。

注:Project Settings中与LOD组件相关参数

LOD Bias和Maximum LOD Level

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

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

Bias LOD:LOD偏离
,LOD级别基于物体在屏幕上的大小。当物体大小在两个LOD级别之间,可以选择使用低细节模型或高细节模型。数值取值范围为0-1,数值越接近0,越偏向于选择低细节模型。大白话描述即是:如果该值小那么,摄像机离物体距离稍微有些变化,不同细节物体即会切换,该值大,那么摄像机需要与物体有很大的距离才会切换。

Unity基础

第三方插件及使用

BestHttp : 功能主要有连接池 缓存 超时 代理 重定向 gzip 大文件上传下载 断点续传 socket
已经封装了一个类HttpUtils

文档[https://docs.google.com/document/d/181l8SggPrVF1qRoPMEwobN_1Fn7NXOu-
VtfjE6wvokg/edit?pref=2&pli=1#](https://docs.google.com/document/d
/181l8SggPrVF1qRoPMEwobN_1Fn7NXOu-VtfjE6wvokg/edit?pref=2&pli=1)

pro版提供源码https://www.assetstore.unity3d.com/en/#!/content/10872

1.9.8版本下载<http://www.seedpeer.eu/details/10707104/Unity-Asset---Best-HTTP-Pro-
Edition-v1.9.8%5BAKD%5D%5BCTRC%5D.html>

LitJson : 支持ORM对象关系映射 对象和json互转 和gson一样 官网http://lbv.github.io/litjson/

PoolManager : 对象缓存池
用法参考http://blog.csdn.net/henren555/article/details/42100881http://www.xuanyusong.com/archives/2974

工程文件的作用

Assembly-CSharp-vs.csproj 和 Assembly-CSharp.csproj :Visual Studio(带有-
vs后缀)和MonoDevelop为C#脚本生成的项目文件。

Assembly-UnityScript-vs.unityproj 和 Assembly-
UnityScript.unityproj:相同的项目文件,只不过是为JavaScript脚本。

testproject.sln 和 testproject-
csharp.sln:IDE的解决方案文件,第一个包括所有的C#、JavaScript和Boo脚本;而第二个只包括C#脚本,被设计用来在Visual
Studio中打开,因为VS不知道如何处理JavaScript和Boo项目。

testproject.userprefs 和 testproject-
csharp.userprefs:MonoDevelop用来存储当前打开文件、断点、观测等的配置文件。

Assets:存储所有游戏资源的文件夹,包括脚本、纹理、声音、编辑器定制等。当然是项目中最重要的文件夹。

ProjectSettings:在这个文件夹中Unity存储所有的项目设置,如物理、标签、角色设置等。或者说,所有你从 Edit → Project
的菜单中设置的都在这个文件夹中。

Library:被导入资源的本地缓存,当使用外部版本控制系统时应当被完全忽略。

obj 和 Temp:存储构建时产生的临时文件的文件夹,第一个用于MonoDevelop,第二个用于Unity。

看完了以上的内容就可以知道,我们只需要将Assets和ProjectSettings两个文件夹纳入版本控制即可。但在编写.gitignore文件前,还需要以下几个步骤,将设置以文本形式存储以利于版本控制:

在 Edit->Project Settings->Editor->Version Control Mode 中选择 Visible Meta files。

表示以meta文件来记录资源版本。 默认为Disabled,这样在无Library目录情况下会出现各种问题(后面会讲到Library不会提到版本库)。

在 Edit->Project Settings->Editor->Asset Serialization Mode 中选择 Force Text。

表示以纯文本形式保存unity文件。 Mixed和Force Binary都是二进制,不利于版本管理。

将Assets、ProjectSettings目录传到SVN、GIT或其它版本库

别人CheckOut这两目录后,第一次在Unity Editor中Open
Project…后会自动生成Library目录,所以Library无需纳入版本管理

特殊文件夹及作用

http://www.xuanyusong.com/archives/3229

渲染顺序和层级关系

http://blog.csdn.net/kingsea168/article/details/50252733

1.Unity3d中的渲染顺序如下:

不同的Camera的Depth

相同Camera下的不同SortingLayer

相同SortingLayer下的不同Z轴/Order in Layer

2.改变控件之间的层级关系

(1)同一canvas下:

改变控件transform的SiblingIndex,

1
2
3
transform.GetSiblingIndex();

transform.SetSiblingIndex(int index); //index值越大,越后渲染,层级越大,越显示在前面

(2)不同Canvas下:

设置Canvas下的Sort Order //Sort Order值越大,越后渲染,层级越大,越显示在前面

属性面板定制化

http://blog.sina.com.cn/s/blog_5b6cb9500101857b.html

http://www.360doc.com/content/15/1205/14/25502502_518083734.shtml

Canvas-Scaler

话说坑在何方?想当年年少轻狂时,层做了个类似下图的玩意:

勃主大笑三声,把screen的大小拖动了一下,然后它就变成了这个样子:

这是一件相当窝巢的事情,勃主苦练锚点三十年,终究还是没有搞定,知道师父他老人家蛋蛋的提点了一句“看看Canvas Scaler”。。。。。。

上图,勃主当时的scaler设定是这样的:

嗯,问题就在这里了,UI扩展模型——固定像素大小!!!!

好吧,淡淡的改成了下面这样:

问题解决了,ui怎么捏都不会变形了。。。

到这里,好奇心颇重的勃主撩起三脚猫的English打开了官方API:

[官方API的老巢](file:///D:/Program%20Files%20%28x86%29/Unity/Editor/Data/Documentation/html/en/Manual
/script-CanvasScaler.html)

对于Canvas Scaler的描述是这样的“The Canvas Scaler component is used for controlling

the overall scale and pixel density of UI elements in the Canvas. This scaling
affects everything under the Canvas, including font sizes and image
borders.”(画布定标器组件是用于控制UI元素的整体规模和像素密度在画布上。这个扩展影响在画布上的一切,包括字体大小和图像边界。)我知道,谁都受不了这该死的鸡翻,所以我还得重新翻过:Canvas
Scaler是用来控制Canvas上的UI元素整体规模和像素的组件,这个扩展影响Canvas上的一切,包括字体大小和图像边界。

Canvas Scaler的ui scale mode有三种值(constan pixel size、scale with screen

size和constant physical size),接下来我就来介(翻)绍(译)一下这三种情况下的各参数代表的含义

1.Constant Pixel Size 不变像素大小

参数:

Scale Factor–大小比例;

Reference Pixels Per Unit – ,每单位代表像素量

2.Scale With Screen Size根据屏幕大小定标

-Reference Resolution(参考分辨率)

The resolution the UI layout is designed for. if the screen resolution is
larger, the UI will be scaled up, and if it’s smaller, the UI will be scaled
down.

参照这个UI布局所依据的分辨率,如果屏幕分辨率更大,那么UI会变大,如果屏幕分辨率更小,那么UI会变小。

-Screen Match Mode(屏幕匹配模式)

Match Width or Height 参考宽或者高或者两者来规划画布

Expand 横纵两个方向扩大画布使画布不小于参考

Shrink 裁切画布使画布不大于参考

-Reference Pixels Per Unit 每单位的参考像素

当选择Match Width or Height时会有Match滑块,用来决定width和height的影响比例

3.Constant Physical Size 不变的物理尺寸

Physical Unit可以设置物理单位

Fallback Screen DPI屏幕分辨率不明是采用的分辨率

Default Sprite DPI 精灵每英寸的默认像素

Reference Pixels Per Unit

4.当Canvas的Render Mode属性为world space时

Canvas Scaler的ui Scale Mode为world不可改变

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×