Unity相机的位置和视角代表了游戏时玩家看到的实际画面,因此在开发中实现相机的跟随移动是非常重要的一部分。本节课介绍相机位置和cinemachine实现跟随相机的功能。
UI系统是游戏乃至所有软件的重要核心部分,Unity搭载的UI组件主要包括canvas,raycast等等。
相机组件
Camera组件的两个主要模式:Perspective(透视)和orthographic(正交)
颜色和渲染
ClearFlag:在空的地方渲染的选项。对应参数有
- Skybox
- SolidColor
- DepthOnly
- Don'tClear
BackgroundColor:背景颜色
Culling Mask:渲染的Layer图层
Depth:相机的渲染顺序
相机的移动
相机的看到的场景和角度由其位置position和旋转角度rotation决定(当然,也包括其模式)。
实现相机关于角色的跟随移动,可以简单地通过cinemachine组件(在package manager-Unity注册表检查你是否已经下载该组件)实现关于跟随玩家的移动,并且该组件相对完善。
UI系统
UI是User Interface的简称,即场景中显示信息或者可以交互的部分。除了游戏场景的其他可视组件基本上都是由UI组成的。所有UI组件都需要canvas组件来进行渲染;默认下UI不归相机渲染,这个常见的GameObject有根本的区别。所以,UI组件必须是canvas组件的子对象。
canvas的基本渲染模式:
- Overlay:显示在场景最上层,遮挡所有其他游戏场景,也是默认的最常见模式
- Camera:使用相机渲染。这通常在需要透视效果的时候使用。需要更多的相机去协调渲染。
- WorldSpace:将UI组件作为场景中的一部分引入,和其他GameObject一起渲染。
Canvas Scaler
根据一定条件适配canvas。通常用于多设备适配(调成scale with screen size)。否则会导致组件错位或者莫名消失的问题。
Graphic Raycaster
检测我们点到(触发)了哪个UI组件。
Rect Transform
常见UI组件
Image: 类似SpriteRenderer,显示一张图片在画布上。其属性包括SourceImage,Color,Material,Raycast Target(是否遮盖鼠标输入)(UI的遮盖顺序是根据Hierachy的顺序决定的)。
Text(TextMeshPro):在画布上显示文件。包括字体、行间距、大小、颜色、对齐、Raycast Target等等。
Button:作用范围:button及其子物体的判定范围,触发方式(不能长按,双击)和触发效果OnClick()。
Slider:一般用来实现进度条或者滑条、血条的功能,包括Background、Fill、Handle等属性,其中最重要的是Fill,显示了当前Slider的值。Slider的Value确定了滑条的位置。
Mask:Mask组件可以保证其子物体只在规定的形状内内显示
RectMask2D:提供了一个矩形形状的Mask,一般用于将背包系统搭载在该Mask内保证不会占用整个屏幕。
RectTransform:是矩形的Transformer,作为Transform的一个子类,多了Pivot和Anchor两个属性。可以根据parent的RectTransform信息调整自身的位置。其中Pivot决定了物体的旋转中心,Anchor(锚点)决定了该物体左下角和右上角(相对parent)的位置。
实现UI界面
先调整好界面,引入一个canvas负责统筹所有的UI。在脚本UImanager中设定按键,比如Input.GetKeyDown("Escape"),引入GameObject并且绑定Canvas,随后在函数中设定操作(例如SetActive()和按钮内容即可(当然,这是一个很初级的做法)。这样就可以实现基本的开关UI菜单功能。
关于在调出UI菜单时如何暂停游戏?这暂时不在这节课的讨论范围。查阅到资料了再来填坑。、
使用动画进行UI过渡
优秀的动画UI系统会极大优化交互体验,从而增强游戏体验。但是UI过渡动画面临一个常见问题,UI物体的控制比较麻烦。Unity内置了Canvas Group组件可以将所有UI层视为一个整体(即,包括canvas和其所有子物体)做一些效果操作。例如,UI菜单的弹出和关闭,玩家触发对话功能。