Unity-Live2d
概述:这是我学习Unity中Live2d的相关操作的一个笔记,欢迎各位同好和大牛的指点。(参考siki学院出的视频学的)
加载动作文件
- 其实加载动作文件的方法比较类似于加载模型文件,主要也是俩种方法,二进制文件读取和文件路径读取的方式(可以参照一下模型加载的那一篇笔记 模型加载 )。不过所用的方法函数和导入的文件有些许不同。
- 首先实例化动作对象,用Live2DMontion类;
代码:
private Live2DMotion live2DMontionIdle;
- 然后是读入文件赋给live2DMontionIdle;
代码:
live2DMontionIdle=Live2DMotion.loadMotion(Applocation.datapath+"文件路径");`
- 加载二进制文件,然后再用二进制文件转化为动作文件
代码:
TextAsset mtnFile = Resources.Load< TextAsset>("文件路径");
live2DMontionIdle=Live2DMotion.loadMotion(mtnFile.bytes);
- 不过当然,最舒服的还是直接用public从外部拖入,所以这里我们public一个动作文件的数组,再private实例化一个动作对象数组(动作对象数组的长度就是文件数组的长度了,所以在new出动作数组的时候,长度就填motionFiles.Length)
代码
public TextAsset[] motionFiles;
private Live2DMotion[] motions;
motions = new Live2DMotion[motionFiles.Length];
- 然后就是将已经加载好的文件读取赋值给我们的动作对象了,老规矩,一个循环,加上赋值语句
for(int i=0;i < motions.Length;i++)
{
motions[i] = Live2DMotion.loadMotion(motionFiles[i].bytes);
}
动作属性的设置与动作管理的实例化
-
motions[0].setLoopFadeIn();
这个是控制动作重复播放时是否进行淡入,括号内写入布尔值来控制是否淡入; -
motions[0].setFadeOut(1000);
控制动作淡入的时间,括号内参数的单位为毫秒; -
motions[0].setFadeIn(1000);
控制动作的淡出时间,括号内参数的单位是毫秒; -
motions[0].setLoop();
动作是否循环播放,括号内写入布尔值来控制是否循环播放; -
动作的播放,是要有一个动作管理来控制的,所以我们得先定义出这个动作管理来,以及对其实例化;
代码:
private MotionQueueManager motionQueueManager;
motionQueueManager = new MotionQueueManager();
- 之后就是将已经设定好的动作对象赋值给这个动作管理了。这里用到了动作管理中的一个方法startMotion这个方放里有俩个参数,第一个参数就是我们已经设定好的动作对象,第二个参数是当前动作播放完之后是否需要删除,是一个布尔类型参数,也可以不填,默认为false;
代码:
motionQueueManager.startMotion(motions[0]);
动作的播放
- 动作的播放实要对应上模型,所以我们要先找到已经定好的动作管理与模型进行绑定,使用动作管理中内置的方法.updateParam(模型对象);
需要注意的是,这个播放动作所对应的模型是每一帧都需要进行调用的,所哟我们要将它写入update方法中,而不是start;
代码:
motionQueueManager.updateParam(live2DModel);
- 由于我们绑了很多个动作,所以播放的时候我们可以加一个按键来该动当前播放的动作,来一个一个检索我们的动作;
可以用Input.GetKeyDown(KeyCode.M)作为判断条件,判断键盘输入M,然后将改变播放动作的代码语句放到这个if里;
代码:
//于外层先定义一个计数变量
public int motionIndex = 0;
if(Input.GetKeyDown(KeyCode.M))
{
motionIndex++;
if(motionIndex>=motions.Length)
{
motionIndex = 0 ;
}
motionQueueManager.starMotion(motions[motionIndex]);
}