按照上两个帖子来做,我们的mod就已经完成90%了,已经算一个不错的mod了。但是在动起来测试的时候就可能发现,有一些地方会产生穿模,比如前发在跑起来的时候直接穿模到脑袋后面了,这种穿模是不可接受的。
对于这种情况,我们有两种解决方案:通过ccl文件制造碰撞球,阻挡物理链穿模;或者通过ctc文件中Node的自定义属性-角度/方向限制来限制运动范围。
这一帖先简单讲一下第一种方式,ccl文件。这东西我用的非常少,因为对于一些不能容忍的穿模(前发穿模额头)来讲,限制运动角度/方向一般就够了;对于一些能容忍的穿模(长发穿模身体)来说,又没必要写ccl。
而且最大的问题是,ccl还经常不生效!以前我试过加很多碰撞球,结果最后就生效了一个,从此以后我就再也不用ccl了,都是随便移植一个,然后调整角度/方向限制。
ctc通过ccl进行物理碰撞的判定。ccl文件的基本结构:碰撞容器Capsule、起始球startSphere和终止球endSphere。
在Havok引擎的说明档案中有说到,碰撞的实现原理是通过一个起始球startSphere和一个终止球endSphere,通过类似放样的形式形成一个碰撞体积,和物理链进行碰撞判定。但是在MHWI中,碰撞判定实际只受终止球endSphere的影响,所以我管它叫碰撞球。
ccl中的每个碰撞容器Capsule都有一个自定义属性,是一系列枚举数,表现为一个数组。该枚举数十分重要,它直接决定了碰撞能否生效。当数组的具体值不同时,生效的区域似乎也不一样。如果你不管这个数组,默认为[0,0,0,…,0]的话,碰撞体积基本不会生效。
(不过即使写对了也经常不生效,很奇怪?所以我才放弃了自己写ccl文件)
因为这个枚举数的存在,导致完全自己写ccl很困难。因此,如果你想实现碰撞体积,建议直接解包怪猎原文件,然后找一个你觉得不错的ccl改一下使用。
终止球是跟随绑定骨骼进行运动的,想知道它绑定什么骨骼可以先选中终止球,在右面的一堆图标里找到那个铁链一样的图标,点开有个Target就能看见它绑了什么骨骼了。
终止球是可以移动的,但是移动之后实际位置和表现的不一样,需要使用“创建演示碰撞球”功能看一下实际位置。具体可以看下面的插件使用说明。
终止球是有尺寸的,可以在下图中调整。听大佬说碰撞球的属性半径和实际作用半径并非1:1的关系,属性半径要小于实际作用半径(可能是1:2)。
这里是ccl Tools界面的意思。
创建演示碰撞球:选中碰撞容器Capsule后,点这个可以演示一下实际的碰撞球,方便参考。看完记得把创建出来的球形网格删了,这东西没实际作用。
从骨骼生成碰撞球:选中两个骨骼后,根据选中的顺序依次生成起始球和终止球。
复制碰撞球、复制/粘贴枚举数应该就不用多说了。用法基本上就是找现有的ccl文件,复制碰撞球,或者自己创建然后复制粘贴枚举数。