播放动作动画
Step1 认识动作动画资源
保存模型动作信息的文件的后缀名为.mtn。是motion(动作)的缩写。
将.mtn文件全都导入到工程文件中。
然后如同之前加载贴图资源的操作一样,将所有的.mtn文件修改后缀名改为.bytes。
然后在脚本中获取这些资源。
暴露一个数组用于存储所有的资源
public TextAsset[] motionFiles;
在Unity中,将所有的资源拖入motionFiles下即可。
Step2 载入动画资源
将.mtn文件全都导入到工程文件中。
然后如同之前加载贴图资源的操作一样,将所有的.mtn文件修改后缀名改为.bytes。
然后在脚本中申明一个用于存储所有动画资源的数组变量。
private Live2DMotion[] motions;
在Start方法中将其实例化出来,并加载资源。
motions = new Live2DMotion[motionFiles.Length];
for (int i = 0; i < motions.Length; i++)
{
motions[i] = Live2DMotion.loadMotion(motionFiles[i].bytes);
}
Step3 设置动画管理器
3.1 第一种方法
声明一个动画管理器。
private MotionQueueManager motionQueueManager;
将其实例化。
motionQueueManager = new MotionQueueManager();
然后就可以控制任意动画开始播放。
motionQueueManager.startMotion(motions[0]);
在Update方法中,必须要去更新模型,才能看见效果
motionQueueManager.updateParam(live2DModel);
3.2 第二种方法
同样也是声明一个管理器,但是是另一个管理器。
private L2DMotionManager l2DMotionManager;
该管理器所控制的动画相较于之前一种,还可以控制动画播放的优先级。
同样,将其实例化出来。
l2DMotionManager = new L2DMotionManager();
然后我们可以创建一个私有方法,用于判定动画的优先级。
private void StartMotion(int motionIndex,int priority)
{
//判定想要播放的动画的优先级是否大于正在播放的动画的优先级
if (l2DMotionManager.getCurrentPriority() >= priority)
{
return;
}
l2DMotionManager.startMotion(motions[motionIndex]);
}
之后,调用该方法,并在调用时写入该动画的优先级,即可进行播放。
同样,也需要在Update方法中更新模型。
l2DMotionManager.updateParam(live2DModel);
Step4 动画属性的设置
motions[0].setLoopFadeIn(false);//重复播放时是否淡入,false-不淡入
motions[0].setFadeOut(1000);//设置淡出时间,参数单位为ms,默认为1000
motions[0].setFadeIn(1000);//设置淡入时间,参数单位为ms,默认为1000
motions[0].setLoop(true);//设置动画是否循环播放