地形系统( Terrain )
- Unity拥有功能强大且完善的地形编辑器,支持以笔刷绘制的方式 实时绘制多种地形,同时,还提供地表元素绘制工具,制作树木 草坪、石头等地表元素
- Hierarchy( 层级)视图-> 鼠标右击-> Create ->3D Object ->Terrain
地形系统组件
- Transform:
- Position用于设置地形系统在场景中的位置
- Rotation与Scale数值的修改对地形系统不产生影响
- Terrain:地形编辑工具
- Raise/Lower Terrain (升高/降低地形):用于升高/降低地形。
- Brushes (笔刷):绘制地形高度的笔刷样式。
- Brush Size(笔刷尺寸):用于确定笔刷的大小,取值范围为1~100。
- Opacity (绘制强度) :用于确定每次点击后地形升高/降低的强度,范围为0~100。
- Set Height (喷涂高度):用于将地形绘制到指定高度。
- Height (设定高度):指定绘制的高度。
- Flatten按钮:将整个地形系统绘制至设定高度。
- Smooth Height (平滑高度):用于平滑地形高度。
- Paint Texture (绘制纹理):用于绘制地形系统的地表纹理。
- Target Strength (目标强度):纹理绘制的最大影响程度。
- Paint Trees (绘制树):用于在地形上添加树模型。
- Tree Density:树绘制的密度。
- Tree Height:绘制的树高度,可选择随机范围。
- Lock Width to Height:确定树的宽高比是否一致。
- Tree Width:绘制的树宽度可选择随机范围(当Lock Width to Height属性不勾选时可以编辑该属性)。
- Random Tree Rotate:确定树的朝向是否随机。
- Paint Details (绘制细节):用于在地形上添加草等其他细节元素。
- Add Grass Texture:草纹理的设置。
- Add Detail Mesh:细节网格的设置。
- Terrain Settings (地形设置):用于设置地形系统的相关参数。
- Basic Terrain
- Draw:是否呈现地形系统。
- Pixel Error:像素容差,表示显示地形网格时允许的像素误差。
- Base Map Dist:用于设定高分辨率地形贴图的显示范围。与摄像机超过该值的纹理以较低的分辨率显示。
- Cast Shadows:地形是否投射阴影。
- Tree & Detail Objects
- Draw:是否呈现树和细节。
- Detail Distance:设定超过摄像机多少距离的细节将会停止渲染。
- Tree Distance:表示树的显示距离,与摄像机距离超过该值的树将停止渲染。
- Mesh Resolution (On Terrain Data)
- Terrain Width:地形系统的宽度。
- Terrain Length:地形系统的长度。
- Terrain Height:地形系统的高度。
- Basic Terrain
- Raise/Lower Terrain (升高/降低地形):用于升高/降低地形。
- Terrain Collider:地形系统碰撞体
动画系统(Mecanim)
- Mecanim是Unity一个丰富且精密的动画系统,它提供了:
- 为人形角色提供的简易工作流和动画创建能力
- Retargeting(动画重定向)功能,即把动画从一个角色模型应用到另一个角色模型上。
- 针对Animation Clips(动画片段)的简单工作流。
- 一个用于管理动画间复杂交互作用的可视化编程工具。
- 通过不同逻辑来控制不同身体部位运动的能力。
Mecanim Workflow (Mecanim工作流)
- 资源的准备与导入。美术师或动画师通过第三方工具(3DMAX、Laya)制作资源。
- 可设置的内容
- Model:模型的网格,材质等模型渲染相关的设置。
- Rig:模型骨骼的设置。
- Animation:模型动画判断的设置。
- Project视图->鼠标右击->Import Package
- 可设置的内容
- 角色的建立
- 人形角色
- Mecanim通过扩展的图形操作界面和动画重定向功能,为人形模型提供了一种特殊的工作流。
- 一般角色。
- 这是为处理任意的运动物体和四足动物而设置的。动画重定向对此并不适用。
- 人形角色
- 角色的运动
- 设定动画片段以及片段之间的交互。
- Animation Clip(动画片段)
- 是Unity中最小的动画构造模块,用于表示一段独立的动画效果,例如行走、奔跑、跳跃。
- 在Inspector视图中的Clips列表下选择需要分割的动画片段。
- 使用动画预览确认动画片段的分割点(帧数)。
- 设置动画片段的起始与末尾帧,并修改动画片段名称。
- 新建动画片段,重复上述步骤完成动画分割。
- Animation Clip 首尾一致检查。
- 绿色:首尾状态几乎一致。
- 黄色:首尾状态存在些许差异。
- 红色:首尾状态存在明显差异。
注: 动画片段首尾一致仅表示动画片段在某方面的属性的相似程度,不影响动画的播放。不是非要亮绿灯。
- 第1项loop match条目表示动画片段首尾姿势的一致检查(对于行走动画片段动画片段的首帧是左脚着地,动画片段的尾帧也是左脚着地,动画片段循环播放时姿势连贯)。
- 第2项loop match条目动画片段首尾Rotation属性的一致检查(对于直线跑动画片段,动画片段首尾Rotation属性一致;左转跑动画片段,该条目首尾不一致)。
- 第3项loop match条目表示动画片段首尾Position属性Y轴分量的一致检查(对于行走奔跑动画片段,动画片段首尾的Position属性Y轴一致,对于跳跃动画片段,该条目首尾不一致)。
- 第4项loop match条目表示动画片段首尾Position属性XZ轴分量的一致检查(对于行走奔跑动画片段,动画片段首尾的Position的XZ属性不一致,对于原地向上起跳的动画片段,该条目首尾一致 )。
Avatar (角色替身)
- 人形骨架是在游戏中普遍采用的一种骨架结构,Unity为其提供了一个特别的工作流和一整套扩展的工具集。
- 由于人形骨骼结构的相似性,开发者可以将人形动画效果 从一个人形骨架映射到另一个人形骨架,实现动画重定向 功能。
- 创建动画的一个基本步骤就是建立一个从Mecanim系统的简化人形骨架结构到用户实际提供的骨架结构的映射 这种映射关系被称为Avatar。
- Rig选项卡下:
- Animation Type:
- Humanoid
- Generic
- Legacy
- None
- 对于人形动画,单击Animation Type石侧的下拉菜单,Humanoid,然后点击Apply按钮。Mecanim系统就会尝试将用户所提供的骨架结构与Mecanim系统内嵌的骨架结构进行匹配。
- 如果匹配成功,会在configure按钮旁边有一个正确符号,且会在Project视图自动生成Avatar文件EthanAvatar如果匹配失败会有一个错误符号,这时需要点击Configure进行手动匹配。
- 点击configure按钮,Unity编辑器新建一个Avatar配置场景,用于Avatar的配置。把红色部分变成绿色即可。
- Animation Type:
动画状态机(Animation State Machine)
- Animator组件:用于控制游戏对象的动画
- 选择游戏对象->Component菜单->Miscellaneous->Animator
- Animator Controller:动画控制器
- 通常情况下,一个游戏对象拥有多个动画片段,Animator Controller(动画控制器)允许开发者管理游戏对象的一系列动画片段。
- Avatar:角色替身
- Apply Root Motion:角色的位移或旋转是否由动画片段控制
- Animator Controller (动画控制器) 的功能如下:
- Animation State Machine(动画状态机)
- 在射击类游戏中,我们使用键盘控制角色的行为,例如WSAD控制角色移动,空格键控制跳跃。
- 角色的行为影响动画的播放,例如角色在移动时播放移动动画在跳跃时播放跳跃动画,这涉及到动画片段的播放与切换。
- 在Unity中,我们使用Animation State Machine(动画状态机)控制角色动画片段的播放与切换。
- Animation Layers & Avatar Mask(动画层与身体遮罩)
- Animation State Machine(动画状态机)
- 状态:每个状态都对应着一个动画。
- 状态过渡:改变角色所处的状态。
- 参数:状态过渡时与限制条件相关的参数。
- 创建状态,要在控制器里面添加状态:
- 先导入资源。
- Project视图中创建动画控制器
- Inspector视图中应用动画控制器
- 打开Animator视图:Windows菜单栏->Animator
- 创建 & 设置新状态
- 鼠标右键创建新状态。
- Motion:状态播放的动画片段。
- Speed:动画片段的播放速度。
- 参数添加(用于状态过渡)
- 在状态上鼠标右键->Make Transition。
- Has Exit Time:动画状态过渡是否有退出时间。
- Conditions:状态过渡条件设置。
- 如果不设置条件按箭头将自动过度到对应状态。
- 使用脚本控制状态参数。
Animation Layer & Avatar Mask 简介
- 用于合成身体不同部位的动画。
- 以射击类游戏为例,我们要实现“奔跑时射击”、“跃时射击”、“行走时射击”、“下蹲时射击”等功能。
- 一种方法是分别为它们制作不同的动画。
- 另一种方法是将“奔跑”、跳跃”等动画与“射击”动画结合起来。身体的下半部分使用“奔跑”动画,上半部分使用“射击”动画。
- Unity使用Animation Layer (动画层)来管理身体不同部分的动画。就是Animator中的Layers。
- 设置:
- Weight:动画层权重
- Mask:身体遮罩
- Avatar Mask(身体遮)可以使得开发者选择性地启用或禁用人形角色的相关关节,以控制动画片段对人形角色的影响:启用的关节受动画的控制而产生动作,禁用的关节不受动画的控制。
- Project视图>鼠标右键->Create->Avatar Mask
- Humanoid(人形角色关节设置)用于设置人形角色身体关节的启用和禁用。
- 绿色表示启用。
- 红色表示禁用。
游戏逻辑
捡物品
- 将物品设为触发器,通过GameManager管理捡到物品的逻辑。
游戏管理器GameManager
- 管理游戏状态(游戏进行中/胜利/失败)。
- 管理玩家积分。
- 管理场景中对象之间的交互。
- 显示游戏状态(玩家生命值与玩家得分)。
- 一个游戏只允许一个GameManager实例。
uGUI
- Hierarchy(层级)视图->鼠标右击->UI->...(uGUI控件选择)
Canvas与Eventsystem
- Canvas是uGUI控件的容器,uGUI控件必须是Canvas的子对象。
- EventSystem是事件处理系统,用于处理与响应用户与uGUI的交互。
Canvas(画布)
- 根据Canvas中的顺序进行绘制:靠上的对象先绘制。
- Sort Order(表示Canvas之间绘制顺序):该值越小的Canvas越先绘制。
Anchor(锚点)
- Anchor锚点是一种相对定位技术,每个控件都有各自的锚点我们可以先将锚点设置在屏幕的某个位置,然后设置其相对锚点的位置,这样可以方便地控制uGUI控件的位置。
控件
- Text
- Text:文本内容
- Font:字体样式
- Font Style:字体风格
- Font Size:字体大小
- Line Spacing:行间距
- Alignment:对齐方式
- Color:文字颜色
- Material:文字材质
- Image
- Source Image:图像源
- Color:图像显示的颜色
- Material:材质
- Button
- 在Unity中创建的Button控件是复合控件,包括Button背景图案Button按钮功能以及Button文本信息。
- Button事件设置流程
- 编写Button按钮触发的事件函数。
- 将包含该函数的脚本添加到场景的任意一个游戏对象中。
- 在Button组件的OnClick中添加事件函数。
- InputField
- 在Unity中创建的InputField控件是复合控件,包括输入栏背景图案、输入栏组件、输入栏提示文本以及输入栏可编辑文本。
- Slider
- 在Unity中创建的Slider控件是复合控件,它包含滑动条背景、滑动条填充图案、滑动块手柄。
- Fill Rect:滑动条填充图案
- Handle Rect:滑动条上的滑块图案
- Direction:数值增加的方向
- Min/Max Value:滑动条的最小/大值
- Toggle
- Toggle表示开关控件,它包含勾选框背景、勾选图案以及Toggle文本信息。
- Is On:Toggle是否勾选
- Graphic:设置
- Toggle背景图案
- OnValueChanged :当Toggle勾选情况发生改变时对应的事件响应函数(和Button类似)
移动平台触摸控制的实现方式
- 方法一:使用Input移动端输入函数,完成移动端输入的读取
- 方法二:用Cross Platform lnput资源包快速实现跨平台输入UI。
- Project视图->鼠标右键->Import Package->CrossPlatformlnput
- 将Unity编辑平台更改为Android平台。
- 向场景中添加Mobile Control Rig脚本。
- 在场景中添加用于接受移动端输入的UI对象。
- 给UI对象绑定Cross Platform Input中的脚本,用于获取移动端输入。
- 根据获取的输入在角色控制脚本中实现对玩家的控制。
粒子系统( Particle System )
- 粒子是在三维空间中渲染出来的二维图像,用于表现 如爆炸、烟、火、水等效果。
- Shuriken粒子系统采用模块化的管理方式,使用个性 化的粒子模块配合粒子曲线编辑器,使用户更容易创 作出各种缤纷复杂的粒子效果。
- Hierarchy视图->鼠标右击->Particle System
粒子系统初始化模块
- Start Lifetime(粒子初始存活时间)
- Start Speed (粒子初始速度)
- Start Size(粒子初始大小)
- Start Rotation(粒子初始朝向)
以上是给定区间取随机值。
- Gravity(重力)
- Max Particles(粒子最大个数)
Emission (发射模块)
- Rate(粒子发射速率)
shape(形状模块)
- Shape(粒子喷射形状)-> 例子为 Cone(圆锥)
- Angle(Cone角度)-> 10
- Radius(Cone底部半径)-> 0.3
ColorOverLifetime (粒子生命周期颜色模块)
- 管理粒子颜色随时间的变化情况。
- 勾选ColorOverLifetime:粒子生命周期颜色模块。
SizeOverLifetime (粒子生命周期尺寸模块)
- 管理粒子形状随时间变化的情况。
线渲染器
- 线渲染器(Line Renderer),使用一组3D点,在相邻两点之间使用材质绘制一条线。
- 选择游戏对象->Component菜单->Effects->Line Renderer
常用设置
- Materials:线渲染器的材质设置
- 线渲染器定位
- 如果只有两个点则以之为首末端。
- 如果有三个及以上则依次连线每个点,即串联起来。
- 线渲染器参数
- Start Width:始端宽度。
- End Width:未端宽度。
- Start Color:始端颜色。
- End Color:未端颜色。