继续01篇的内容,在unity中加载入小姐姐后,此时她还只是一张图片,并不会动,这时就需要引入配套的动画。
实例化动作对象 加载mtn文件
//这是直接加载mtn文件的方法
live2DMotionIdle = Live2DMotion.loadMotion(Application.dataPath + "");
//这是加载二进制文件的方法
TextAsset mtnFile = Resources.Load<TextAsset>("");
live2DMotionIdle = Live2DMotion.loadMotion(mtnFile.bytes);
定义一个TextAsset数组,用于存储动作的二进制文件,定义一个 Live2DMotion数组,用于存贮由二进制文件加载的动作
这个动作的二进制文件由此得来:在Epsilon/Epsilon/runtime/motions下面有许多mtn文件,CTRLcv复制粘贴得到副本,在副本后面加上.bytes变为二进制文件,再从unity的inspector视口拖入。
public TextAsset[] motionFiles;
//动作数组
private Live2DMotion[] motions;
//将读入的motion文件加载入对应的Live2DMotion数组中
motions = new Live2DMotion[motionFiles.Length];
for (int i = 0; i < motions.Length; i++)
{
motions[i] = Live2DMotion.loadMotion(motionFiles[i].bytes);
}
接下来可以单独设置每一个动画的属性
//重复播放时是否淡入,动作跨度大设置可以看起来更自然 参数为bool
motions[0].setLoopFadeIn(false);//重复播放不淡入
//设置淡入淡出时间
//淡出,不设置默认值也为1000毫秒。
motions[0].setFadeOut(1000);
//淡入
motions[0].setFadeIn(1000);
//设置动画是否循环播放
motions[0].setLoop(true);
播放动画还需要一个动画队列的管理器,定义一个motionQueueManager对象
//动作管理队列,管理动画的播放
private MotionQueueManager motionQueueManager;
使用startMotion设置播放的动画
motionQueueManager = new MotionQueueManager();
//播放动画
motionQueueManager.startMotion(motions[0]);
在update中更新状态,由于动画和模型是对应的,需要为管理器指定哪一个模型播放动画
motionQueueManager.updateParam(live2DModel);
动画是可以叠加的,比如角色动嘴没动手时,可以为手指定动作,