前言:最近重拾Unity,准备做个3D的FPS小游戏,这里以官方FPS案例素材作为切入。
导入素材和素材理解
- 安装Unity
- 新建项目
- 新建文件夹和Scene
- 如何去理解三维模型素材
- 找到模型素材
- 素材预制体结构
- 骨骼和网格
- 材质(Material)、纹理贴图(Texture)
- Animator
- Avatar替身系统
- 总结
安装Unity
这个想必不用多说网上的教程很多。
最新版的话,官网下一个Unity Hub,然后在Hub里面下载个Unity(感觉新版Unity比以前高级多了)。
Unity Hub中设置-外观(Appearance)-设置语言(Language),简体中文会方便很多。
会有需要“管理许可证(Licenses)”,这个的话下载一个Unity Connect的app,然后微信注册个账号。app扫码登入到Unity Hub选择个人许可证就好了,学生的话可以申请学生版,都是免费的。
新建项目
Unity Hub-新项目-选择FPS Microgame模板。
这是Unity官方提供一个FPS学习模板,里面有个可以直接运行的demo,我们可以运行一下看看官方的FPS游戏Demo效果,算是对我们未来目标有个大概的想象。
选择这个的原因是因为里面包含了素材以及可以参考的思路代码。
新建文件夹和Scene
刚打开肯定是官方写好的文件夹,我们需要新建一个文件夹来存放我们后面自己写的内容。在文件夹部分右键Create-Floder,新建一个MyGame文件夹。
然后在MyGame文件夹下面新建一个我们自己Scene,命名为MainGame,拖拽到界面中。
把官方的Scene(MainScene)Removal掉。
如何去理解三维模型素材
很多新手刚看到这种三维模型素材肯定都是比较懵逼的,不知道如何去理解,尤其是角色的预制体里面有大量的层级,容易让人望而却步。
这里以敌人模型结构为例子,带大家理解一下。
找到模型素材
敌人模型的路径如下图所示,有两种HoverBot(悬浮机器人)和Turret(炮台)。
素材预制体结构
可以把HoverBot拖出来看看,可以发现预制体HoverBot组成非常复杂,没有接触的可能不太懂,但是其实组成部分主要分为两个,分别是模型和骨骼。“Bottom”、“EyeBall”和“Top”对应了机器人的三个组成的模型,里面包含了模型网格结构相关的渲染工作;“Robot_Root_C_Jnt”部分有很多内容,其实都是模型的骨骼关节名称。关于骨骼后面会介绍。
仔细点开“Bottom”,会发现模型包含了两个个部分:Skinned Mesh Renderer蒙皮网格渲染器以及Material材质球。蒙皮(Skin)是会把Mesh网格的顶点绑定在骨骼上,每个顶点可以被骨骼所控制,使得动画播放的时候顶点会随着骨骼而移动,从而Mesh会跟随骨骼的移动。而Material材质会附着在Mesh身上,也会跟着移动。Skinned Mesh Renderer把Mesh、Root Bone(骨骼根节点)以及Materials联合起来了。
骨骼和网格
上面介绍“素材预制体结构”涉及到了骨骼和网格(Mesh)的概念,为了更好理解它作用,我们先来了解一下骨骼动画。
游戏中的三维模型经常会设计到骨骼,这是为了骨骼动画做准备。
三维模型通常是由三角面网格组成,也就是Mesh。想要让Mesh动起来最简单的方法就是修改Mesh各个顶点。但是这个方案并不现实,复杂的模型往往伴随着大量的顶点,操作非常复杂,而且动画也不自然。
于是边诞生了骨骼(Spine),在Mesh中放置骨骼,骼的运动带动 Mesh 的运动。这样动画的时候只需要修改骨骼即可,如下图所示修改骨骼的时候Mesh网格顶点也跟着改变了。
该动图来自文章Mesh | 动态合批 | 骨骼动画 | 蒙皮,这篇讲网格讲的非常全面。
打开HoverRobot的一个Animation动画,可以看到骨骼动画中记录了每个时间点骨骼的变化,和素材预制体结构中骨骼关节的名字一一对应。
Unity中的骨骼模型通常包括三个步骤:
- 建模(Modeling):创建模型,包含网格和纹理等。
- 骨骼绑定(Rigging):创建骨架,骨骼和关节之间的层级结构。
- 蒙皮(Skinning):负责把骨骼和Mesh关联起来。
当然除了三维模型中会用到骨骼,其实二维也用的,素材预制体结构和方法都差不多,只不过二维的Mesh是平面的。
材质(Material)、纹理贴图(Texture)
材质(Material):是描述物体外观和光学特性的属性集合。
- 外观包:物体的颜色、反射属性(如漫反射、高光反射)、透明度、折射率等。
- 材质:定义了物体如何与光线进行交互,决定了物体在渲染时的外观效果。
纹理和贴图(Texture):决定模型表面的颜色、纹理和细节效果。
- 颜色贴图:就是给模型上一个颜色皮肤,例如木头纹理。
- 凹凸贴图:模型表面的凹凸情况,通常颜色越浅表明该位置的表面越像外凸起。
- 光照贴图:用来存储预渲染的光照信息,解决实时动态光源效果不好且消耗性能的问题。
除了上面三种常用贴图还有别的。
Animator
点击HoverRobot的属性,可以看见上面挂在了一个Animator组件。
Animator上面属性有五个属性如下。
Animator controller:用来控制动画切换,具体可以看我以前写的一篇unity学习(7)动画状态切换。虽然那篇讲的2D的,但是3D的逻辑也差不多。
Avatar:Unity的替身系统,后面部分详细介绍。
Apply Root Motion:有些动画会带有位移,勾选了带动画位移。
Update Mode:动画更新模式,Normal表示使用Update进行更新也就是fps同步、Animate Physics表示和fixed unpdate同步(物理检测)、Unscaled Time和Normal一样但是不考虑Time scale(游戏运行速度比例)。
Culling Mode:Cull剔除,也就是在摄像机视野外面的时候会做什么操作,Always Animate进行动画播放的更新、Cull Update Transform停止动画播放但是位置会继续更新、Cull Completely停止动画的所有更新。
Avatar替身系统
很多时候,我们会想要复用别人的动画,通常来说人形模型是复用最多的。但是不同的设计师,可能骨骼节点的名字命名不同,Animation没法识别复用。但是我们又不可能去一一修改每个骨骼节点名字来适配,这非常容易出错。
Unity提出了一个动画复用的解决方案,替身系统Avatar。两个模型A和B,B想用A的动画。可以让A和B模型的骨骼和Unity的标准肌肉对应,这样就可以把转为了Unity标准肌肉的A动画,复用到B了。
Unity中的骨架有两种:
- 人形 (Humanoid) :Unity提出一个通用的人形Avatar,最少 15 块骨骼,骨架需至少具备所需的骨骼。
- 通用(Generic):任何东西,不具备Humanoid的动画重定向功能,这里的敌人HoverRobot使用的就是通过Avatar。
注意:通用 Avatar 与人形 Avatar 不同,但它会显示在项目视图中,也会保存根节点映射。但是单击项目视图中的 Avatar 图标在 Inspector 中显示其属性,则仅会显示其名称,不显示 Configure Avatar 按钮。
我原本想深究一下通用Aavatar的功能,但是通用Avator没法在视图中查看,搜了很多都没有找到特别的说法,上面这个只是是官方手册的解释。问了做游戏的朋友在实际应用常见中人形Avatar比较有用,通用Avatar基本没用过,所以大家理解人形Avatar就可以了。
总结
通过本篇过后,想必已经对三维模型素材有了初步的理解。
三维模型的预制体无非就两部分模型+骨骼,不需要动画的可能还没有骨骼,只有模型。预制体的节点会挂载Animator做动画控制;模型部分通常包括了网格(Mesh)、材质和贴图;骨骼部分就包括骨骼层级各个骨骼节点,骨骼节点的名字和Animation中的一一关联。模型中Skinned Mesh Renderer组件可以把网格(Mesh)、材质和贴图和对应的骨骼根节点关联。
Avatar不一定是必须的,通常用在人形骨骼动画的复用上。