模型下载和格式转换
在模之屋下载了我推()
https://www.aplaybox.com/
-
获得tex纹理文件和.pmx文件
-
需要转换为Unity可以使用的.fbx文件
下载Blender2.93和CATS插件
Blender2.93下载页面:https://www.blender.org/download/lts/
CATS插件下载页面:https://github.com/absolute-quantum/cats-blender-plugin
打开Blender-编辑-偏好设置-插件-安装-选中.zip插件-勾选后选择右侧CATS-Import导入.pmx文件-Fix Model-Export
获得.fbx文件
二次元渲染:
将人物fbx文件,纹理文件导入,提取材质放入材质文件夹
将大佬的文件下载下来导入
选择全部材质,更改Shader为SimpleURPT
面部材质勾选Is Face
simple urp下载页面:https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample
骨骼重定向:
选中fbx文件,Rig处更改为人形,Apply
头发和衣服的物理模拟
Unity Chan的商城页面:https://assetstore.unity.com/publishers/7659
animation rigging
- 导入二者到项目
选择如下,可以看到该脚本绘制出的人物骨骼
脚本或者说继承了MonoBehavier的脚本就是一个自定义的组件component
利用Unity-Chan中提供的这三个组件可以制作出不错的骨骼物理模拟效果
将这三个组件所构成的系统称为“弹性骨骼”或“动态骨骼”。
SpringBone:需要把它绑定到所有需要进行物理模拟的骨骼节点上,需要当前骨骼有一根子骨骼
SpringManager:绑定完后要把所有的springbone交给其管理,可以管理多个骨骼链,springmanager必须放在springbone的同级节点或者父节点上
SpringCollider:在一定程度上防止穿模,比如绑定到头上和大腿上
- 在根骨骼节点上添加Springbone组件,将其下一级骨骼拖动到child,以此类推
修改旋转轴bone axis 为(0,1,0)
以上过程也可以在SpringManager进行一个程序的写:
为角色添加一个SpringManager脚本,将绑定了的骨骼拖到Springbone数组中
stiffness是坚硬度的意思,越大越硬越小越软
stiffnesscurve调整骨骼链上每一个骨骼的坚硬程度
dargforce是阻力,越大骨骼复原速度越慢
- 设置碰撞体
在需要设置的位置例如腿部添加空物体,增加Spring Collider组件
拖动至需要与之产生碰撞的骨骼Collider
可以移动角色或者添加Random Wind组件查看效果
动画系统
在mixamo网站上可以下载免费模型和动画。
https://www.mixamo.com/
这里下载动画,Format选择FBX for Unity
导入动画文件到人物fbx同级目录下,选中动画fbx文件,Rig处更改为人形
可以选择是否勾选animation下的循环时间设置循环播放,将fbx文件下的Clip复制出来并移动到动画文件夹
创建Animation Controllor,挂载到人物Animation组件上
设置状态机:
知识点
- Controller:使用的Animator Controller文件
- Avatar:使用的骨骼文件
- Apply Root lotion:绑定该组件的Gamebject的位置是否可以由动画进行改变(如果存在改变位移的动画)。
Apply Rootlotion 让角色动画驱动角色运动,提高了动画的使用效率
这就有两种情况,比如跑步动画
1、当我们的动画是原地跑的时候,这时候使用Apply Rootmotion的时候,人物还是在原地跑,就不需要用了,需要代码手动控制人
2.如果是可以一直往前跑的动画时,就可以使用Apply Roothotion使用动画驱动人物移动
人为控制用 move *= Time.deltaTime * moveSpeed;
动画控制用move = animatordeltaPosition; 其它地方都一样
不开启rootmotion,如果动画本身是一个带位移的动作的话,人物会脱离胶囊体,进而没有碰撞,会产生穿墙的效果,并且动画播完后,人物会回到胶囊体的位置
不带位移(原地)就不用勾选rootmotion。
- Update Mode:更新模式,Normal表示使用update进行更新,Animate Physics表示使用FixUpdate进行更新(一般用在和物体有交的情况下),Unscale Time表示无视timeScale进行更新(一般用在UI动画中)。
- Culling Mode:剔除模式:Almays Animate表示即使摄像机看不见也要进行动画播放的更新,Cull Update Transform表示摄像机看不见时停止动画播放但是位置会继续更新,Cull Completely表示摄像机看不见时停止动画的所有更新。
参考资源
【1】https://www.bilibili.com/video/BV1G34y127e6/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click&vd_source=fd6555f02904e7fa85526a2ff4b8b66e
【2】https://www.bilibili.com/video/BV1gB4y1B7tj/?spm_id_from=333.788&vd_source=fd6555f02904e7fa85526a2ff4b8b66e