麒麟子Cocos Creator 3D研究笔记五:模型&骨骼动画查看器

负一、​先说两句

本文索引是负一开头,那是因为这一小节是​最后加上来的。为了不牵一发动全身,就这样最好了。

写文章每次要自称的时候,麒麟子三个字打着太费劲,以后文章中,我就叫自己阿子吧​。

大家从今天开始,多习惯习惯。


零、效果展示

这两天在研究Cocos Creator 3D骨骼动画部分,网上找了些模型。为了方便查看模型的各个动作,所以顺便写了这个模型&骨骼动画查看器。

项目包含了以下几个内容

1、QFW(qilinzi framework)框架最新版

2、天空盒设置、内置10款天空盒

3、第三人称摄相机控制器

4、一个主角模型以及配套的40个动画

拿到这套代码的小伙伴们,可以很容易地制作属于自己的DNF类ACT RPG,MMORPG等。

在线演示地址:http://showcase.ukylin.net/modelviewer/


一、资源与动画

如上图,@Cast @BattleStand等以@开头的FBX文件,就是我们模型的动画文件。每一个动画文件是独立的,且与模型文件是分离的。

这样做的好处是方便我们按需动态加载,并且美术在进行FBX导出的时候,可以更直观地管理这些动画文件。

这个套路是从Unity3D中发展出来的。已经被证明是非常适合的动画资源管理方式。

这样的管理方式,在Cocos Creator 3D中,还有一个更大的好处,就是H5项目可以延迟加载动画。比如一些NPC或者怪物的不常用动画,就可以等到使用的时候才加载。(主角为了体验感,一般还是预加载完了的)

Cocos Creator 3D骨骼动画继承自动画基类,因此它的使用方式和普通动画没有区别。只需要将骨骼动画拖到SkeletalAnimationComponent中即可。

播放代码超级简单,示例如下:

let animState = this._anim.getAnimationState(animName);
animState.repeatCount = isLoop ? Infinity : 1;
this._anim.play(animName);

注:repeatCount的值 Infinity表示无限循环,其余值表示要播多少次。


二、阴影
Cosos Creator 3D在1.2以前,只支持了平面阴影(Planar Shadow),正好适合我们项目这个只有一个Plane的场景。开启阴影只需要设置两个地方

1、场景属性里面,planarShodows开关打开

2、对应的Mesh节点的ModelComponent的ShadowCastingMode设置为ON


三、天空盒设置

为了查看不同环境下的效果,阿子把天空盒设置功能也放进来了。配合主界面上的 UseSkybox和UseIBL开关,可以很好地调节场景氛围。


四、第三人称摄相机
第三人称摄相机是角色类3D游戏必备的功能,Cocos Creator 3D的CameraComponent并未提供,所以花了时间写了一下。主要用到的就是向量转角度,角度转向量相关操作。

按住鼠标右键拖拽,可旋转摄相机

鼠标滚轮可拉进拉远摄相机


五、QFW(qilinzi framework)框架更新
随着不断的功能学习,QFW也进行了不少升级,增加了许多便利性。这个会在后面专门用一篇文章来解释。


六、总结
Cocos Creator 3D在骨骼动画部分,已经做得比较完善。基于顶点纹理的骨骼蒙皮也可以很轻松地突破寄存器限制和实现Instancing。只是动画融合部分还未添加进来,导致角色动作衔接不够流畅。不过这个功能应该马上就会出了,不会等太久。

想要源代码的朋友,掏出你的手机,打开微信,扫瞄并关注下方公众号,发送暗号 20200815 即可免费获得

实在不想关注公众号的,可以到阿子微店卖,本源码售价:¥29.99


4赞

大佬牛批,我想问个问题,现在c3d可以做到一个动画文件,对应多个不同的模型吗 ? 如果可以的话具体应该怎么导出。

完全可以的。我们一般会分三个部分导出。
1、整套模型骨骼信息 导出为单独的FBX
2、Mesh以及蒙皮信息(如果是多套装备,需要确保所有Mesh在蒙皮的时候,是使用同一套骨骼,且同一个TPOSE。 每一套装备一个FBX
3、动画信息(可以每一个动画一个FBX)

但是我要把其他fbx的animation资源,挂载到另一个fbx资源里,挂不上去啊。

发我测试文件,我不信。