Unity-Live2d(加载动作文件,动作属性的设置与动作管理的实例化,动作播放)

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]);
}

你可能感兴趣的:(Unity3D学习)