72.总结
72.1 知识点
学习的主要内容
总结讲什么
Unity核心中知识点的重要性
如何学好Unity?
强调
72.2 核心要点速览
图片纹理
Unity支持的图片格式
- BMP:是Windows操作系统的标准图像文件格式,特点是几乎不进行压缩,占磁盘空间大。
- TIF:基本不损失图片信息的图片格式,缺点是体积大。
- JPG:一般指JPEG格式,属于有损压缩格式,能够让图像压缩在很小的存储空间,一定程度上会损失图片数据,无透明通道。
- PNG:无损压缩算法的位图格式,压缩比高,生成文件小,有透明通道。
- TGA:支持压缩,使用不失真的压缩算法,还支持编码压缩。体积小,效果清晰,兼备BMP的图像质量和JPG的体积优势,有透明通道。
- PSD:是PhotoShop(PS)图形处理软件专用的格式,通过一些第三方工具或自制工具可以直接将PSD界面转为UI界面。
此外,Unity还支持EXR、GIF、HDR、IFF、PICT等格式。其中,在Unity中最常用的图片格式是JPG、PNG和TGA三种。
纹理类型参数
纹理类型 | 描述 | 相关参数及解释 |
---|---|---|
Default(默认) | 大部分导入的模型贴图都是该类型 | 无特殊参数 |
sRGB(Color Texture)(sRGB颜色纹理) | 启用可以将纹理存储在伽马空间中(对每一个像素做一次幂函数运算),一般勾选。 人眼看线性渐变的图片会感觉不是线性的,要用伽马控件校正,校正后的图片人眼看是线性渐变的 |
sRGB(Color Texture):一般勾选,用于伽马校正 Alpha Source(Alpha源):指定如何生成纹理的Alpha通道 - None:无论输入纹理是否有Alpha通道,导入的纹理都没有Alpha通道 - Input Texture Alpha:使用输入纹理中的Alpha通道 - From Gray Scale:从输入纹理RGB值的平均值生成Alpha,一般不用 Alpha Is Transparency(Alpha是透明的):启用可以避免边缘上的过滤瑕疵,一般启用 |
Normal map(法线贴图) | 法线贴图格式:在原物体的凹凸表面的每个点上均作法线(法线是垂直于某个点的切线的方向向量)。 游戏中有时不使用高精度、多三角面片的模型(避免卡顿),记录高精度模型的各个点的法线做成法线贴图,在低精度模型中,通过法线贴图和一些着色器算法,在三角面片更少的低精度模型里能得到效果更好、看起来更高精度的效果 |
- Create From Grayscale:启用此属性可以从灰度高度贴图创建法线贴图 - Bumpiness:控制凹凸程度,值越大凹凸感越强 - Filtering: - Sharp:生成比标准模式更锐利的法线贴图 - Smooth:使用标准算法生成法线贴图 |
Editor GUI and Legacy GUI(编辑器GUI和旧功能GUI) | 一般在编辑器中或者GUI上使用的纹理 | 无特殊参数 |
Sprite(2D and UI)(精灵(2D和UI)) | 2D游戏或者UGUI中使用的格式 | - Sprite Mode: - Single:按原样使用精灵图像,图片是一张图(非图集)就选这个选项 - Multiple:瓦片模式,如果是图集,使用该选项,可以在Sprite Editor编辑窗口自定义图片 - Polygon:网格精灵模式,如果图片或者图集是多边形可以选择这种模式 - Pixels Per Unit:世界空间中的一个距离单位(Unity中为一米)对应多少像素 - MeshType(只有Sprite模式是Single模式和Multiple模式才支持,因为Polygon模式可自定义多边形大小): - Full Rect:创建四边形,将精灵显示在四边形上,若图片为三角形,渲染到3D引擎里会创建矩形做成两个三角面片来渲染 - Tight:基于像素Alpha值来生成网格,更加贴合精灵图片的形状,任何小于32*32的精灵都使用FullRect模式,即使设置成Tight模式也是,若图片为三角形,渲染到3D引擎里会把三角形切割成几个三角面片来渲染 - Extrude Edges:使用滑动条确定生成的网格中精灵周围留出的区域大小,可理解为三角形图片边的溢出渲染区域的大小 - Pivot(Single模式才有此选项):精灵图片的轴心点,对应九宫格布局的九个点,还可以自定义 - Generate Physics Shape(只有Single 和Multiple模式才可使用,因为Polygon是自己手动设置的):启用此选项,Unity会自动根据精灵轮廓生成默认物理形状,若图片要进行物理判断(如碰撞器或者物理检测),就勾选它 - Sprite Editor:编辑Sprite,需要安装2D Sprite包 |
Cursor(光标) | 自定义光标,设置鼠标的图片 | 无特殊参数 |
Cookie(光源剪影格式) | 用于设置光照类型的纹理形状 | - Light Type: - Spotlight:聚光灯类型,需要边缘纯黑色纹理,TextureShape纹理形状需设置为2D形状 - Directional:方向光,平铺纹理,需要设置TextureShape纹理形状为2D形状 - Point:点光源,需要设置TextureShape纹理形状为立方体形状 |
Lightmap(光照贴图) | 光照贴图格式 | - Single Channel:纹理只需要单通道的格式 - Channel: - Alpha:使用Alpha通道,不允许进行压缩 - Red:使用红色通道 |
纹理形状参数
Texture Shape(纹理形状) | 描述 |
---|---|
2D | 最常用设置,这些纹理将应用于模型和 GUI 元素上 |
Cube(立方体) | 主要用于天空盒和反射探针 |
Mapping(贴图) | 如何将纹理投影到游戏对象上,具体如下: - Auto(自动):根据纹理信息创建布局。 - 6 Frames Layout(6 帧布局(立方体环境)):纹理包含以标准立方体贴图布局之一排列的六个图像。 - Latitude-Longitude Layout(纬度精度布局(立方体)):将纹理映射到 2D 维度/经度。 - Mirrored Ball(镜面球):将纹理映射到类似球体的立方体贴图上。 |
Convolution Type(卷积型) | 纹理的过滤类型,具体如下: - None(无):无过滤。 - Specular(镜面(光泽反射)):将立方体作为反射探针。 - Diffuse(漫反射(发光)):将纹理进行过滤表示辐照度,可作为光照探针。 |
Fixup Edge Seams(固定边缘对接处) | 适用情况:当 Convolution Type 为 None 和 Diffuse 时才有用。 作用:解决低端设备上立方体贴图过滤错误的问题。 |
纹理高级参数设置
参数 | 描述 | 选项及说明 |
---|---|---|
Non - Power of 2(非2次幂) | 处理纹理尺寸非2的幂的情况。因图形学规则,纹理通常须是2的幂尺寸 | None:纹理尺寸保持不变 ToNearest:将纹理缩放到最接近2的幂的大小(PVRTC格式要求纹理为正方形) ToLarger:将纹理缩放到最大尺寸值的2的幂的大小 ToSmaller:将纹理缩放到最小尺寸值的2的幂的大小 |
Read/Write Enabled(读/写已开启) | 启用后可使用Unity方法从纹理获取数据 | 一般在需要代码获取图片数据时开启,否则会占内存 |
Streaming Mipmaps(流式Mipmaps) | 启用后可使用纹理串流 | 用于控制加载在内存中的Mipmap级别,减少Unity对纹理所需内存总量,用性能换内存 |
Mip Map Priority(Mipmap优先级) | - | Unity根据该优先级确定分配资源时优先考虑的Mipmap |
Generate Mip Maps(生成MipMaps贴图) | 允许生成MipMap | 开启后可在下方图片栏滚动条调整MipMaps尺寸,2D游戏一般不启用,3D游戏视情况而定 |
Border Mip Maps(边框Mip贴图) | - | 启用可避免颜色向外渗透到较低MIP级别的边缘 |
Mip Map Filtering(Mip贴图过滤) | 优化图像质量的过滤方法 | Box:随着尺寸减小,级别更平滑 Kaiser:Mipmap尺寸下降时使用的锐化算法,适用于远处纹理模糊的情况 |
Mip Maps Preserve Coverage(MipMaps保留覆盖范围) | - | Mipmap的Alpha通道在Alpha测试期间保留覆盖率 |
Alpha Cutoff Value(Alpha修剪值) | - | 覆盖率参考值 |
Fadeout Mip Maps(交叉淡化Mip贴图) | - | 级别递减时使Mipmap淡化为灰色 |
纹理平铺拉伸参数
参数 | 描述 | 选项及说明 |
---|---|---|
Wrap Mode(贴图间拼接模式) | 平铺纹理时的方式。可通过创建四边形面片、材质,拖拽图片,修改平铺拉伸参数和材质的平铺 XY 及偏移来查看效果 | Repeat(重复):在区块中重复纹理 Clamp(钳制):拉伸纹理的边缘 Mirror(镜像):在每个整数边界上镜像纹理以创建重复图案 Mirror Once(镜像一次):镜像纹理一次,然后将拉伸边缘纹理 Per - axis(每轴):单独控制如何在 U 轴和 V 轴上包裹纹理 |
Filter Mode(过滤模式) | 纹理在通过 3D 变化拉伸时的过渡方式 | Point(点):纹理在靠近时变为块状 Bilinear(双线性):纹理在靠近时变得模糊,一般常用此模式 Trilinear(三线性):与 Bilinear 类似,但纹理也在不同的 Mip 级别之间模糊 |
Aniso Level | 以大角度查看纹理时提高纹理质量,但性能消耗高 | - |
纹理平台打包相关参数
参数 | 描述 | 选项及说明 |
---|---|---|
Max Size(最大尺寸) | 设置导入纹理的最大尺寸,可将美术提供的大尺寸图片限制在一定范围内,一般选择 2048 | - |
Resize Algorithm(重设大小算法) | 当纹理尺寸大于指定的 Max Size 时,用于缩小纹理的算法 | Mitchell:默认米切尔算法,是常用的尺寸缩小算法 Bilinear:使用双线性插值调整大小,对于细节重要的图片,比米切尔算法保留更多细节 |
Format(格式) | 纹理格式,各平台支持的格式不同,若选择 Automatic,会根据平台使用默认设置 | 都支持的格式 移动端和网页端特有格式 iOS:选择默认的纹理压缩设置 (PVRTC) 可获得更大兼容性;若应用程序不包含 OpenGL ES 2 支持,可选择 ASTC 格式,该格式质量更好、灵活性更高且压缩速度比 PVRTC 快 Android:因安卓设备众多且标准不一,一般会根据不同设备标准制作多个安装包。 - 构建以 OpenGL ES 3 为目标的 APK:访问 Android 的 Player Settings(菜单:Edit > Project Settings >Player Settings,然后选择 Android 类别),向下滚动到 Graphics APIs 部分,确保 OpenGL ES 2 不在列表中,然后构建 APK(菜单:File > Build Settings,然后单击 Build) - 构建以 OpenGL ES 2 为目标的单独 APK:访问 Android Player Settings,向下滚动到 Graphics APIs 部分,在列表中添加 OpenGL ES 2 并删除 OpenGL ES 3 和 Vulkan,然后构建 APK |
Compression(压缩) | 选择纹理的压缩类型,帮助 Unity 正确选择压缩格式,会根据平台和压缩格式的可用性进行压缩 | None(无):不压缩纹理 Low Quality(低质量):以低质量格式压缩纹理 Normal Quality(法线质量):以标准格式压缩纹理 High Quality(高质量):以高质量格式压缩纹理,一般选择高质量 |
Use Crunch Compression(使用 Crunch 压缩) | 启用后,使用 Crunch 压缩,Crunch 是一种基于 DXT 或 ETC 纹理压缩的有损压缩格式,特点是压缩时间长,解压速度快 | - |
Split Alpha Channel(拆分 Alpha 通道) | Alpha 通道分离,可节约内存,会把一张图分成两张纹理,一张包含 RGB 数据,一张包含 Alpha 数据,渲染时再合并渲染 | - |
Override ETC2 fallback(覆盖 ETC2 回退) | 在不支持 ETC2 压缩的设备上使用的格式 | - |
SpriteEditor精灵编辑器
Single 图片编辑功能
功能 | 描述 |
---|---|
Sprite Editor 基础图片设置 | Name:设置图片名称。 Position:调整图片在其中的偏移位置以及宽高。 Border:设定九宫格的 4 条边。 Pivot:确定轴心(中心)点的位置。 Pivot Unit Mode: Normalized:标准化模式,取值在 0 至 1 之间。 Pixels:像素模式,显示当前轴心在图片中的像素位置。 Custom Pivot:自定义轴心点。 |
Custom Outline 自定义边缘线(决定渲染区域) | 可自定义精灵网格的轮廓形状。默认在矩形网格上渲染,边缘外部透明区域会被渲染,存在性能浪费。通过自定义轮廓,可缩小透明区域,提升性能。 Snap 捕捉:使控制点贴近最近的像素,默认选择该选项。 Outline Tolerance:控制轮廓点的复杂性和准确性,取值范围 0 至 1,值越大,轮廓点越多,越准确。 Generate:生成网格轮廓,可手动编辑点,修改后需应用。 |
Custom Physics Shape 自定义物理形状(决定碰撞判断区域) | 用于自定义精灵图片的物理形状,主要针对需要物理碰撞判断的 2D 图形,确定碰撞检测区域,其参数和操作与自定义边缘线基本相同。 |
Skinning Editor 皮肤编辑器 | 暂不讲解,后续涉及。 |
Secondary Textures 辅助纹理(为图片添加特殊效果) | 可将其他纹理与该精灵图片关联。点击加号添加关联图片作为辅助纹理并命名,着色器可利用这些辅助纹理进行效果处理,赋予精灵其他效果。 |
Multiple 图集元素分割
当图片资源为图集时,需将模式设为 Multiple,借助 Sprite Editor 进行图集元素分割:
操作 | 描述 |
---|---|
切片操作 | 在 Sprite Editor 窗口中,选中要删除的切片按 Delete 键删除;也可按住鼠标左键用选择框进行切片。若 Delete 键无法删除,可将框移至空白处,点击 Trim 剪裁来删除。 |
切片设置 | 选中切片可设置其信息,与 Single 模式下图片编辑类似,设置好后可抠出切片图使用。编辑参数后选择切片进行切割,若切割不准确可手动调整,切割后可通过下拉按钮查看切割后的图,可用于制作动画帧图。 |
分割参数讲解 | Slice Type 切片类型: Automatic 自动分割: Pivot 轴心:设置单张图片轴心点位置。 Custom Pivot 自定义轴心点:自定义轴心点。 Method 方法: Delete Existing 删除现有:替换已选的任何矩形。 Smart 聪明:尝试创建新矩形并保留或调整现有矩形。 Safe 安全:添加新矩形而不改变已存在的矩形。 Grid By Cell Size 按单元格大小分割:仅适用于规范矩形图集。 Pixel Size 像素大小:设置单元格宽高。 Offset 偏移:设置左上角偏移位置。 Padding 填充:设置与边缘的偏移位置以及矩形间的偏移缝隙。 Keep Empty Rects:决定是否保留空矩形,一般不勾选。 Grid By Cell Count 按单元格数量分割:设置 Column & Row(行列数)。 Trim 剪裁:选中切片单元格,可自动去除单元格上多余的透明部分。 |
Polygon 多边形编辑
若使用的资源是多边形资源,可将模式设为 Polygon,在 Sprite Editor 中进行快捷设置,但实际开发中较少使用:
操作 | 描述 |
---|---|
多边形编辑参数 | 点击更改形状,可设置边数,范围在 3 至 128 之间。自定义边缘线会自动生成渲染范围,仅显示圈定的图形。需注意,设置为 Polygon 多边形后再改回 Single 模式,需重新选择自定义边缘线生成,否则会保留上次的边缘线。 |
Animator
Animator 动画器组件参数说明
参数 | 描述 | 选项及说明 |
---|---|---|
Controller(控制器) | 对应的动画控制器(状态机) | - |
Avatar(替身) | 对应的替身配置信息(在讲解 3D 模型时详细讲解) | - |
Apply Root Motion(应用根运动) | 是否启用动画位移更新 | 若启用,动画中的位移信息会更新物体的位置;若不启用,物体位置不受动画位移影响 |
UpdateMode(更新模式) | 一般不修改该参数 | Normal(正常更新):按照正常的游戏更新循环进行动画更新 Animate Physics(物理更新):与物理系统同步更新动画,适用于动画与物理交互的场景 Unscaled Time(不受时间缩放影响):动画更新不受 Time.timeScale 的影响,即使游戏时间被缩放,动画仍按正常速度播放 |
Culling Mode(裁剪剔除模式) | - | Always Animate(始终播放动画):无论物体是否在屏幕内,动画都会持续播放,不会被剔除 Cull Update Transforms(裁剪更新变换):当摄像机没有渲染该物体时,停止对物体位置、IK(反向运动学)的写入操作,但动画本身可能仍在运行 Cull Completely(完全裁剪):当摄像机没有渲染物体时,整个动画被完全禁用,不进行任何计算和更新 |
Animator 动画器代码控制
获取 Animator 组件
// 我们用代码控制状态机切换主要使用的就是Animator提供给我们的API
// 我们知道一共有四种切换条件 int float bool trigger
// 所以对应的API也是和这四种类型有关系的
Animator animator = this.GetComponent<Animator>();
Animator.SetXXX 方法:通过状态机条件切换动画
// 通过状态机条件切换动画
// 设置动画参数状态
// 设置浮点数类型的动画参数
animator.SetFloat("条件名", 1.2f);
// 设置整数类型的动画参数
animator.SetInteger("条件名", 5);
// 设置布尔类型的动画参数
animator.SetBool("条件名", true);
// 设置触发类型的动画参数
animator.SetTrigger("条件名");
Animator.GetXXX 方法:获得动画参数状态
// 获得动画参数状态
// 获取浮点数类型的动画参数值
animator.GetFloat("条件名");
// 获取整数类型的动画参数值
animator.GetInteger("条件名");
// 获取布尔类型的动画参数值
animator.GetBool("条件名");
// 直接切换动画(除非特殊情况,不然一般不使用)
// 注意:状态名和动画名不一样,动画名拖进来默认名字就是状态名,但是可以修改得和动画名不一样
animator.Play("状态名");
Animator 窗口中动画状态设置相关参数
参数 | 描述 | 选项及说明 |
---|---|---|
Motion(运动) | 分配给此状态的动画剪辑 | - |
Speed(速度) | 动画的默认速度 | - |
Multiplier(乘数) | 控制速度的乘数,需勾选 Parameter 选中配合的 float 类型参数才能使用 | - |
Motion Time(运动时间) | 运动的时间,需勾选 Parameter 选中配合的 float 类型参数才能使用,一般是 0 - 1 的数字。使用该参数后动画不会自动播放,需设置参数值才会动,如设置成 0.1,动画就卡在进度播放到 0.1 的位置,在 Update 中不断加大参数值可一帧一帧播完动画 | - |
Mirror(镜像) | 是否为状态生成镜像,仅适用于人形动画,若配合参数使用需选中旁边的 Parameter 关联 bool 类型参数 | - |
Cycle Offset(周期偏移) | 循环偏移时间,若配合参数使用需选中旁边的 Parameter 关联 float 类型参数。如填 0.5,动画就会从中间位置开始播放 | - |
Foot IK(脚步反向动力学) | 是否遵循 Foot IK,适用于人形动画 | - |
Write Defaults(写入默认值) | AnimatorStates 是否为其运动执行未动画化的属性写回默认值,默认勾选 | - |
Solo(单独播放) | 仅播放该过渡,条件都满足的动画优先切换选择了 Solo 的动画 | - |
Mute(静音) | 禁用过渡,就算条件满足也不切换,Solo 和 Mute 一起选择时,Mute 优先执行 | - |
Add Behaviour(添加行为) | 添加状态机行为脚本,之后会专门讲解 | - |
Animator 窗口中动画过渡设置相关参数
参数 | 描述 | 选项及说明 |
---|---|---|
连线名 | 为动画过渡改名,若不改对应的名字就是”某一状态名”->”某一状态名”,一般不改 | - |
Has Exit Time(是否有退出时间) | 若勾选,当切换动画时,动画一定是播放到下方的 Exit Time(百分比)的时间时才过渡到下一个动画;若希望立刻切换动画,可不勾选该选项 | - |
Exit Time(退出时间) | 当选择上方的 Has Exit Time 时,该值决定了过渡生效的确切时间。该值可以大于 1,若小于 1,比如 0.85,表示当动画播放到了 85%的动画时,就会过渡;若大于 1,比如 4.5,那么动画将循环 4.5 次后过渡到下一个动画 | - |
Fixed Duration(固定持续时间) | 选中后,下方的 Trnaition Duration 过渡持续时间将以秒为单位解读过渡时间;若不选中,则以百分比解读过渡时间 | - |
Transition Duration(s/%)(过渡持续时间) | 从该状态切换到下一状态的过渡动画持续的时间,对应下方两个蓝色箭头包裹区域 | - |
Transition Offset(过渡偏移) | 过渡到目标状态的起始播放的时间偏移。如果是 0 则从要切换到的目标状态开头开始播放,如果是 0.5 则从要切换到的目标状态的一半开始播放,可理解为切入下一个状态的切入点 | - |
Interruption Source(中断源) | 该过渡中断的情况: None:不在添加任何过渡 Current State:将当前状态过渡排队 Next State:使下一个状态的过渡进行排队 Current State Then Next State:将当前状态过渡和下一个状态过渡依次排队 Next State Thne Current State:将下一状态过渡和当前状态过渡依次排队 |
- |
Ordered Interruption(有序中断) | 当前过渡是否可在不考虑顺序的情况下被其它过渡中断: 选中时,找到有效过渡或当前过渡时,会中断 不选中时,找到有效过渡,会中断 |
- |
Conditions(过渡条件) | 如果没有过渡条件,只会考虑 Exit Time | - |
Can Transition To self(是否可以过渡到自己) | 是否可以过渡到自己,一般取消勾选 | - |
Preview source state(预览源状态) | 预览各种过渡状态,可以查看从任意状态切换到当前状态的过渡效果 | - |
动画分层和遮罩
参数 | 描述 | 选项及说明 |
---|---|---|
Weight(权重) | 当动画同时播放且为叠加状态时,根据权重决定叠加的比例 | - |
Mask(动画遮罩) | 该层动画全部受此遮罩影响,需创建遮罩文件并赋值给该参数。遮罩文件可设置不受影响的区域,动画播放时该区域无效果,类似模型文件 Animation 页签下的选项效果,但只影响这一层 | - |
Blending(混合方式) | Override:覆盖方式,播放该层动画时忽略其他层信息 Additive:叠加方式,会和其它层动画叠加播放 |
- |
Sync(是否同步其它层) | 主要用于直接从另一个层复制状态过来并在该层中修改。适用于正常状态和受伤状态等动作改变的情况。选择后会多一个 Source Layer 表示要复制哪一层的状态,如复制普通层 1 并修改动画选项为蹲下的待机和走路,调大这一层的权重就会播放蹲下的待机和走路 | - |
Timing(源层) | 当选中 Sync 同步其它层时激活。 选中:采用折中方案调整同步层上的动画时长(基于权重计算) 不选中:动画时长将使用原始层做为母版 |
- |
IK Pass(IK 处理) | 反向动力学 | - |
动画融合树
动画 1D 混合
参数 | 描述 | 选项及说明 |
---|---|---|
Parameter(参数) | 用于控制混合的参数,在参数列表中的参数。蓝色图像可控制 n 个动画的阈值,调整红色指针可在预览窗口查看动画混合情况 | 例如,调整代表 Speed 参数数值的红色指针,0 时动画完全是默认,0.25 是走路和默认结合,0.5 是完全走路,0.75 是走路和跑步结合各一半,1 是完全跑步 |
Motion(关联的动画列表) | 可使用鼠标改变顺序 | - |
Threshold(对应动作的临界阈值) | 当等于这个值时动作权重最大(完全播放该动作),数值范围不定,需取消勾选 Automate Thresholds 才能手动设置 | - |
控制动作的播放速度 | - | - |
是否镜像动作 | - | - |
Automate Thresholds(是否自动设置阈值) | 会在取值范围内平均分,一般取消勾选以手动控制更准确 | - |
Compute Thresholds(计算阈值的方式) | 从动画剪辑的根运动中获取数据,包括 Speed(速度)、Velocity X、Y、Z(xyz 上的分速度)、Angular Speed(Rad 、Deg)(角度或者弧度表示的角速度) | 例如,动画剪辑行走动画时 Speed 速度是 1.5 个单位每秒,慢跑是 2.3 个单位每秒,快跑是 4 个单位每秒,阈值就会根据这些值来进行设置进行混合 |
Adjust Time Scale(调整时间刻度) | Homogeneous Speed:均匀速度 Reset Time Scale:重置时间刻度 |
- |
动画2D 混合
种类 | 描述 | 使用场景 |
---|---|---|
2D Simple Directional(2D 简单定向模式) | 运动表示不同方向时使用 | 比如向前、后、左、右走,若只有一个动作用此模式 |
2D Freeform Directional(2D 自由形式定向模式) | 运动表示不同方向时使用,可在同一方向上有多个运动 | 比如向前跑和走,若一个方向上有走路和跑步用此模式 |
2D Freeform Cartesian(2D 自由形式笛卡尔坐标模式) | 运动不表示不同方向时使用 | 比如向前走不拐弯、向前跑不拐弯、向前走右转、向前跑右转 |
Direct(直接模式) | 自由控制每个节点权重 | 一般用于做表情动作等 |
2D 混合的使用:大体上和 1D 混合相似,只是多关联了一个参数,关联的动画也多设置了一个预制。拖动蓝色框上的红点(类似 1D 混合的红色指针)或混合树的进度条可修改参数值查看效果。
模型导入
Model模型页签
Scene 场景相关设置
参数 | 描述 | 选项及说明 |
---|---|---|
Scale Factor(缩放系数) | 当模型比例不符合项目预期时,修改此值可改变模型全局比例。Unity 物理系统希望游戏世界 1 米在导入模型文件中为 1 个单位 | - |
Convert Units(转换单位) | 启用后可将模型文件定义的比例转换为 Unity 的比例 | 不同格式比例: - .fbx、.max、.jas = 0.01 - .3ds = 0.1 - .mb、.ma、.lxo、.dxf、.blend、.dae = 1 |
Import BlendShapes(导入 BlendShapes) | 是否允许 Unity 随网格导入混合形状,导入含混合形状的网格时用 Skinned MeshRenderer 组件 | 注意: - 导入混合形状需 FBX 文件有平滑组 - 若导入有法线的混合形状,需将 Blend Shape Normals 属性设为 Import 用 FBX 法线信息,或设为 Calculate 让 Unity 计算法线 |
Import Visibility(导入可见性) | 是否导入可见性,开启可从 FBX 文件读取可见性属性 | 一些 3D 建模软件对可见性属性有限制,需根据软件决定是否勾选,一般可不勾选 |
Import Cameras(导入相机) | 是否导入 FBX 文件中的摄像机,Unity 支持部分摄像机属性 | 一般不勾选 |
Import Lights(导入灯光) | 是否导入光源,支持多种光源类型和属性 | 一般不使用 |
Preserve Hierarchy(保持层次结构) | 始终创建一个显示预制体根 | 若多个 FBX 文件含同一层级空根对象,勾选可保留它们,避免层级不匹配影响动画播放 |
Sort Hierarchy By Name(按名称对层级视图排序) | 在层级窗口根据名字排序子物体 | 不启用则保留 FBX 文件定义的层级顺序 |
Meshes 网格相关设置
参数 | 描述 | 选项及说明 |
---|---|---|
Mesh Compression(网格压缩) | 设置压缩比减小网格文件大小,提高压缩比降低网格精度 | - Off:不压缩 - Low:低压缩比 - Medium:中等压缩比 - High:高压缩比 |
Read/Write Enabled(读/写已启用) | 是否开启读写网格信息 | 开启:Unity 传网格数据给 GPU 后,CPU 保留可寻址内存,可通过代码访问处理;关闭:传数据给 GPU 后,删除 CPU 可寻址内存中网格数据。开启场景: - 需要在代码中读写网格数据 - 需要运行时合并网格 - 需要使用网格碰撞器 - 需要运行时用 NavMesh 构建组件烘焙 NavMesh 等 |
Optimize Mesh(优化网格) | 确定三角形在网格中列出的顺序以提高 GPU 性能 | - Nothing:无优化 - Everything:对顶点及多边形顶点索引重新排序 - Polygon Order:仅对多边形重新排序 - Vertex Order:仅对顶点重新排序 |
Generate Colliders(生成碰撞器) | 启用后自动附加网格碰撞器导入网格 | 建议不移动的环境几何体开启,移动的几何体不开启 |
Geometry 几何体相关设置
参数 | 描述 | 选项及说明 |
---|---|---|
Keep Quads(保留四边形) | 启用后,Unity 不将 4 个顶点的多边形转为三角形 | 使用曲面细分着色器时可能需启用,顶点数超四的多边形始终转为三角形。有四边形和三角形的网格,Unity 会创建两个子网格分离它们 |
Weld Vertices(焊接顶点) | 合并空间中共享相同位置且属性相同的顶点 | 开启可减少网格顶点计数优化网格,除非想保留重复顶点用于代码处理,一般开启 |
Index Format(索引格式) | 网格索引缓冲区的大小 | 一般选 16bits,Auto 可能默认选 16bits,必要时用 32bit,16bits 通用且节约内存 |
Legacy Blend Shape Normals(旧版混合形状法线) | 启用后基于 Smoothing Angle 值计算法线 | - |
Normals(法线) | 定义如何计算法线 | - Import:从文件导入法线,文件无则用 Calculate 模式计算 - Calculate:根据 Normals Mode、Smoothness Source 和 Smoothing Angle 属性计算 - None:不计算法线 |
Blend Shape Normals(混合形状法线) | 定义如何为混合形状计算法线,仅当 Legacy Blend Shape Normals 禁用时出现 | - |
Normals Mode(法线模式) | 计算法线的模式,仅当 Normals 设为 Import 或 Calculate 时出现 | - Unweighted Legacy:2017.1 版本前计算法线的方式,之前导入的 FBX 模型默认设置 - Unweighted:法线不加权重 - Area Weighted:法线按图面面积加权重 - Angle Weighted:法线按每个图面上的顶角加权重 - Area And Angle Weighted:法线按图面面积和顶角加权重,默认选项 |
Smoothness Source(平滑度源) | 确定平滑的方式,仅当 Legacy Blend Shape Normals 禁用时出现 | - Prefer Smoothing Groups:尽可能用模型文件中的平滑组 - From Smoothing Groups:仅用模型文件中的平滑组 - From Angle:用 Smoothing Angle 值确定平滑边 - None:不拆分硬边的任何顶点 |
Smoothness Angle(平滑角度) | 控制是否为硬边拆分顶点,值越大顶点越少 | 仅当 Normals 设为 Calculate 时可用,仅用于非常光滑或复杂的模型,否则建议在 3D 建模软件中手动平滑后导入 |
Tangents(切线) | 定义如何导入或计算顶点切线,仅当 Normals 设为 Calculate 或 Import 时可用 | - Import:Normals 为 Import 时,从 FBX 文件导入顶点切线,无切线则无法用法线贴图着色器 - Calculate Legacy:用旧版算法计算切线 - Calculate Legacy With Split Tangents:用旧版算法计算切线并在 UV 图表上拆分,网格接缝影响法线贴图光照时使用 - Calculate Mikktspace:用米克特空间计算切线 - None:不导入顶点切线,无切线则无法用法线贴图着色器 |
Swap UVs(交换 UVs) | 在网格中交换 UV 通道,漫反射纹理使用光照贴图中的 UV 时使用 | - |
Generate Lightmap UVs(生成光照贴图 UVs) | 为光照贴图创建第二个 UV 通道 | - |
Rig操纵骨骼页签
Animation Type(动画类型)
类型 | 描述 |
---|---|
None(不存在动画) | 主要用于环境静态模型,如石头等。 |
Humanoid(人形模型) | 一般有头和四肢(一个头、两条腿、两只手)的模型视为人形模型,需要使用 Avatar 化身系统,绑定人体主要关节的映射关系。 - Avatar Definition(选择获取 Avatar 定义的位置): - No Avatar:没有化身系统信息。 - Create From This Model:根据此模型创建 Avatar 化身信息。 - Copy from Other Avatar:指向另一个模型上设置的 Avatar 化身信息,需指定 Source(复制另一个具有相同骨架的 Avatar 化身信息以导入其动画剪辑)。 - Skin Weights(蒙皮权重):设置影响单个顶点的最大骨骼数量。 - Standard(4 Bones)标准:使用最多 4 个骨骼产生影响,出于性能考虑,建议使用此设置。 - Custom 自定义:可设置自定义的最大骨骼数,选择后会出现以下选项: - Max Bones/Vertex:定义每个顶点的最大骨骼个数,值越大性能消耗越大。 - Max Bone Weight:设置考虑骨骼权重的最低阈值,权重计算时将忽略小于此值的内容。 - Optimize Game Objects(优化游戏对象):在 Avatar 化身系统和 Animator 动画组件中删除和存储所导入角色的游戏对象骨骼层级信息。启用后会出现 Extra Transforms to Expose 选项,角色将使用 Unity 动画系统的内部骨架,可提高动画角色的性能,一般不勾选。 - Extra Transforms to Expose(要暴露的额外变换):要公开的骨骼层级,可在下方打钩公开该骨骼层级信息。有放大镜(通过名称搜索对应骨骼信息)、Toggle All(全选或者反选)、Collapse All(全部折叠)、Expand All(全部展开)等操作。 |
Generic(通用模型,非人形模型) | 不是标准的人形模型,形状任意,如可能有 8 只腿、两个头等。这种模型主要需要设置骨骼根节点。Root Node(根节点):选择用于此 Avatar 的根节点的骨骼(仅当选择 Create From This Model 才会出现)。 |
Legacy(旧版动画类型) | 与 Unity3.x 及更早版本导入和使用动画,一般不使用。 |
Muscles&Settings(肌肉与设置)
- Muscle Group Preview(肌肉群预览):可预览不同姿势的旋转变化,观察之前的关联映射关系是否合理,主要起预览作用,可拖拽关节点查看关节旋转效果。
- Per - Muscle Settings(肌肉设置):用于设置各骨骼在旋转时的范围限制,避免在极限角度出现奇怪效果,可单独设置限制范围。
- Additional Settings(高级设置):可以设置手脚的扭转和伸展值,一般不修改。其中 Translation DoF 比较重要:
- 如果启用,将启用人形角色的移动动画,可进行骨骼的位置移动,但可能导致其他骨骼拉长。
- 如果禁用,Unity 仅使用旋转对骨骼进行动画化。启用后会提升性能消耗,因为动画需要执行额外步骤来重定向人形动画,除非动画包含角色某些骨骼的动画式移动,否则一般禁用。
- Muscles 肌肉下拉框:可重置所有设置。
CharacterController角色控制器
角色控制器的概念
角色控制器是一种用于控制角色的组件,它使角色受制于碰撞,但不会像刚体那样产生一些奇怪的表现。例如,使用刚体判断碰撞时,角色可能在斜坡上往下滑动,或者在碰撞时被撞飞等,而角色控制器能让角色表现得更加稳定。Unity 提供了专门的角色控制器组件来实现这一功能。
注意:添加角色控制器后,无需再添加刚体,并且它能检测碰撞函数和触发器函数。
角色控制器的使用
使用角色控制器时,建议取消 Animator 组件上的根运动,以避免与角色控制器的控制产生冲突,确保角色运动的稳定性和可控性。
角色控制器组件参数
参数 | 描述 | 说明 |
---|---|---|
Slope Limit(斜度限制) | 坡度度数限制,大于该值的斜坡角色无法上去 | - |
Step Offset(每步偏移量) | 台阶偏移值,单位为米,低于这个值的台阶角色才能上去,且该值不能大于角色控制器的高度 | - |
Skin Width(蒙皮宽度) | 皮肤的宽度,即两个碰撞体可以穿透彼此的最大宽度。较大的值可减少抖动,较小的值可能导致角色卡住,建议设置为半径的 10%,通俗理解为角色可以和刚体穿模的程度 | - |
MinMoveDistance(最小移动距离) | 大多数情况下为 0,可用于减少抖动 | - |
角色控制器代码控制
CharacterController.isGrounded 变量:用于判断在上次移动期间 CharacterController 是否接触地面。
// CharacterController中的isGrounded变量 是否接触了地面
// 在上次移动期间 CharacterController 是否接触地面?
if (characterController.isGrounded)
{
print("接触地面了");
}
CharacterController.SimpleMove 方法:使角色受重力作用进行移动,以指定的速度移动角色。
// CharacterController中的SimpleMove方法 受重力作用的移动
// 以 speed 移动该角色。
characterController.SimpleMove(Vector3.forward * 10 * Time.deltaTime);
CharacterController.Move 方法:让角色进行不受重力作用的移动,为 GameObject 的移动提供附加的 CharacterController 组件。
// CharacterController中的Move方法 不受重力作用的移动
// 为 GameObject 的移动提供附加的 CharacterController 组件。
characterController.Move(Vector3.forward * 10 * Time.deltaTime);
碰撞和触发检测函数
OnControllerColliderHit 函数:当角色控制器与别的碰撞器产生碰撞时调用该函数。
// 当角色控制器想要判断和别的碰撞器产生碰撞时 使用该函数
private void OnControllerColliderHit(ControllerColliderHit hit)
{
print("角色碰撞器发生碰撞" + hit.collider.gameObject.name);
}
OnCollisionEnter 方法:对于角色控制器无效,不会被调用。
// OnCollisionEnter方法对角色控制器没用
// private void OnCollisionEnter(Collision collision)
// {
// print("碰撞触发");
// }
OnTriggerEnter 方法:角色控制器可以检测触发器,当进入触发器时该方法会被调用。
private void OnTriggerEnter(Collider other)
{
print("触发器触发");
}
导航寻路系统
导航网格生成
Object 场景对象设置页签:设置参与寻路烘焙的对象。
参数 | 描述 | 选项及说明 |
---|---|---|
Sceme Filter(场景过滤器) | 配合 Hierarchy 窗口使用,筛选对象 | All:显示场景上所有对象 MeshRenderers:显示挂载的网格渲染器的对象 Terrains:显示挂载了地形脚本的对象 |
Navigation Static(导航静态物体开关) | 若想对对象进行地形数据生成,需打开此选项,打开对象上的这个开关实际是打开静态下的导航静态 | - |
Generate OffMeshLinks(生成网格连接点开关) | 用于两个地形断开但想实现跳跃过去的情况,打开对象上的这个开关实际是打开静态下的网格连接静态 | - |
Navigation Area(导航区域选择) | 配合 Areas 页签使用 | - |
Bake 导航数据烘焙页签:设置寻路网格具体信息,点击烘焙后,场景中生成的蓝色部分为可行走区域,需设置有对象为导航静态才能烘焙成功。
参数 | 描述 | 说明 |
---|---|---|
Agent Radius(代理半径) | 决定烘焙边缘精确度,控制平台可行走区域和边缘可行走区域,可理解为人物半径 | 半径越小,烘焙出来能走的地方越多 |
Agent Height(代理高度) | 决定烘焙高度精确度,控制拱桥是否可以穿越,可理解为人物高度 | 高度越小,能穿过的拱桥越多,烘焙出来能走的地方越多 |
Max Slope(最大坡度) | 斜坡度数,决定斜坡是否可以行走,影响斜坡的烘焙 | 若场景里的斜坡大于最大坡道,角色将无法上去 |
Step Height(步高) | 最小楼梯高度,决定台阶是否可以行走,影响台阶的烘焙 | 若场景里的台阶高度大于步高,角色将无法上去 |
Generated off mesh Links(生成分离网格链接) | 生成非网格连接,用于两个分开的网格之间的连接相关设置,需在 Object 场景对象设置页签中打开 Generate OffMeshLinks 生成网格连接点开关,且注意下面两个变量也要设置,否则可能不生成 | - |
Drop Height(掉落高度) | 角色可以从这个高度掉下来 | - |
Jump Distance(跳跃距离) | 决定不同平面上的跳跃距离,小于这个距离内角色可以跳过 | - |
Advanced(高级) | Manual Voxel Size(手动设置立体像素大小):开启后可设置立体像素大小,控制烘焙的准确度,立体像素大小描述了生成的导航网格表示场景几何体的准确程度。注意立体像素大小减半会使内存使用量增加 4 倍,构建时间也增加 4 倍,一般情况下不需要修改,除非想要极其准确的导航网格 Voxel Size(像素大小):配合 Manual Voxel Size 使用 Min Region Area(最小区域面积):当面积小于此处值的导航网格区域会被移除 Height Mesh(高度网格构建开关):主要用来解决楼梯烘焙为斜坡时,希望在楼梯表面的位置准确放置在楼梯平面上,而不是斜坡上,启用它会增加烘焙时间 |
- |
Areas 导航地区页签:设置对象的寻路消耗,配合 Object 页签使用。
参数 | 描述 | 说明 |
---|---|---|
Name(区域名字) | 区域的名称 | - |
Cost(成本 寻路消耗) | 寻路消耗,可以自己新加一个导航区域,然后去 Object 页签选择 | 调高寻路消耗成本会影响寻路结果,例如将水的寻路消耗调高,对象就会绕着水路走 |
NavMeshAgent
NavMeshAgent 组件参数
- Agent Type(代理类型):配合 Agents 页签使用。
- Base Offset(基础偏移值):相对对象轴心点的高度偏移,即改变圆柱体位置。
Steering(转向 移动设置)
参数 | 描述 | 说明 |
---|---|---|
Speed(寻路时的最大移动速度) | 寻路时的最大移动速度(世界单位/秒) | - |
Angular Speed(寻路时转身的最大旋转速度) | 寻路时转身的最大旋转速度(度/秒) | - |
Acceleration(最大加速度) | 最大加速度(世界单位/平方秒) | - |
Stopping Distance(停止距离) | 当靠近目标点多少距离时,停止运动 | - |
Auto Braking(自动制动) | 启用后,当到达目标时将减速,若存在连续移动(如巡逻移动)建议不要开启该选项 | - |
Obstacle Avoidance(障碍躲避 避障设置)
参数 | 描述 | 说明 |
---|---|---|
Radius(半径) | 用于计算障碍物和其它寻路对象之间的碰撞 | - |
Height(高度) | 通过头顶障碍物时用于计算高度间隙使用 | - |
Quality(障碍躲避品质) | 越高躲避障碍越准确,但性能消耗较大。若不想主动避开其它动态障碍,可设置为无,则只会解析碰撞 | - |
Priority(优先级) | 0~99,避障时,数字较小的障碍物表示较高的优先级,优先级低的会忽略避障 | - |
Path Finding(寻路 路径寻找规则)
参数 | 描述 | 说明 |
---|---|---|
Auto Traverse OffMesh Link(自动通过分离网格连接) | 是否开启自动遍历网格外的其它网格连接,若要自定义判断,则关闭此功能 | - |
Auto Repath(自动重新寻路) | 是否开启自动重设路线,开启后,当到达路径后段时会再次尝试寻路,当没有到达目标的路径时,会生成一条到达与目标位置最近的可达点,默认勾选 | - |
Area Mask(寻路时考虑的区域) | 若寻路时不想考虑某些区域,则取消选中,常见于塔防游戏 | - |
NavMeshAgent 代码控制
常用内容
方法/变量 | 描述 | 代码示例 |
---|---|---|
NavMeshAgent.SetDestination 方法 | 自动寻路设置目标点,传入 Vector3 变量,设置或更新目标,从而触发新路径计算 | navMeshAgent.SetDestination(targetPosition); |
NavMeshAgent.isStopped 变量 | 停止寻路,此属性持有导航网格代理的停止或恢复条件 | navMeshAgent.isStopped = true; |
不常用内容
方法/变量 | 描述 | 代码示例 |
---|---|---|
NavMeshAgent.speed 变量 | 遵循路径时的最大移动速度 | print(navMeshAgent.speed); |
NavMeshAgent.acceleration 变量 | 代理遵循某一路径时的最大加速度,以单位/秒² 表示 | print(navMeshAgent.acceleration); |
NavMeshAgent.angularSpeed 变量 | 遵循路径时的最大回转速度(以 deg/ s 为单位) | print(navMeshAgent.angularSpeed); |
NavMeshAgent.hasPath 变量 | 代理当前是否有路径(只读) | if (navMeshAgent.hasPath) { ... } |
NavMeshAgent.destination 变量 | 代理目标点,可以设置也可以得到,获取代理在世界坐标系单位中的目标或尝试设置代理在其中的目标 | Vector3 target = navMeshAgent.destination; |
NavMeshAgent.path 变量 | 获取和设置当前路径的属性 | NavMeshPath currentPath = navMeshAgent.path; |
OffMeshLink
参数 | 描述 | 选项及说明 |
---|---|---|
Start(起始点) | 连接的起始位置 | - |
End(结束点) | 连接的结束位置 | - |
Cost Override(成本覆盖) | 覆盖消耗值。若为负数或 0,则使用所属 Area 区域中的消耗值,即两岸上烘焙区域的寻路成本;若为正数,则使用 Area 区域寻路消耗值乘以该正数作为该连接点的寻路消耗,可自定义连接点的寻路消耗 | 主要用于解决当存在“步行”路径和连接点都能到达某一目标时的路径选择问题。例如有两个连接桥,可通过比较该参数,优先选择成本消耗更低的路径 |
Bi Directional(双向) | 是否开启双向连接点。开启后连接可从 Start 到 End,也能从 End 到 Start;关闭时则只能从 Start 到 End | - |
Activated(已激活) | 是否启用该连接点。若关闭,自动寻路时该连接点相当于失效 | - |
Auto Update Positions(是否自动更新位置) | 如果启用,当开始和结束位置改变时,导航网格也将更新;如果不启用,即使改变了开始和结束位置,仍会按照刚开始的位置进行计算,主要用于运行时修改路径 | - |
NavMeshObstacle
参数 | 描述 | 选项及说明 |
---|---|---|
Shape(动态障碍的形状) | 动态障碍物的形状类型 | Capsule:胶囊 Box:盒装 |
Carve(切割 是否开启雕刻功能) | 是否开启雕刻功能。开启后,障碍物会在导航网格中挖一个孔,生成对应的网格信息,使该区域被认为无法前往;若动态障碍物是固定不动的,建议开启,如门、木桶、栅栏等;若动态障碍物是频繁移动的,建议不开启,如汽车和玩家 | - |
Move Threshold(移动阈值) | 当障碍物移动超过该距离时,会被认为处于移动状态,进而更新移动的孔 | - |
Time To Stationary(静止时间) | 障碍物作为静止状态需要等待的时间,单位为秒。当静止时间超过该值,才会被认为真正静止 | - |
Carve Only Stationary(仅在静止时切割) | 只有在障碍物处于静止状态时才会计算孔 | - |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com