Unity-Live2d
概述:这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点。(参考siki学院出的视频学的)
多个动作的同时播放
- 有关这个多个动作同时播放的操作,首先我们需要知道单个动作如何播放,这里参考上一篇笔记( https://blog.csdn.net/weixin_44579240/article/details/92619449 )
- 然后是多个动作同时播放的限定条件,比如说动作A的播放涉及到的人物的身体和头,但是没有涉及到其手臂和嘴,那么我们就可以再加上涉及嘴的动作B和涉及手臂的动作C,如果多个动作同时涉及到了一个组件,那么它的播放会遵循最后覆盖的动作参数来播放(也许~会达到抽搐的效果,让人物螺旋升天【手动滑稽】);
- 接着来说说这个代码要怎么码,如果我们要同时播放多个动作的话,我们就需要定义多个动作管理,代码如下
private MotionQueueManager motionQueueManager2; //代码最前面的定义
motionQueueManager2 = new MotionQueueManager(); // start方法里的实例化
然后还有给他绑定对应的动作和给动作设置属性,这里就不详细说了,参照上一篇笔记就好
- 接着就是再update方法里进行动作播放了,当在多个动作的播放有重叠的组件时,动作的播放似乎是遵从最后更新的一个动作来播放的,写入播放代码也就是在update中写入多个动作播放的代码,这里参照上一篇笔记。
动作的优先级播放
-
这里来介绍一个新的操作,就是动作的优先级播放,给与动作一定优先级,优先播放优先级大的动作,而如果一个动作播放完后,我们让人物回到一个待机动作状态。
-
这里需要一个新的类————L2DMotionManager,其实这就是在之前的动作管理类之上的一个封装体,加入了很多比较方便的方法功能,比如动作的优先级管理。使用这个的话,就不需要之前用的动作管理了,另外,这个新的类需要引用一个新的命名空间————live2d.framework;
-
然后来说说这个动作播放的优先级设置标准(仅供参考)
1.没有动作的状态优先级为0,也就是最低,
2.待机的动作状态优先级为1;
3.其他的动作状态优先级为2;
4.强制类型动作状态优先级为3; -
接着来说一下基础待机状态的设置,这里需要用到L2DMotionManager里的一个方法,isFinished();这个方法是一个判断当前动作是否播放完的方法,若其返回true,则表示当前动作播放完毕,也就是说我们可以使用它来作为if的判断条件,让判断为true时执行待机动作。
-
然是动作播放,这里我们需要封装一个新的方法来播放动作,
这里需要俩个参数,一个是动作的索引(动作数组的下标),一个是该动作的优先级,然后在方法体里写入一个if,其条件为比较当前播放动画和想要播放的动画的优先级,然后播放优先级高的动画,需要用到一个新的方法,来读取到当前播放的动作的优先级,l2DMotionManager.gercurentPriority(),范例代码如下
if(l2DMotionManager.isFinished())
//写入update中来实时检索是否无动作
{
StartMotion(0,1); //这里调用了下面封装的新方法
}
private void StartMotion(int motionIndex,int priority)
//新封装的动作播放方法
{
if(l2DMotionManager.getCurrentPriority()>= priority)
{
return;
}
l2DMotionManager.startMotion(motions[motionIndex]);
}
- 然后不要忘记在update中实时更新模型参数:l2DMotionManager.updateParam(live2DModel);
- 以及按照自己的意愿加入一些按键触发动作的改变。