拉钩网易Unity面试提问小结

1、NGUIUGUI的区别

  • 图集方面

NGUI:是必须先打出图集然后才能开始做界面。这一点很烦,因为始终都要去考虑你的UI图集。比如图集会不会超1024,图集该如何来规划等等。在制作的时候需要将图片打入图集后才能进行制作。

UGUIsprite packer的模式。自带的图集打包模式,注意图片不能放在Resources文件夹下面,Resources文件夹下的资源将不会被打入图集,切记。没打包的时候生成的图集保存在和Assets文件夹同级的目录,Libary/AtlasCache里面,打包的时会重新自动生成就会生成并且会打到包中。在制作的时候不需要打图集,值需要标记包名称就行,换图什么的都很方便,Sprite Editor有切图工具,使用方便。

  • 列表和布局

NGUI

UIRoot下,通过锚点进行自适应;

控件可以把任意UI元素作为参考点来进行锚点。

UGUI

有专门的布局组件LayoutGroup,使用还是比较方便的;

锚点只能相对于父节点,但是个人感觉比NGUI的锚点使用方便的多。

  • 渲染顺序

NGUI

先根据Paneldepth进行排序,Panel再内部Depth排序。

UGUI

采用Hierarchy层级和Z轴坐标来决定渲染顺序,越下面渲染在顶层。

  • 文本显示

NGUI

支持动态字体,斜体,粗体,下划线,删除线,超链接,角标,颜色,描边,阴影,渐变色;

支持表情符号,但需要将表情打入图集,但是中文是用的动态图集,没法打图集。

UGUI

只支持粗体,斜体,大小(可以一个控件内多个字体大小),颜色,其他的网上有(但是很少),但是都不太好用。

  • 控件

NGUI

图集单个图片效果什么的只能对复制图集实现。

UGUI

图集单个图片可以使用material

  • 动画

NGUI

内部集成了Tween动画系统,也能用unity自带的动画系统,但是这些Tween动画协程比较多,不建议使用。

UGUI:也能使用第三方动画系统和自带动画系统,没什么区别。

  • 输入与响应

NGUI

通过每个空间上的BoxCollider来进行输入响应。

UGUI

UI自动拦截输入,事件触发;提供各种接口。


2、锚点和中心点的不同

anchore:锚点位置,从锚点中心(这里不是锚点的中心)到本物体的轴心(Pivot)的向量值。(如果设置锚点居中,则是将锚点的位置设置为其父窗口的几何中心而不是父窗口的Pivot)。

锚点位置的计算方式应该跟物体的轴心计算方式相同,只是轴心的参考物为本控件的Rect,而锚点的参考物为锚点的四个钉子组成的Rect

anchoredPosition的值不是四个钉子的几何中心到本控件的Pivot的矢量值,而是四个钉子形成的矩形上的某一个点到控件的Pivot的矢量值。

锚点的这个点的确定也是依赖Pivot值的,即:锚点的最终位置为由四个钉子组成的矩形的Pivot位置。


Pivot:物体的轴心,这里千万不要把这个参数理解为了物体中心,这个跟物体的中心是有区别的,当在设置锚点的位置为居中时,是根据父物体中心来计算,而不是这里的Povit计算的。

 

3、如何实现技能

要实现技能释放其实很简单,说白了就是在指定的位置Instantiate一个对应的例子特效。

GUI控件搭建好技能界面,然后在需要释放技能的时候,与角色当前位置实例化技能的粒子特效,然后发出射线检测,设置射线的长度,通过RaycastHit检测,如果返回了射到的物体信息,它的标签或者定位为怪兽,那么就扣除技能伤害的血量,如果是群攻技能,则射出一条射线,检测范围内射线检测到的所有值并一一遍历,把是怪物的对象扣除血量即可。

 

4、如何使用射线的检测

创建一条射线Ray需要指明射线的起点(origin)和射线的方向(direction)。这两个参数也是Ray的成员变量。注意,射线的方向在设置时如果未单位化,Unity 3D会自动进行单位归一化处理。射线Ray的构造函数为 :

public Ray(Vector3 origin, Vector3 direction);

RaycastHit类用于存储发射射线后产生的碰撞信息。常用的成员变量如下:

collider与射线发生碰撞的碰撞器

distance 从射线起点到射线与碰撞器的交点的距离

normal 射线射入平面的法向量

point 射线与碰撞器交点的坐标(Vector3对象)

 

5、UGUI的三层渲染

① Screen Space-Overlay模式(屏幕控件-覆盖模式)

Screen Space-Overlay(屏幕控件-覆盖模式)的画布会填满整个屏幕空间,并将画布下面的所有的UI元素置于屏幕的最上层,或者说画布的画面永远覆盖其他普通的3D画面,如果屏幕尺寸被改变,画布将自动改变尺寸来匹配屏幕

Screen Space-Overlay模式的画布有Pixel PerfectSort Layer两个参数:

Pixel Perfect:只有RenderModeScreen类型时才有的选项。使UI元素像素对应,效果就是边缘清晰不模糊。

Sort Layer: Sort LayerUGUI专用的设置,用来指示画布的深度。

 

② Screen Space-Camera模式(屏幕空间-摄影机模式)

Screen Space-Camera(屏幕空间-摄影机模式)和Screen Space-Overlay模式类似,画布也是填满整个屏幕空间,如果屏幕尺寸改变,画布也会自动改变尺寸来匹配屏幕。所不同的是,在该模式下,画布会被放置到摄影机前方。在这种渲染模式下,画布看起来 绘制在一个与摄影机固定距离的平面上。所有的UI元素都由该摄影机渲染,因此摄影机的设置会影响到UI画面。

Screen Space-Overlay模式的画布多了下面几个参数:

Render Camera:渲染摄像机

Plane Distance:画布距离摄像机的距离

Sorting Layer: Sorting LayerUGUI专用的设置,用来指示画布的深度。

Order in Layer:在相同的Sort Layer下的画布显示先后顺序。数字越高,显示的优先级也就越高。

 

③ World Space世界控件模式

World Space即世界控件模式。在此模式下,画布被视为与场景中其他普通游戏对象性质相同的类似于一张面片(Plane)的游戏物体。画布的尺寸可以通过RectTransform设置,所有的UI元素可能位于普通3D物体的前面或者后面显示。

 

第二次面试,蛮紧张的,断断续续说错了不少,面试时候由于远程,又听不清楚,期间还犯了大错,面试官没说完就抢答了,感觉又一次凉凉,还是凉的不要不要的。

猜你喜欢

转载自blog.csdn.net/qq_33575542/article/details/80020764