前言:
本片博客为学习《Unity3D游戏设计与开发》(曹晓明)而做下的学习笔记。
Unity版本:2020.1.3f1c1
1.熟悉游戏物体和组件
Untiy世界由各种游戏物体组成,如摄像机、灯光、声音、3D物体等。每个物体都需要添加组件才能获得相应的属性,其中每个物体都有Transform组件(UI是Rect Transform组件)。可以将游戏组件与人的属性进行对比记忆,如下表:
| 现实世界 | Unity世界 |
| 人 | 游戏角色 |
| 地理位置 | Transform |
| 受到重力 | Rigbody |
| 感知碰撞 | Collider |
| 外貌不同 | Mesh Render |
| 听到声音 | Audio Listener |
| 说话 | Audio Souce |
| 动作 | Animtor |
| 其他技能 | 赋予特定的脚本 |
| ... | ... |
知识点:
| 任务 | 知识点 |
| 游戏物体基本特性及相关操作 | 1.创建游戏物体:GameObject.CreatPrimitive() 2.获取游戏物体:GameObject.Find() 3.变换游戏物体:GameObject.Translate() 4.克隆游戏物体:Instantiate() 5.销毁游戏物体:Destory() |
| 组件基本特性及相关操作 | 1.添加组件:gameObject.AddCompent<组件名>() 2.获取组件:gameObject.GetCompent<组件名>() 3.禁用组件:gameObject.GetCompent<组件名>().enable=fasle |
1)同类或相关的游戏物体为方便管理,通常放到一个空物体下。
2)代码创建游戏物体:灵活性高,可以在游戏需要时动态创建。
3)transform.Translate(Vector3 vector3);相当于transform.position+=vector3;
4)更改物体的大小:transform.localScale=new Vector3(x,y,x); x,y,z分别代表奥X轴,Y轴,Z轴的缩放,也可以通过乘以某个float的值实现整体按比例缩放。
5)旋转游戏物体:transform.Rotate(Vector3 vector3);
6)修改材质类型颜色:gameObject.GetCompent<Render>().material.color=Color.red;
7)移除组件:没有RemoveCompent()方法,可以通过Destory(组件名)的方法来移除。例如移除重力组件:Destory(gameObject.GetCompent<Rigboby>())。
案例实战:AlphabetGame
tips:
1)2D物体通常用Sprite来展示,我们导入图片是无法直接Sprite的Sprite Render属性中的,因为这些图片的属性并不是Sprite,需要将其转为Sprite格式(选中已导入的图片,将其Texture Type更改为Sprite(2D and UI));
2)Random.Range()函数的使用;
3)Sprite的渲染层级的设置;
4)静态变量的使用。
2.UGUI系统
UGUI的知识点结构:
根据功能不同也可进行分类:
| 可视化元素 |
Text:文本 Image:图片 Raw Image:原始图片 |
| 交互元素 |
Button:按钮 Toggle:开关 Slider:滑动条 Scrollbar:滚动条 DropDown:下拉列表 InputFile:输入框 |
| 载体元素 | Canvas:画布 Plane:面板 Scroll View:滚动视图 |
| 事件系统 | Event System |
1)Canvas(画布)
Canvas是所有UI元素的载体,即所有UI游戏物体都是他的子物体,同时也决定了UI如何被渲染出来。Canvas有三个重要的组件:Canvas组件、Canvas Scale组件、Graphic Raycaster组件
- canvas组件
该组件中,最重要的参数是Render Mode,他决定了UI如何渲染出来。
| 参数 | 值 |
| Render Mode(渲染模式:决定了UI如何被渲染出来) | Screen Space - Overlay(屏幕空间-覆盖模式):此模式下画布始终位于最前方,“覆盖”所有3D场景,摄像机的设置不影响画布的渲染。Rect Transform的大小会随着屏幕尺寸或分辨率改变。 Screen Space - Camera(屏幕空间-摄像机模式): World Space(世界空间模式):当UI作为场景中的一部分时可以使用该模式,画布和其他在3D世界中的游戏物体具有相同的属性 |
| Pixel Prefect(像素对应) | 勾选能使UI元素的像素对应起来,达到抗锯齿、使图形边缘更加平滑的效果。当Render Mode为World Space时不存在该选项 |
| Render Camera(渲染相机) | Screen Space - Camera模式下需指定UI组件渲染的相机,当摄像机的Projection(投射方式)为Perspective(透视模式)时,画布中的UI元素会受Fiel of View的影响。(一般指定为Orthographic) |
| Event Camera(事件相机) | 即使没有指定Event Camera,该画布仍能显示在屏幕上。Event Camera能够指定一个相机来接受事件,也可以通过画布上的Graphic Raycaster组件发射射线来产生事件。 |
| Sort Order(渲染顺序) | Int属性,指明Canvas的渲染顺序,值越大则Canvas的渲染越靠前。 |
| Plane Distance(画布距离) | 画布始终位于摄像机前方固定距离的平面。当3D物体比UI更靠近摄像机时,物体会显示在UI的前方。 |
| Sorting Layer(渲染层级顺序) | 需要Render(渲染器)渲染的都有该属性,可以手动添加层级,排在前面的先渲染,后面的Layer会覆盖前面的Layer。 |
| Additional Shader channels(附加渲染通道) | 与Shader通道有关很少用到 |
- canvas scale组件
画布缩放器组件用于控制画布的整体比例和UI的像素密度,会影响画布下的所有内容,包括字体大少和图像边框。其UI Scale Mode(UI比例模式)有三种,会影响画布中UI元素的缩放效果。
(1)Constant Pixel Size(恒定像素大小):这是默认的比例模式,无论屏幕大小如何,UI元素都保持相同的像素大小。
| 参数 | 值 |
| Scale Factor(比例因子) | 通过此因子缩放画布中的所有UI |
| Reference Piexl Per Unit(参考每单位像素数) |
如果是精灵中的“每单位像素数”设置,精灵中的一个像素将覆盖UI中的一个单位(我的理解:每个单位由这么多的像素覆盖) |
(2)Scale With Screen Size(根据屏幕尺寸缩放):UI元素会随着屏幕寸尺的改变而改变。
| 参数 | 值 |
| Reference Resolution(参考分辨率) | UI布局设计的分辨率。如果屏幕分辨率较高,则UI按比例放大;如果屏幕分辨率较低,则UI按比例缩小。 |
| Screen Mach Mode(屏幕比配模式) | Match Wight or Height(匹配宽度或高度):此时可以调整Match参数来确定缩放是以宽度、高度或是基于两者之间进行缩放; Expand(扩大):水平或垂直的展开画布区域,因此画布的大小永远不会小于参考; Shrink(收缩):水平或垂直裁剪画布区域,因此画布的大小永远不会大于参考。 |
| Reference Piexl Per Unit(参考每单位像素数) |
如果是精灵中的“每单位像素数”设置,精灵中的一个像素将覆盖UI中的一个单位(我的理解:每个单位由这么多的像素覆盖) |
(3)Constant Physical Size(恒定物理尺寸):无论屏幕大小和分辨率如何,UI始终保持相同的大小。
| 参数 | 值 |
| Physical Unit(物理单位) | 用于指定位置和大小的物理单位 |
| Fallback Screen DPI(后背屏幕DPI) | 如果屏幕DPI未知,则假设DPI |
| Default Sprite DPI(默认的SpriteDPI) | 当一个Sprite有Pixels Per Unit属性并匹配Refence Pixels Per Unit属性时所采用的DPI |
tips:
DPI(dot per inch):屏幕每英寸所包含的像素个数,可以反映屏幕的清晰度。
ppi(pixel per inch):图像的采样率,即在图像中,每英寸所包含的像素个数。
Resolution(分辨率):屏幕纵横方向像素个数。
- Graphic Raycaster(图像射线)组件
该组件主要用于UI的射线检测。
| 参数 | 值 |
| Ignore Reverse Graphics(忽略反转的图像) | 默认勾选该项,当UI展示背面时,不会接收到射线检测。 |
| Blocking Objects(屏蔽的物体) | 屏蔽指定类型的物体,使它们不参与射线检测,常用来解决UI穿透问题。可选值: None:不屏蔽任何物体。 Two D:屏蔽有2D碰撞器的物体。 Three D:平别有3D碰撞体的物体。 All:屏蔽所有物体。 |
| Blocking Mask(屏蔽的层) | 屏蔽指定的层,使它们不参与射线检测。当Blocking Objects不为None时,该项才起作用。 |
2)Image
Image用来显示图片,,同时能够设置属性使图片呈现多种效果。
| 参数 | 值 | |
| Rect Transform(矩形变换) | 位置、Anchor以及Pivot信息 | |
| SourceImage(图片源) | 指定要显示的目标图片资源,它只支持Sprite类型的图片 | |
| Color | 设置图片显示的色调 | |
| Image Type(图片的显示类型) | Simple(简单填充):如果Image的大小与Sprite不同时,Sprite会被拉伸到与Image空间一样大(可以勾选Preserve Aspect,Sprite会根据Image原高宽比例进行缩放) Sliced(切片类型):成为九宫格的图片才设用于Sliced类型,缩放过程中,四个角的切片不缩放,四条边做拉伸,中间部分做缩放操作。(取消勾选图片的Fill Center,Image只会显示图片的边缘部分) Tiled(平铺类型):同样普通的Sprite无法使用此类型,需清除Sprite的Packing Tag,同时将Wrap Mode改为Repeat。在Image区域内保持原有大小重复绘制直至填满该区域。 |
|
| Filled(填充类型): | ||