Unity 其他系统

172 阅读12分钟

地形系统( 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:地形系统的高度。
  • 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 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(动画层与身体遮罩)
  • 状态:每个状态都对应着一个动画。
  • 状态过渡:改变角色所处的状态。
  • 参数:状态过渡时与限制条件相关的参数。
  • 创建状态,要在控制器里面添加状态:
    • 先导入资源。
    • 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:未端颜色。