Unity核心
2D相关
图片导入设置
Unity支持的图片格式
BMP:是Windows操作系统的标准图像文件格式,特点是几乎不进行压缩,占磁盘空间大;
TIF:基本不损失图片信息的图片格式,缺点是体积大;
JPG:一般指JPEG格式,属于有损压缩格式,能够让图像压缩在很小的存储空间,一定程度上会损失图片数据,无透明通道;
PNG:无损压缩算法的位图格式,压缩比高,生成文件小,有透明通道;
TGA:支持压缩,使用不失真的压缩算法,还支持编码压缩。体积小,效果清晰,兼备BMP的图像质量和JPG的体积优势,有透明通道;
PSD:是PhotoShop(PS)图形处理软件专用的格式,通过一些第三方工具或自制工具可以直接将PSD界面转为UI界面;
其它:还支持,EXR、GIF、HDR、IFF、PICT等等,其中Unity最常用的图片格式是JPG、PNG、TGA三种格式;
纹理类型设置(Texture Type)
1.Default-默认纹理,大部分导入的模型贴图都是该类型
sRGB(Color Texture):启用可以将纹理存储在伽马空间(见下图一)中(对每一个像素做一次幂函数运算)
Alpha Source:指定如何生成纹理的Alpha通道
None:无论输入纹理是否有Alpha通道,导入的纹理都没有Alpha通道
Input Texture Alpha:输入纹理中的Alpha
From Gray Scale:从输入纹理RGB值的平均值生成Alpha
Alpha Is Transparency:启用可以避免边缘上的过滤瑕疵
2.Normal map-法线贴图格式:
法线贴图说明:就是在原物体的凹凸表面的每个点上均作法线法线就是垂直于某个点的切线的方向向量
Create From Grayscale:启用此属性可以从灰度高度贴图创建法线贴图
Bumpiness:控制凹凸程度,值越大凹凸感越强
Filtering:如何计算凹凸值
Smooth:使用标准算法生成法线贴图
Sharp:生成比标准模式更锐利的法线贴图
3.Editor GUI and Legacy GUI:一般在编辑器中或者GUI上使用的纹理
4.Sprite(2D and UI):2D游戏或者UGUI中使用的格式
Sprite Mode:图像中提取精灵图形的方式
Single:按原样使用精灵图像
Multiple:瓦片模式,如果是图集,使用该选项,可以在Sprite Editor编辑窗口自定义图片
Polygon:网格精灵模式
Pixels Per Unit:世界空间中的一个距离单位对应多少像素
MeshType:网格类型;只有Single和Multiple模式才支持
Full Rect:创建四边形,将精灵显示在四边形上
Tight:基于像素Alpha值来生成网格,更加贴合精灵图片的形状;任何小于32*32的精灵都使用FullRect模式,即使设置成Tight模式也是;
Extrude Edges:使用滑动条确定生成的网格中精灵周围流出的区域大小
Pivot:精灵图片的轴心点,Single模式才有此选项,对应九宫格布局的九个点,还可以自定义
Generate Physics Shape:启用此选项,Unity会自动根据精灵轮廓生成默认物理形状,只有Single 和Multiple模式才可使用
Sprite Editor:编辑Sprite,需要安装2D Sprite包,之后单独讲解
5.Cursor:自定义光标
6.Cookie:光源剪影格式
Light Type:应用的光源类型,一般点光源的剪影需要设置为立方体纹理,方向光和聚光灯的剪影设置为2D纹理;
Spotlight:聚光灯类型,需要边缘纯黑色纹理
Directional:方向光,平铺纹理
Point:点光源,需要设置为立方体形状
7.Lightmap:光照贴图格式
8.Single Channel:纹理只需要单通道的格式
Channel:希望将纹理处理为Alpha还是Red通道
Alpha:使用Alpha通道,不允许进行压缩
Red:使用红色通道;
图一:线性和伽马颜色空间说明
纹理形状(Texture Shape)
1.2D:2D纹理,最常用设置,这些纹理将使用到模型和GUI元素上;
2.Cube:立方体贴图,主要用于天空盒和反射探针
Mapping:如何将纹理投影到游戏对象上
Auto:根据纹理信息创建布局
6 Frames Layout:纹理包含标准立方体贴图布局之一排列的六个图像
Latitude-Longitude Layout:将纹理映射到2D维度/经度
Mirrored Ball:将纹理映射到类似球体的立方体贴图上
Convolution Type:纹理的过滤类型
None:无过滤
Specular:将立方体作为反射探针
Diffuse:将纹理进行过滤表示辐照度,可作为光照探针
Fixup Edge Seams:Convolution Type 为None 和 Diffuse下才有用。解决低端设备上面之间立方体贴图过滤错误;
纹理高级设置
高级设置主要是纹理的一些尺寸规则、读写规则、以及MipMap相关设置
1.Non-Power of 2:如果纹理尺寸非2的幂如何处理(为什么纹理要设置为2的N次方:因为图形学规则,纹理必须是2的幂尺寸)
None:纹理尺寸大小保持不变
To nearest:将纹理缩放到最接近2的幂的大小(注意:PVRTC格式要求纹理为正方形)
To larger:将纹理缩放到最大尺寸大小值的2的幂的大小
To smaller:将纹理缩放到最小尺寸大小值的2的幂的大小
2.Read/Write Enabled:启用可以使用Unity中提供的一些方法从纹理中获取到数据(一般需要获取图片数据时才开启)
3.Streaming Mipmaps:启用则可以使用纹理串流,主要用于在控制加载在内存中的Mipmap级别,用于减少Unity对于纹理所需的内存总量,用性能换内存
Mip Map Priority:Mipmap优先级,Unity根据优先级来确定分配资源时优先考虑哪些Mipmap
4.Generate Mip Maps:允许生成MipMap(开启MipMap功能后,Unity会帮助我们根据图片信息生成n张不同分辨率的图片,在场景中会根据我们离该模型的距离选择合适尺寸的图片用于渲染,提升渲染效率);
Border Mip Maps:启用可避免颜色向外渗透到较低MIP级别的边缘
Mip Map Filtering:优化图像质量的过滤方法
Box:随着尺寸减小,级别更加平滑
Kaiser:随着Mipmap尺寸大小下降而使用的锐化算法,如果远处纹理太模糊,可以使用该算法
Mip Maps Preserve Coverage:Mipmap的Alpha通道在Alpha测试期间保留覆盖率
Alpha Cutoff Value:覆盖率参考值
Fadeout Mip Maps:级别递减时使Mipmap淡化为灰色
纹理平铺拉伸设置
Wrap Mode:平铺纹理时的方式
Repeat:在区块中重复纹理
Clamp:拉伸纹理的边缘
Mirror:在每个整数边界上镜像纹理以创建重复图案
Mirror Once:镜像纹理一次,然后将拉伸边缘纹理
Per-axis:单独控制如何在U轴和V轴上包裹纹理
Filter Mode:纹理在通过3D变化拉伸时如何进行过度
Point:纹理在靠近时变为块状
Bilinear:纹理在靠近时变得模糊
Trilinear:与Bilinear类似,但纹理也在不同的Mip级别之间模糊
Aniso Level:以大角度查看纹理时提高纹理质量。性能消耗高
纹理平台打包设置(非常重要)
1.Max Size:设置导入的纹理的最大尺寸,即使美术出的很大的图,也可以通过这里把它们限制在一定范围内
2.Resize Algorithm:当纹理尺寸大于指定的Max Size时,使用的缩小算法
Mitchell:默认米切尔算法来调整大小,该算法是常用的尺寸缩小算法
Bilinear:使用双线性插值来调整大小。如果细节很重要的图片,可以使用它,它比米切尔算法保留的细节更多
Format:纹理格式(各平台支持的格式有所不同,如果选择Automatic,会根据平台使用默认设置)
都支持的格式:下图一
移动端和网页端特有格式:下图二
不同平台单独进行设置:
IOS:选择默认的纹理压缩设置 (PVRTC) 可获得更大的兼容性。如果您的应用程序不包含 OpenGL ES 2 支持,则可以选择一种 ASTC 格式。这些格式提供更好的质量和灵活性,并且压缩速度比 PVRTC 快。
Andorid:推荐如下图三
由于安卓设备众多,设备标准都不同意,一般会根据不同的设备标准制作多个安装包;
构建一个以 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。
3.Compression:选择纹理的压缩类型,帮助Unity正确选择压缩格式,会根据平台和压缩格式的可用性进行压缩;
None:不压缩纹理
Low Quality:以低质量格式压缩纹理
Normal Quality:以标准格式压缩纹理
High Quality:以高质量格式压缩纹理
4.Use Crunch Compression:启用后,使用Crunch压缩,Crunch是一种基于DXT或ETC纹理压缩的有损压缩格式。压缩时间长,解压速度快;
Compressor Quality:压缩质量条,质量越高意味着纹理越大,压缩事件越长。
5.Split Alpha Channel:Alpha通道分离,节约内存。会把一张图分成两张纹理。一张包含RGB数据,一张包含Alpha数据,在渲染时再合并渲染。
6.Override ETC2 fallback:不支持ETC2压缩的设备上,使用的格式。
图一:都支持的格式
图二:移动端和网页端特有格式
图三:移动端和网页端特有格式
Sprite
Sprite Editor
1.Single图片编辑:
右下角设置窗口:
Name:名字
Position:在图片中的偏移位置和宽高
Border:边框,用于设置九宫格的4条边
Pivot:轴心(中心)点位置
Pivot Unit Mode:轴心点单位模式
Normalized:标准化模式,0~1
Pixels:像素模式
Custom Pivot:自定义轴心点
(OutLine)自定义边缘线和(Physics)自定义物理形状:
Snap:将控制点贴近在最近的像素
Outline Tolerance:轮廓点的复杂性和准确性,0~1值越大轮廓点越多,越准确
Generate:生成网格轮廓
//1.Sprite Editor
// 基础图片设置(右下角窗口)
// 主要用于设置单张图片的基础属性
//2.Custom Outline(决定渲染区域)
// 自定义边缘线设置,可以自定义精灵网格的轮廓形状
// 默认情况下不修改都是在矩形网格上渲染,边缘外部透明区域会被渲染,浪费性能
// 使用自定义轮廓,可以调小透明区域,提高性能
//3.Custom Physics Shape(决定碰撞判断区域)
// 自定义精灵图片的物理形状,主要用于设置需要物理碰撞判断的2D图形
// 它决定了之后产生碰撞检测的区域
//4.Secondary Textures(为图片添加特殊效果)
// 次要纹理设置,可以将其它纹理和该精灵图片关联
// 着色器可以得到这些辅助纹理然后用于做一些效果处理
// 让精灵应用其它效果
2.Multiple图集元素分割:
自动分割(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:行列数
3.Polygon多边形编辑:
Sprite Editor - Unity 手册 (unity3d.com)
Sprite Renderer
所有2D游戏中游戏资源(除UI外)都是通过Sprite Renderer让我们看到的。
参数讲解:
1.Sprite:渲染的精灵图片
2.Color:定义着色,一般没有特殊需求不会修改
3.Filp:水平或竖直翻转精灵图片
4.Draw Mode:绘制模式,当尺寸变化时的缩放方式
Simple:简单模式,缩放时整个图像一起缩放
Sliced:切片模式,9宫格切片模式,十字区域缩放,4个角不变化,一般用于变化不大的纯色图(注意:需要把精灵的网格类型设置为Full Rect)
Tiled:平铺模式,将中间部分进行平铺而不是缩放(注意:需要把精灵的网格类型设置为Full Rect)
Continuous:当尺寸变化时,中间部分将均匀平铺
Adaptive:当尺寸变化时,类似Simple模式,当更改尺寸达到Stretch Value时,中间才开始平铺
5.Mask Interaction:与精灵遮罩交互时的方式
None:不与场景中任何精灵遮罩交互
Visible inside Mask:精灵遮罩覆盖的地方可见,而遮罩外部不可见
Visible Outside Mask:精灵遮罩外部的地方可见,而遮罩覆盖处不可见
6.Sprite Sort Point:计算摄像机和精灵之间距离时,使用精灵中心Center还是轴心点Pivot,一般情况下不用修改
7.Material:材质,可以使用一些自定义材质来显示一些特殊效果,一般情况不修改。默认材质是不会受到光照影响的,如果想要受光照影响,可以选择Default-Diffuse
8.Additional Settings:高级设置
Sorting Layer:排序层选择
Order in Layer:层级序列号,数值越大约会显示在前面
Sprite Renderer - Unity 手册 (unity3d.com)
API:
知识点一 代码设置
GameObject obj = new GameObject();
SpriteRenderer sr = obj.AddComponent<SpriteRenderer>();
//动态的改变图片
sr.sprite = Resources.Load<Sprite>("dead1");
//动态的加载 图集中的图
Sprite[] sprs = Resources.LoadAll<Sprite>("RobotBoyIdleSprite");
sr.sprite = sprs[10];
UnityEngine.SpriteRenderer - Unity 脚本 API (unity3d.com)
Sprite Creator
我们可以利用Sprite Editor的多边形工具创造出各种多边形,Unity也为我们提供了现成的一些多边形,它的主要作用是2D游戏的替代资源,在等待美术出资源时我们可以用他们作为替代品,有点类似Unity提供的自带几何体(在Project窗口右键创建各种形状的Sprite精灵图片).
Sprite Creator - Unity 手册 (unity3d.com)
Sprite Mask
1.Sprite:遮罩图片;
2.Alpha Cutoff:如果Alpha包含透明区域和不透明区域之间的混合(半透明),则可以手动确定所显示区域的分界点(0~1);
3.Custom Range:自定义遮罩范围,开启后可以设置遮罩的范围,按照排序层来划分;
UnityEngine.SpriteMask - Unity 脚本 API (unity3d.com)
Sorting Group
顾名思义,SortingGroup是排序分组的意思,它的主要作用就是对多个精灵图片进行分组排序,Unity会将同一个排序组中的精灵图片一起排序,就好像他们是单个游戏对象一样,主要作用是对于需要分层的2D游戏用于整体排序。
Rendering.SortingGroup - Unity 脚本 API (unity3d.com)
Sprite Atlas精灵图集制作
在工程设置面板中打开功能:Edit——>Project Setting——>Editor(Sprite Packer(精灵包装器,可以通过Unity自带图集工具生成图集));
Disabled:默认设置,不会打包图集;
Enabled For Build:Unity进在构建时打包图集,在编辑器模式下不会打包;
Always Enabled:Unity在构建时打包图集,在编辑模式下运行前会打包图集;
1.打图集面板参数相关
1.Type:图集类型
Master:主图集
Include in Build:选中可以在当前构建中包含图集
Allow Rotation:选中此选项将在打包图集时对图片元素进行旋转,可以最大限度提高组合后的图集密度;注意!!!如果是UI图集,请禁用此选项,因为打包时会将场景中UI元素旋转
Tight Packing:选中此选项在打包图集时使用图片轮廓来打包而不是根据矩形,可以最大限度提高组合后的图集密度
Padding:图集中各图片的间隔像素
Variant:变体类型的图集
Master Atlas:关联的主图集(图集类型必须是Master)
Include in Build:选中可以在当前构建中包含图集
Scale:设置变体图集的缩放因子(0~1),变体图集的大小是主图集乘以Scale的结果(变体图集的主要作用是以主图集为基础,对它进行缩放产生一个新的图集副本。如果想使用变体图集中的内容,只需要勾选变体图集的Include in build选项,而主图集禁用此选项即可)
2.Read/Write Enabled:允许通过脚本访问纹理数据。如果启用,会创建纹理数据的副本。会让内存翻倍,一般情况下不需要开启它
3.Generate Mip Maps:勾选它会生成Mipmap;Mipmap是一种性能优化手段,用内存换性能。一般情况下不用开启
4.SRGB:启用此属性可指定将纹理存储在伽马空间中。对于非 HDR 颜色纹理(例如反照率和镜面反射颜色),应始终选中此复选框。如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。默认情况下会启用此属性。
5.Filter Mode:纹理在3D变化拉伸时如何进行过滤
Point:纹理靠近时变为块状
Bilinear:纹理靠近时变得模糊
Trilinear:与Bilinear类似,但是纹理在不同的MIP级别之间模糊
6.Objects for Packing:关联需要打图集的图片们,注意:一定是Sprite类型的图片
7.Default:
Max Texture Size:纹理的最大尺寸,像素为单位
Format:指定纹理的内部表示,在不同平台上会有不同的参数
Compression:纹理压缩类型(质量越高占用内存越多,不压缩质量最好)不压缩、低质量、普通质量、高质量;
Use Crunch Compression:使用Crunch压缩,是一种有损压缩格式,压缩耗时长,但是运行时解压速度快
Compressor Quality:压缩质量,质量越高纹理越大,耗时越长
2.API使用
知识点一 代码控制
GameObject obj = new GameObject();
SpriteRenderer sr = obj.AddComponent<SpriteRenderer>();
//加载图集资源
SpriteAtlas spriteAtlas = Resources.Load<SpriteAtlas>("MyAtlas");
//加载图集资源中的某一张小图
sr.sprite = spriteAtlas.GetSprite("dead1");
U2D.SpriteAtlas - Unity 脚本 API (unity3d.com)
2D物理系统
刚体
1.刚体类型参数说明:
1.Dynamic:动态类型(受重力和力的影响移动和旋转)
Material:物理材质,在刚体上设置了物理材质,如果子物体有碰撞器但是没有设置材质则会通用刚体的物理材质,如果不设置,将使用在Physics 2D窗口中设置的默认材质
物理材质的使用优先级:2D碰撞器上指定的2D物理材质、2D刚体上指定的2D物理材质、Physics 2D窗口指定的2D默认物理材质
Simulated:如果希望2D刚体以及所有子对象2D碰撞器和2D关节都能模拟物理效果,需要启用该选项;
Use Auto Mass:是否使用自动质量
Mass:质量
Linear Dray:影响位置移动的阻力系数
Angular Drag:影响旋转移动的阻力系数
Gravity Scale:受重力影响的程度
Collision Detection:碰撞检测算法
Discrete:离散检测算法,只会用新位置进行计算,速度过快时会穿过
Continuous:连续检测算法,计算量更大,但是不会发生穿过的情况
Sleeping Mode:对象处于静止状态时进入睡眠模式
Never Sleep:从不休眠,会一直进行检测计算,性能消耗较大
Start Awake:最初处于唤醒状态
Start Asleep:最初处于睡眠状态,但是可以被碰撞唤醒
Interpolate:物理更新间隔之间的插值运算
None:不应用移动平滑
Interpolate:根据前一帧进行平滑处理
Extrapolate:根据后一帧位置进行平滑处理
Constraints:约束限制,可以让某一个轴不受力影响位移或者旋转
2.Kinematic:运动学类型,不受力的影响,只能通过代码让其动起来,能和Dynamic 2D刚体产生碰撞,但是不会动,只会进入碰撞检测函数,因此它没有了质量莫摩擦系数等属性,因此它的性能能消耗较低,主要会通过代码来处理其移动旋转;
Simulated:如果希望2D刚体以及所有子对象2D碰撞器和2D关节都能模拟物理效果,需要启用该选项当启用时,会充当一个无限质量的不可移动对象,可以和所有2D刚体产生碰撞,如果Use FullKinematic Contacts禁用,它只会和Dynamic 2D刚体碰撞;
Use Full Kinematic Contacts:如果希望能和所有2D刚体碰撞,启用它,如果不启用,它不会和Kinematic 2D和Static 2D刚体碰撞
3.Static:静态类型完全不动的需要检测碰撞的对象,相当于是无限质量不可移动的对象,它的性能消耗最小,它只能和Dynamic 2D刚体碰撞(和只加碰撞体的区别),和它类似的有只加碰撞器而不加刚体的物体,它们会和刚体物体产生碰撞,但是自己不会动;
2D 刚体 - Unity 手册 (unity3d.com)
2.刚体API说明:
知识点一 刚体API(参考刚体3D)
//加力
Rigidbody2D rigid = this.GetComponent<Rigidbody2D>();
rigid.AddForce(new Vector2(0, 100));
//速度
rigid.velocity = new Vector2(1, 0);
UnityEngine.Rigidbody2D - Unity 脚本 API (unity3d.com)
碰撞体
1.碰撞体参数相关:
1.圆形碰撞器(Circle):
Material:一种物理材质,用于确定碰撞的属性,控制摩擦和弹性
Is Trigger:是否是触发器
Used By Effector:是否被附加的2D效应器使用
Offset:圆心偏移位置
Radius:圆形的半径
2.盒状碰撞器(Box):
`Used by Composite:如果勾选,则该碰撞器将附加到2D复合碰撞器使用(勾选后一些属性只能在复合碰撞器中配置)
Auto Tiling:如果渲染器组件的Draw Mode设置为Tiled模式,勾选该选项,当改变精灵大小时将自动更新碰撞器尺寸;
Size:矩形的宽高
Edge Radius:使四个顶点为圆角
3.多边形碰撞器(Polygon)
Points:多边形顶点虽然可以手动修改,但是一般情况下 我们通过数值编辑太复杂了,都通过Edit Collider编辑,或者让Unity自动识别创建
4.边界碰撞器(Edge地形):边界碰撞器的编辑主要还是通过Edit Collider一般不会手动去通过数值加点
5.
5.胶囊碰撞器(Capsule)
Size:胶囊的宽高
Direction:是竖直胶囊还是水平胶囊
6.复合碰撞器(Composite必须配合刚体使用)
Geometry Type:几何学类型,合并碰撞体时,碰撞体顶点将组合为两种不同的几何体类型
Outlines:空心轮廓,类似边界碰撞器
Polygons:实心多边形,类似多边形碰撞器
Generation Type:生成类型,复合碰撞器在何时生成新几何体
Synchronous:对2D复合碰撞器或使用的其它碰撞器修改时,Unity立即生成新几何体
Manual:手动生成新几何体,通过代码生成或者点击下发的Regenerate Geometry生成按钮
Vertex Distance:从复合碰撞器收集顶点时允许的最小间距值
2D 碰撞体 - Unity 手册 (unity3d.com)
2.碰撞器API:碰撞检测函数 和 3D碰撞检测函数除了名字不同外其他基本一致:
知识点一 碰撞检测函数
private void OnCollisionEnter2D(Collision2D collision)
private void OnCollisionExit2D(Collision2D collision)
private void OnCollisionStay2D(Collision2D collision)
private void OnTriggerEnter2D(Collider2D collision)
private void OnTriggerExit2D(Collider2D collision)
private void OnTriggerStay2D(Collider2D collision)
物理材质
物理材质的使用优先级:2D碰撞器上指定的2D物理材质、2D刚体上指定的2D物理材质、Physics 2D窗口指定的2D默认物理材质
物理材质参数相关:
Friction:摩擦系数,为0表示没有摩擦力
Bounciness:反弹程度。0表示没有弹力,1表示完美弹力(没有能量损失一直弹)
恒定力(了解即可)
恒定力(Constant Force)参数说明:
Force:物理更新时施加于2D刚体上的线性力
Relative Force:物理更新时施加的线性力(相对刚体对象坐标系)
Torque:物理更新时施加于2D刚体的扭矩力
效应器(Effector)
效应器参数相关:
1.区域效应器(Area):在一个区域内让游戏对象受到力和扭矩力的作用(作浮力和电梯传送带)
Use Collider Mask:是否启用碰撞器遮罩,如果开启才会出现下面的Collider Mask,可以通过选择层,决定该效应器只会作用于哪些层的对象
Use Global Angle:勾选将使用世界坐标系角度,如果不勾选,角度为局部角度
Force Angle:施加力的角度
Force Magnitude:施加力的大小
Force Variation:施加力的随机大小变化 会在Force Magnitude基础上根据该值进行随机变化
ForceTarget:效应器在目标对象上施加力的作用点
Collider:以碰撞器的当前位置(如果碰撞器有偏移,没有位于质心,可能会产生扭矩力,带来旋转)
Rigidbody:以刚体的当前质心(不会产生扭矩力)
Drag:阻力
Angular Drag:扭矩阻力
2.浮力效应器(Buoyancy):模拟流体行为,浮动和阻力相关设置,让玩家在该区域看起来像在水里移动
Density:流体密度,密度较大,碰撞体会下沉,密度越小碰撞体会上浮,密度和流体相同的碰撞体会浮在流体中
Surface Level:定义浮力流体的表面位置,对象高于此线时,不会对其施加浮力,以下或者相交会施加浮力。沿世界Y轴偏移
Linear Drag:影响对象在水中移动的阻力系数
Angular Drag:影响对象在水中旋转的阻力系数
Flow Angle:流体流动方向相对世界控件的角度,沿指定方向施加浮力
Flow Magnitude:与FlowAngle结合使用,前者决定力的角度,该值确定浮力大小
Flow Variation:随机改变流体力的值
3.点效应器:模拟磁铁 吸引或者排斥的效果
Force Magnitude:施加力的大小
Force Variation:施加力的大小变化
Distance Scale:效应器和目标之间举例的缩放。计算距离时,会按该比值对距离进行缩放
Force Source:力源来自哪个位置,从该点计算距离。
Collider:碰撞器的位置
Rigidbody:刚体的位置
Force Target:作用力目标位置,用改点计算位置
Collider:碰撞器的位置,如果碰撞器有偏移,可能会产生扭矩力
Rigidbody:刚体的位置,不会产生扭矩力
Force Mode:计算力的模式
Constant:忽略源和目标之间相隔的距离
Inverse Linear:反线性距离计算,距离越远,力的大小呈线性减小
Inverse Squared:反平方距离计算,力的大小呈指数减小(按平方下降),类似现实世界重力
4.平台效应器(Platform):2D游戏当中的平台或可往上跳跃的墙壁
Rotational Offset:旋转偏移量,控制平台角度偏移
Use One Way:是否使用单向碰撞行为
Use One Way Grouping:当平台式有多个碰撞器组合时,可以通过它将所有碰撞器设置为单向碰撞行为
Surface Arc:以局部坐标系下向上的方向为中心,填写一个角度值,定义不允许通过的表面,该角度外的其它地方视为单向碰撞
Use Side Friction:是否应该在平台两侧使用摩擦
Use Side Bounce:是否应该在平台两侧使用弹性
Side Arc:用于定义左右两侧平台的响应弧度
5.表面效应器(Surface):模拟传送带
Speed:表面保持的速度
Speed Variation:速度的随机增加值
Force Scale:缩放沿表面移动时施加的力。如果是0表示不施加力,相当于禁用。值越低越慢,值越高越快,建议不要设置为1,因为当设置为1时可能会抵消施加在物体上的其它力,比如跳跃的力
Use Contact Force:是否对接触物体表面的出点施加力,如果选择会让对象旋转,如果不开启则不会旋转
Use Friction:是否使用摩擦力
Use Bounce:是否使用弹力
2D 效应器 - Unity 手册 (unity3d.com)
SpriteShape
SpriteShape是精灵形状的意思(在Package Manager中导入相关工具),它主要是方便我们以节约美术资源为前提,制作2D游戏场景地形或者背景的。
类型:开放不封闭的图形、封闭的图形;
Sprite Shape Profile精灵形状概述文件
Sprite Shape Profile精灵形状概述文件配置:
Use Sprite Borders:是否使用精灵边框,用于九宫格拉伸
Texture:用于填充实心部分的纹理(使用的纹理的平铺模式必须是Repeat重复模式)
Offset:纹理偏移量
Angle Ranges:角度范围( 这里的设置主要用于封闭图形在不同角度范围内使用的图片不同,可以达到一个封闭效果)
Start:起始角度
End:结束角度
Order:Sprite相交时的优先级,优先级高的显示在前面
Sprites:指定角度范围内的精灵列表,在该角度范围内,可以选择使用的图片资源
Corners:指定角显示的精灵图片,主要用于封闭图形,外部四个角用的图片,内部四个角用的图片
Sprite Shape Renderer和Sprite Shape Controller精灵形状渲染器和控制器
Sprite Shape Renderer - Unity 手册 (unity3d.com)
参数相关:
1.Sprite Shape Renderer精灵形状渲染器:该控件主要是控制 材质 颜色 以及和其它Sprite交互时的排序等等信息
Color:颜色
Mask Interaction:遮罩相互作用规则设置
Fill Material和Edge Material:填充材质和边缘材质
Sorting Layer和Order in Layer:排序相关
2.Sprite Shape Controller精灵形状控制器:
Profile:使用的精灵形状概述文件
Detail:精灵形状的质量(高中低三种质量)
Is Open Ended:是否是开放的,不封闭的
Adaptive UV:自适应UV,如果开启,会自动帮助我们判断是平铺还是拉伸,开启后只有宽度够才会平铺,如果宽度不够会拉伸,不开启始终平铺,但是可能会出现裁剪效果,一般根据你的实际效果进行选择;
Optimize Geometry:优化三角形数量,勾选后会最小化精灵图形中的三角形数量
Enable Tangents:是否启用切线计算功能(如果你的着色器中需要切线信息参与计算,则勾选)
Corner Threshold:角阈值,当拐角处的角度达到这个阈值时将使用角图片
Stretch UV:是否拉伸UV,如果勾选纹理的UV将伸展到整个精灵形状的直线上
Pixel Per Unit:禁用拉伸UV时才有,Unity单位对应多少像素,较高的值会较少纹理的大小
Worldspace UV:根据世界控件的UV填充纹理
启用编辑状态后:
Tangent Mode :切线模式(从左至右依次是)
顶点模式-点两侧不构成曲线
切线模式-点两侧构成曲线,并且可以控制切线弧度
左右切线模式-点两侧构成曲线,并且可以分别控制左右两侧切线弧度
Position:选中点的局部坐标位置
Height:控制点左右两侧精灵图片的高度
Corner:是否使用角度图片
Disabled:不使用角度图片
Automatic:自动
Sprite Variant:选择使用的精灵图片
Snapping:是否开启捕捉设置控制点
Tilemap(过后再来学)
动画基础
Animation动画窗口
面板左侧(说明):
顶部从左至右:
1.预览模式(开关)
2.录制模式(开关)打开后预览模式默认开启
3.回到动画开头
4.上一关键帧(快捷键:键盘逗号)
5.播放动画(快捷键:键盘Alt+逗号)
6.下一关键帧(快捷键:键盘句号)
7.回到动画结尾(快捷键:键盘Alt+句号)
8.当前处于第几帧
底部Dopesheet:关键帧模式
底部Curves:曲线模式
中部从左至右:
按选择筛选
添加关键帧
添加事件
面板左侧(操作):
多出一个可以选择当前动画的下拉列表:可以在这里创建新动画和切换动画
多出一个可以添加变化属性的按钮:在这里你可以任意添加你想要在动画中变化的脚本变量
面板右侧(说明):
动画时间轴面板:当编辑动画时,会在该面板上编辑关键帧等信息
右侧面板(操控):
时间轴可以拖动(注意):时间轴上的单位为n秒n帧,一格代表一帧(并不是秒)
选择关键帧右键:
Add Key:添加关键帧
Delete Key:删除关键帧
Clamped Auto:切线模式,自动设置切线
Auto:旧版切线模式,和Clamped Auto基本类似,主要用于老动画系统,建议不使用除非是老动画
Free Smooth:自由设置切线
Flat:切线设置为水平
Broken:单独控制左右曲线切线
Free:自由设置
Linear:直线
Constant:常量切换
Weighted:权重切换
使用 Animation 视图 - Unity 手册 (unity3d.com)
Animation老动画组件
在创建动画之前为对象添加Animation组件之后再制作动画,这时制作出的动画和之前的动画格式是有区别的。
Animation组件参数相关:
Animation组件:默认播放的动画
Animations:该动画组件可以控制的所有动画
Play AutoMatically:是否一开始就自动播放默认动画
Animate Physics:动画是否与物理交互
Culling Type:决定什么时候不播放动画
Always Animate:始终播放
Based On Renderers:基于默认动画姿势剔除
老动画Animation文件参数相关:
Default:读取设置得更高的默认重复模式
Once:播放一次就停止
Loop:从头到尾不停循环播放
PingPong:从头到尾从尾到头不停播放
ClampForever:播放结束会停在最后一帧,并且会一直播放最后一帧(相当于状态不停止),表现效果和Once一样,但是逻辑处理上不同;
老Animation组件API
知识点一 代码控制播放
//1.播放动画
animation.Play("1");
//2.淡入播放,自动产生过渡效果
//当你要播放的动画的开始状态 和当前的状态 不一样时
//就会产生过渡效果
animation.CrossFade("3");
//3.前一个播完再播放下一个
animation.PlayQueued("2");
animation.CrossFadeQueued("2");
//4.停止播放所有动画
animation.Stop();
//5.是否在播放某个动画
if( animation.IsPlaying("1") )
//6.播放模式设置
animation.wrapMode = WrapMode.Loop;
//7.其它(了解即可,新动画系统中会详细讲解)
//层级和权重以及混合(老动画系统需要通过代码来达到动画的遮罩、融合等效果)
//设置层级
animation["1"].layer = 1;
//设置权重
animation["1"].weight = 1;
//混合模式 叠加还是混合
animation["1"].blendMode = AnimationBlendMode.Additive;
//设置混组相关骨骼信息
animation[""].AddMixingTransform();
UnityEngine.Animation - Unity 脚本 API (unity3d.com)
Animator动画控制器面板
1.左侧面板
Layers:动画层级页签,为动画添加更多的层级,层级高的动画播放会覆盖层级低的
Parameters:参数页签,为动画状态机添加控制状态切换的参数
眼睛图标:显隐左侧面板
2.右侧面板:
网格化布局区域(主要用于编辑状态之前的切换关系);1.窗口中的每一个矩形表示一个状态;2.窗口中的每一个箭头表示一个切换条件;
矩形说明:
默认三大矩形:
绿色Entry矩形:进入状态机流程
红色Exit矩形:退出状态机流程
Any State:任意状态,代表状态机中的任意状态
人为添加矩形:
橙色矩形:一开始的默认状态动画,和Entry相连,表示一开始播放的动画
灰色矩形:自己添加的某一种动作状态
Animator Controller - Unity 手册 (unity3d.com)
Animator新动画组件
Animator组件参数相关:
Controller:对应的动画控制器(状态机)
Avatar:对应的替身配置信息(之后讲解3D模型时详细讲解)
Apply Root Motion:是否启用动画位移更新
UpdateMode:更新模式(一般不修改它):
Normal:正常更新
Animate Physics:物理更新
Unscaled Time:不受时间缩放影响;
Culling Mode:裁剪剔除模式:
Always Animate:始终播放动画,即使在屏幕外也不剔除;
Cull Update Transforms:摄像机没有渲染该物体时,停止位置、IK的写入;
Cull Completely:摄像机没有渲染物体时,整个动画被完全禁用;
新动画文件(.ani)界面参数:
Loop Time:是否是循环动画(在动画结尾时重新开始)
Loop Pose:无缝循环运动
Cycle Offset:循环动画在其他时间开始时的周期偏移
Animator组件API
知识点一 Animator中的API
//我们用代码控制状态机切换主要使用的就是Animator提供给我们的API
//我们知道一共有四种切换条件 int float bool trigger
//所以对应的API也是和这四种类型有关系的
animator = this.GetComponent<Animator>();
//1.通过状态机条件切换动画
animator.SetFloat("条件名", 1.2f);
animator.SetInteger("条件名", 5);
animator.SetBool("条件名", true);
animator.SetTrigger("条件名");
animator.GetFloat("条件名");
animator.GetInteger("条件名");
animator.GetBool("条件名");
//2.直接切换动画 除非特殊情况 不然一般不使用
animator.Play("状态名");
UnityEngine.Animator - Unity 脚本 API (unity3d.com)
2D动画
序列帧动画
骨骼动画-2DAnimation
骨骼动画-Spine
3D模型导入相关
模型导出:在 Unity 外部创建资源(模型导出) - Unity 手册
Model模型页签
Model模型页签说明
1.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:是否允许Unity随网格一起导入混合形状,当导入包含混合形状的网格时,将使用Skinned MeshRenderer组件(注意:1.导入混合形状发现需要在FBX文件中具有平滑组;2.如果想要导入具有法线的混合形状;把下方的Blend Shape Normals属性设置为Import,将使用FBX文件的发现,或者把下方的Blend Shape Normals属性设置为Calculate,Unity使用相同的逻辑来计算网格和混合形状上的法线);
Import Visibility:是否导入可见性,开启后可以从FBX文件中读取可见性属性。,比如模型动作里 有些动作是要隐藏模型形象的,开启后才会生效,一些3D建模软件对可见性属性不支持或者有限制,比如Maya和Blender就对可见性有限制,所以一般这个选项要根据你使用的建模软件决定(一般可以不勾选);
Import Cameras:是否导入摄像机;
*Preserve Hierarchy:始终创建一个显示预制体根,通常在导入的时候,FBX会将模型中的空根节点进行优化去掉它,但是如果多个FBX文件中包含同一层级的空跟对象,可以勾选它来保留他们;主要作用是:比如有两个fbx文件,1包含骨骼和网格,2只包含骨骼动画。如果不启用它导入2,那么Unity将剥离根节点,会让层级不匹配让动画不能正常播放;
Sort Hierarchy By Name:在层级窗口中根据名字排序子物体,如果不启用,会保留FBX文件中定义的层级顺序;
2.Meshes网格相关设置:
*Mesh Compression-网格压缩,设置压缩比级减小网格的文件大小,提高压缩比会降低网格的精度,调整该参数可以优化游戏包的大小:
Off:不使用压缩
Low:低压缩比
Medium:中等压缩比
High:高压缩比
*Read/Write Enabled:是否开启读写网格信息,如果开启,Unity将网格数据传给GPU后,在CPU中还会保留可寻址内存,意味着我们可以通过代码访问网格数据进行处理,如果不开启,Unity将网格数据传个GPU后,会将CPU中的可寻址内存中网格数据删除,我们无法再得到网格数据,开启时,会增加内存占用,关闭时,可以节约运行时内存使用量(何时开启?;1.需要在代码中读取或写入网格数据;2.需要运行时合并网格;3.需要使用网格碰撞器时;4.需要运行时使用NavMesh构建组件来烘焙NavMesh时);
Optimize Mesh-确定三角形在网格中列出的顺序以提高GPU性能:
Nothing:无优化
Everything:对顶点以及多边形顶点索引进行重新排序
Polygon Order:仅对多边形重新排序
Vertex Order:仅对顶点重新排序
*Generate Colliders:生成碰撞器,启用后会自动附加网格碰撞器的情况下导入你的网格,建议不移动的环境几何体可以开启它,但是需要移动的几何体建议不要开启它;
3.Geometry几何体相关设置:
*Keep Quads:保留四边形,启用后,Unity不会将4个顶点的多边形转为三角形,当使用曲面细分着色器时可能需要启用此选项,因为四边形的曲面周色漆比多边形的效率更高;
*Weld Vertices:合并在空间中共享相同位置的顶点,前提是这些顶点总体上共享相同的属性(UV,法线,切线等等)(开启后相当于会通过减少网格的总数量来优化网格的顶点计数);一般都开启,除非你想有意保留这些重复顶点,之后想通过代码去获取他们来进行处理;
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 Normal:定义如何为混合形状计算法线,只有当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:不拆分硬边的任何顶点
Smoothing 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:在网格中交换UV通道。如果漫反射纹理使用光照贴图中的UV,请使用此选项
Generate Lightmap UVs:为光照贴图创建第二个UV通道
Model 选项卡 - Unity 手册 (unity3d.com)
Rig操纵骨骼页签
Animation Type-动画类型说明:
1.None-不存在动画:主要用于一些环境静态模型
2.Humanoid-人形模型,一般情况下,有头和四肢(一个头两条腿两只手)为人形,人形模型需要使用Avatar化身系统,绑定人主要关节的映射关系:
Avatar Definition:选择获取Avatar定义的位置
No Avatar:没有化身系统信息
Create From This Model:根据此模型创建Avatar化身信息
Copy from Other Avatar:指向另一个模型上设置的Avatar化身信息
Source:复制另一个具有相同骨架的Avatar化身信息以导入其动画剪辑,使用Copy From Other Avatar时才有
Configure...:打开Avatar化身配置,使用Create From This Model时才有
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:全部展开
3.Generic-通用模型,非人形模型,不是标准的人形模型,可以是任意形状,可能有8只腿两个头等等,这种模型主要需要设置骨骼根节点:
Root Node:选择用于此Avatar的根节点的骨骼(仅当选择Create From This Model才会出现)
4.Legacy-旧版动画类型与Unity3.x及更早版本导入和使用动画一般不使用:
Generation:动画导入方法
Don't Import:不导入动画
第2~4个选项:已禁用,勿使用
Store in Root(New):导入动画将其存储在模型的根节点中
Avatar设置说明:
1.Mapping设置-我们需要在这个页签对模型关节进行映射设置,因为人物动画无非就是改变这些关节的角度:
部位设置:身体,头部,左右手,关节映射信息设置
Mapping选项:
Clear:清空映射
AutoMap:自动映射
Load:从文件中读取
Save:保存映射信息
Pose选项:
Reset:重置姿势
Sample Bind-Pose:绑定姿势示例
Enforce T-Pose:强制T姿势
2.Muscles&Settings设置:
Muscle Group Preview-肌肉群预览:可以在这里预览在不同姿势的旋转变化,用来观察之前的关联映射关系是否合理,主要起到预览作用;
Per-Muscle Settings-肌肉设置:,用于设置各骨骼在旋转时的范围限制,因为如果不设置限制,在一些极限角度时会非常奇怪,我们可以在这里单独设置限制范围;
Additional Settings-高级设置:可以设置手脚的扭转和伸展值,一般不会修改他们,其中Translation DoF比较重要,如果启用,将启用人形角色的移动动画,如果禁用,Unity仅使用旋转对骨骼进行动画化,但是启用后,会提升性能消耗,因为动画需要执行额外步骤来重定向人形动画,除非动画包含角色某些骨骼的动画式移动才会启用,一般情况下禁用即可;
Rig 选项卡 - Unity 手册 (unity3d.com)
Animation动画页签
1.如何导入外部创建的模型资源:在 Unity 外部创建资源 - Unity 手册
2.使用多个模型文件来导入动画:提取动画剪辑 - Unity 手册
动画基础信息设置
Import Constraints-从此资源导入约束:启用后,Unity会自动添加相应的约束组件将其关联到正确的游戏对象
Import Animation-从此资源导入动画:如果禁用,下面的都没有,并且不会导入任何动画;
Bake Animations:通过反向动力学(IK)或模拟创建的动画以便推进运动关键帧,仅用于Maya、3Dmax和Cinema4D文件
Anim.Compression:导入动画时使用的压缩类型
Off:禁用动画压缩,在导入时Unity不会减少关键帧数量,效果最好性能较低,文件较大,运行时内存占用也大。通常不建议使用
Keyframe Reduction:减少冗余关键帧,仅适用于Generic通用动画类型
Keyframe Reduction and Compression:减少关键帧并在文件中存储动画时压缩关键帧,会影响文件大小,但是内存大小和Keyframe Reduction相同,仅适用于Legacy旧版动画类型
Optimal:让Unity决定如何压缩,仅适用Generic通用和Humanoid人形动画类型
Rotation Error:设置旋转曲线压缩容错度(百分比),原始旋转值和减小值之间的最小角度
Position Error:设置位置曲线压缩容错度(百分比)
Scale Error:设置缩放曲线压缩容错度(百分比)
(如果原始值和消减值之间的差小于原始值乘以容错百分比,会删除关键帧)这些内容仅在Keyframe Reduction或Optimal压缩时可用;
Animated Custom Properties:导入你指定为自定义用户属性的任何FBX属性
动画剪辑选择列表:在这里我们可以看到所有的动画剪辑可以通过+或-来新增剪辑或者删除所选的剪辑,在这里选择一个动画剪辑后,我们可以在下方编辑具体的相关属性信息
动画剪辑属性基本设置
动画剪辑属性:
1.动画剪辑名称:可编辑修改
2.时间轴:Start动画剪辑的开始帧,End动画剪辑的结束帧,我们可以在时间轴中定义每个动画剪辑的帧范围;
3.动画重要信心设置:
Loop Time:播放动画剪辑时是否循环播放,到结尾时重新开始
Loop Pose:无缝循环运动
Loop Match:循环匹配
Cycle Offset:循环动画在其他时间开始时的周期偏移
Root Transform Rotation:根位置的角度相关
Bake Into Pose:将根旋转烘焙到骨骼移动,禁用此选项将存储为根运动
Based Upon:根旋转的基础
Original:保持源文件中的原始旋转
Root Node Rotation:使用根节点的旋转(仅适用Generic通用动画类型)
Body Orientation:保持上半身朝前(仅适用于Humanoid人形动画类型)
Offset:根旋转偏移(单位:度)
Root Transform Position(Y):根垂直位置(Y轴方向)
Bake Into Pose:将垂直根运动烘焙到骨骼移动。禁用此选项将会存储为根运动
Based Upon(at Start):垂直方向根位置的基础
Original:保持源文件中的垂直位置
Root Node Position:使用垂直根位置(仅适用Generic通用动画类型)
Center Of Mass:保持质心与根位置对其(仅适用Humanoid人形动画类型)
Feet(推荐):保持双脚与根变换位置对齐(仅适用Humanoid人形动画类型)
Offset:垂直根位置偏移
Root Transform Position(XZ):根水平位置(XZ平面)
Bake Into Pose:将水平根运动烘焙到骨骼移动。禁用此选项将会存储为根运动
Based Upon:水平根位置的基础
Original:保持源文件中的水平位置
Root Node Position:使用水平根位置(仅适用Generic通用动画类型)
Center Of Mass:保持与根位置对其(仅适用Humanoid人形动画类型)
Mirror:在此剪辑中进行左右镜像(仅Humanoid人形动画类型才显示)
Additive Reference Pose:启用后可以设置附加动画层基础参考姿势的帧。在时间轴中可以看到蓝色标记,附加动画层:在动画控制器(状态机)中可以添加新的动画层:
Pose Frame:当启用参考姿势帧时,该项就是选择的具体是哪一帧
动画剪辑属性其它设置
其它设置说明:
1.Curves:曲线可以配合Animator作为参数,通过加入曲线值可以利用他标记重要的点,可以修改曲线的名字,名字就类似参数名,可以通过加减来添加或删除曲线信息;(曲线中的值X轴代表标准化时(0~1)代表动画的开始和结尾;Y轴的值可以根据需求自己设置也可以使用下方提供的预设曲线)
2.Events动画事件(不推荐延迟严重):类似之前我们学习的Animation窗口中的动画事件可以在这里为动画剪辑添加一个事件,当动画播放到事件处时会自动找对象脚本中的同名函数,当我们希望在动画某一时刻进行逻辑处理时非常常用,比如某一时刻进行伤害判断
3.Mask动画遮罩:主要作用是当播放该动画时,可以指定哪一部分或者哪些骨骼排除在外不受动作影响,Humanoid(人形动画的快捷设置),我们分别可以控制,头、左右臂、左右手、左右腿、根等,点击他们让他们变成红色,就代表做该动作时不影响该部位,Transform(明确指定哪些骨骼关节点不受影响)
4.Motion:当导入的动画剪辑包含根运动时,我们可以在这里手动设置特定骨骼关节点作为我们的根运动节点,展开后看到的都是骨骼关节节点
5.Inport Messages:当我们导入动画出现问题,看到黄色的警告符号时,你可以将 Generate Retargeting Quality Report 选中,Unity会帮我们生成更多的有关重定向问题的具体信息,我们便可以看到具体的一些问题(只有看到警告动画不正确时才启用,可以帮助我们排查问题);
Animation 选项卡 - Unity 手册 (unity3d.com)
Materials材质纹理页签
材质纹理页签说明:
Material Creation Mode-定义希望Unity如何为模型生成或导入材质:
None:不使用此模型中嵌入的任何材质,改用Unity的默认漫反射材质
Standard:导入时,Unity使用默认规则来生成材质
Import via MaterialDescription(Experimental):导入时,Unity使用FBX文件中嵌入的材质描述来生成材质;(与Standard相比,该方法结果更准确,并且支持更广泛的材质类型。)
sRGB Albedo Colors:是否在伽马空间中使用反射率颜色,对于使用线性颜色控件的项目,禁用此选项;
Location:定义如何访问材质和纹理
Use Embedded Materials:将导入的材质保持在导入的资源中
Use External Materials(Legacy):将导入的材质提取为外部资源。旧版材质处理方式,适用于2017.1或更早的Unity版本创建的项目
Extract Textures/Materials:当选择Use Embedded Materials后会出现的内容。这两个按钮可以提取导入的资源中嵌入的所有材质和纹理。
Naming:定义材质的命名规则
By Base Texture Name:使用导入材质的漫反射纹理名称来命名材质。如果未将漫反射纹理分配给材质,Unity将使用导入材质的名称
From Model's Material:使用导入材质的名称来命名材质
Model Name + Model's Material:使用模型文件的名称与导入材质的名称相结合来命名材质
Search:定义在使用Naming选项定义的名称时查找现有材质的位置规则
Local Materials Folder:在本地Materials材质子文件夹(模型文件所在的同一文件夹)中查找现有材质
Recursive-Up:在所有父文件夹(一直向上追溯到Assets文件夹)中所有Materials子文件夹中查找现有材质
Project-Wide:在所有Unity项目文件夹中查找现有材质
重新映射的材质:如果找到了,Unity会自动关联,如果没有找到,我们可以手动进行关联;
Materials 选项卡 - Unity 手册 (unity3d.com)
3D动画
Animator Controller - Unity 手册 (unity3d.com)
3D动画使用
状态参数
状态参数说明
Motion:分配给此状态的动画剪辑
Speed:动画的默认速度
Multiplier:控制速度的乘数,如果要使用需要勾选的Parameter选中配合的参数float类型
Motion Time:运动的时间,如果要使用需要勾选的Parameter选中配合的参数float类型
Mirror:是否为状态生成镜像,仅适用于人形动画,如果要配合参数使用选中旁边的Parameter关联参数,参数是bool类型
Cycle Offset:循环偏移时间,如果要配合参数使用选中旁边的Parameter关联参数,参数是float类型
Foot IK:是否遵循Foot IK,适用于人形人形动画
Write Defaults:AnimatorStates 是否为其运动执行未动画化的属性写回默认值。
Solo:仅播放该过渡
Mute:禁用过渡
Solo和Mute如果一起选择,Mute优先执行
Add Behaviour:添加状态机行为脚本,之后会专门讲解
连线参数
连线参数
改名框:可以在这里为动画过渡改名,如果不改,对应的名字就是,"某一状态名"->"某一状态名";
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)
AnyState和动作之间连线
Can Transition To self:是否可以过渡到自己
Preview source state:预览各种过渡状态,可以查看从任意状态切换到当前状态的过渡效果;
动画分层和遮罩
动画分层设置:
Weight:权重,当动画同时播放时,如果选择的是叠加状态,会根据权重决定叠加的比例
Mask:动画遮罩,该层动画全部都会受该遮罩的影响
Blending:混合方式
Override:覆盖方式,播放该层动画时忽略其他层信息
Additive:叠加方式,会和其它层动画叠加播放
Sync:是否同步其它层,主要用于直接从另一个层复制状态过来,在该层中进行修改,适用于比如正常状态下有待机走路跑步等等动作,但是受伤状态下动作会改变,可以利用同步层方便我们进行编辑(选择后会多一个Source Layer表示你要复制哪一层的状态)
Timing:当选中Sync同步其它层时,该参数激活,选中,会采用折中方案调整同步层上的动画时长(基于权重计算),不选中,动画时长将使用原始层做为母版
IK Pass:反向动力学,之后讲解IK的时候再讲解
动画混合
1.2D Simple Directional 2D简单定向模式 运动表示不同方向时使用 比如向前、后、左、右走;
2.2D Freeform Directional 2D自由形式定向模式 同上 运动表示不同方向时使用 但是可以在同一方向上有多个运动 比如向前跑和走;
3.2D Freeform Cartesian 2D自由形式笛卡尔坐标模式 运动不表示不同方向时使用 比如向前走不拐弯 向前跑不拐弯 向前走右转 向前跑右转;
4.Direct直接模式 自由控制每个节点权重,一般做表情动作等;
5.1D混合是用一个参数控制动画的混合,之所以叫1D是因为一个参数可以看做是1维线性的;
动画IK控制
知识点一 什么是IK?
//在骨骼动画中,构建骨骼的方法被称为正向动力学
//它的表现形式是,子骨骼(关节)的位置根据父骨骼(关节)的旋转而改变
//用我们人体举例子
//当我们抬起手臂时,是肩部关节带动的整个手臂的运动,用父子骨骼理解的话就是父带动了子
//而IK全称是Inverse Kinematics,翻译过来的意思就是反向动力学的意思
//它和正向动力学恰恰相反
//它的表现形式是,子骨骼(关节)末端的位置改变会带动自己以及自己的父骨骼(关节)旋转
//用我们人体举例子
//当我们拿起一个杯子的时候是用手掌去拿,以杯子为参照物,我们移动杯子的位置,手臂会随着杯子一起移动
//用父子骨骼理解的话就是子带动了父
知识点二 如何进行IK控制
//1.在状态机的层级设置中 开启 IK 通道
//2.继承MonoBehavior的类中
// Unity定义了一个IK回调函数:OnAnimatorIK
// 我们可以在该函数中调用Unity提供的IK相关API来控制IK
//3.Animator中的IK相关API
//头部IK相关
//weight:LookAt全局权重0~1
//bodyWeight:LookAt时身体的权重0~1
//headWeight:LookAt时头部的权重0~1
//eyesWeight:LookAt时眼镜的权重0~1
//clampWeight:0表示角色运动时不受限制,1表示角色完全固定无法执行LookAt,0.5表示只能够移动范围的一半
SetLookAtWeight 设置头部IK权重
SetLookAtPosition 设置头部IK看向位置
SetIKPositionWeight 设置IK位置权重
SetIKRotationWeight 设置IK旋转权重
SetIKPosition 设置IK对应的位置
SetIKRotation 设置IK对应的角度
AvatarIKGoal枚举 四肢末端IK枚举
知识点三 关于OnAnimatorIK和OnAnimatorMove两个函数的理解
//我们可以简单理解这两个函数是两个和动画相关的特殊生命周期函数
//他们在Update之后LateUpdate之前调用
//他们会在每帧的状态机和动画处理完后调用
OnAnimatorIK在OnAnimatorMove之前调用
OnAnimatorIK中主要处理 IK运动相关逻辑
OnAnimatorMove主要处理 动画移动以修改根运动的回调逻辑
//他们存在的目的只是多了一个调用时机,当每帧的动画和状态机逻辑处理完后再调用
动画目标匹配
知识点一 什么是动画目标匹配
//动画目标匹配主要指的是
//当游戏中角色要以某种动作移动,该动作播放完毕后,人物的手或者脚必须落在某一个地方
//比如:角色需要跳过踏脚石或者跳跃并抓住房梁
//那么这时我们就需要动作目标匹配来达到想要的效果
知识点二 如何实现动画目标匹配
//Unity中的Animator提供了对应的函数来完成该功能
//使用步骤是
//1.找到动作关键点位置信息(比如起跳点,落地点,简单理解就是真正可能产生位移的动画表现部分)
//2.将关键信息传入MatchTargetAPI中
//参数一:目标位置
//参数二:目标角度
//参数三:匹配的骨骼位置
//参数四:位置角度权重
//参数五:开始位移动作的百分比
//参数六:结束位移动作的百分比
animator.MatchTarget(targetPos.position, targetPos.rotation, AvatarTarget.RightFoot, new MatchTargetWeightMask(Vector3.one, 1), 0.4f, 0.64f);
知识点三 注意
//调用匹配动画的时机有一些限制
//1.必须保证动画已经切换到了目标动画上
//2.必须保证调用时动画并不是处于过度阶段而真正在播放目标动画
//如果发现匹配不正确,往往都是这两个原因造成的
//3.需要开启Apply Root Motion
状态机行为脚本
识点一 状态机行为脚本是什么?
//状态机行为脚本时一类特殊的脚本,继承指定的基类
//它主要用于关联到状态机中的状态矩形上
//我们可以按照一定规则编写脚本
//当进入、退出、保持在某一个特定状态时我们可以进行一些逻辑处理
//简单解释就是为Animator Controller状态机窗口中的某一个状态添加一个脚本
//利用这个脚本我们可以做一些特殊功能
//比如
//1.进入或退出某一状态时播放声音
//2.仅在某些状态下检测一些逻辑,比如是否接触地面等等
//3.激活和控制某些状态相关的特效
知识点二 如何使用状态机脚本
//1.新建一个脚本继承StateMachineBehaviour基类
//2.实现其中的特定方法进行状态行为监听
// OnStateEnter 进入状态时,第一个Update中调用
// OnStateExit 退出状态时,最后一个Update中调用
// OnStateIK OnAnimatorIK后调用
// OnStateMove OnAnimatorMove后调用
// OnStateUpdate 除第一帧和最后一帧,每个Update上调用
// OnStateMachineEnter 子状态机进入时调用,第一个Update中调用
// OnStateMachineExit 子状态机退出时调用,最后一个Update中调用
角色控制器
知识点一· 角色控制器的使用
//关键参数
//是否接触了地面
if ( cc.isGrounded )
//关键方法
//受重力作用的移动
cc.SimpleMove(Vector3.forward * 10 * Time.deltaTime);
//不受重力作用的移动
cc.Move(Vector3.forward * 10 * Time.deltaTime);
//当角色控制器想要判断和别的碰撞器产生碰撞时 使用该函数
private void OnControllerColliderHit(ControllerColliderHit hit)
{
print(hit.collider.gameObject.name);
}
UnityEngine.CharacterController - Unity 脚本 API (unity3d.com)