.cmox文件:Live2D制作工具Cubism的工程文件格式。
.moc文件:Unity可以直接用的文件格式,将.cmox文件载入Cubism后导出获得。
.bytes文件:二进制文件,Unity另一种可用的文件格式。可以将.moc文件在其后增添扩展名.bytes后得到。
using live2d;
Live2D.init();
要使用Live2D必须先进行初始化操作。
初始化只能进行一次,不能重复进行。
先定义一个私有变量用于储存live2d对象。
在Unity中为Live2DModelUnity对象。
private Live2DModelUnity live2DModel;
然后有两种方式可以载入资源:
live2DModel = Live2DModelUnity.loadModel(Application.dataPath + ".moc文件的路径");
TextAsset mocFile = Resources.Load(".bytes文件的路径");
live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);
当然也可以用public一个TextAsset变量,将其暴露出来来直接获取.bytes文件的引用。
Live2D.dispose();
释放会释放掉所有live2d占用的资源。
在释放之后可再次进行初始化。
因为一个Live2D所需要用到的贴图数量是不定的。
所以需要先定义一个数组:
public Texture2D[] textures;
然后,在初始化之后,进行贴图关联
for (int i = 0; i < textures.Length; i++)
{
live2DModel.setTexture(i, textures[i]);
}
Live2DModelUnity 对象的.setTexture有两个参数:(编号,图片)
编号从0开始。每个编号对应一张图片。
private Matrix4x4 live2DCanvasPos;
float modelWidth = live2DModel.getCanvasWidth();
live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50f, 50);
将摄像机调整为正交模式。
void Update () {
live2DModel.setMatrix(transform.localToWorldMatrix*live2DCanvasPos);
live2DModel.update();
}
private void OnRenderObject()
{
live2DModel.draw();
}
至此,运行游戏已可以看见人物的显示了。
通过调整Camera中的size来进行人物大小缩放的调节。
对人物的节点进行移动来调整人物的位置。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using live2d;
public class Live2Dmodel : MonoBehaviour {
public TextAsset modelFile;
public Texture2D[] textures;
private Live2DModelUnity live2DModel;
private Matrix4x4 live2DCanvasPos;
// Use this for initialization
void Start () {
//初始化
Live2D.init();
//释放
//Live2D.dispose();
//加载资源
//Live2DModelUnity.loadModel(Application.dataPath + "/Resources/Epsilon/runtime/Epsilon.moc");
live2DModel = Live2DModelUnity.loadModel(modelFile.bytes);
//与贴图建立关联
for (int i = 0; i < textures.Length; i++)
{
live2DModel.setTexture(i, textures[i]);
}
//指定显示位置与尺寸
float modelWidth = live2DModel.getCanvasWidth();
live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50f, 50);
}
// Update is called once per frame
void Update () {
live2DModel.setMatrix(transform.localToWorldMatrix*live2DCanvasPos);
live2DModel.update();
}
private void OnRenderObject()
{
live2DModel.draw();
}
}