最近在网上找了一个在unity中使用Live2dSDK的教程,写个笔记留念。
Live2d的SDK在官网https://www.live2d.com/ja/下载,3.0版本是新版本,我们采用2.x版本的SDK。我已经存在了度盘中链接:https://pan.baidu.com/s/1nNa7I_L_cshbhoiLbEWfCA 提取码:twds ,还有一个live2D的建模软件Live2D Cubism Editor 3.2,安装包也在网盘里。
先说说Live2d的原理,就是将一张静态的2d图片拆分为多个部分,进行微小的扭曲变形达到所谓的动态2d。
在Unity中使用SDK--
将Live2D_SDK_Unity_2.1.04_2_jp.zip文件解压,将文件夹中的framework,lib,tool文件夹拖入unity项目的assest中即可,过程中会有一个版本的提示,点击继续即可。在后续开发过程中可能会由找不到live2d的某些方法,将上述三个文件删掉后重新拉入,多试几次即可。
再说说Live2d建模显示过程:
1.初始化模型。 1.制作模型(读取moc文件)。 2.与贴图建立关联。 3.与绘图环境建立链接。(有些平台不需要)。
4.制定显示位置与尺寸。
2.更新模型状态。
1.更新顶点。
2.绘图。
接下来说说怎么使用这个SDK
首先先要声明命名空间
using live2d;
然后初始化环境,使用环境前一定要调用一次 ,连续调用或者不调用会出错,并且可以释放后再次初始化重新使用。
Live2D.init();
同时还有释放环境,理所当然没有初始化是不能释放的
Live2D.dispose();
在网盘文件中有个Epsilon文件,这个就是使用的模型,在资源中创建一个Resources文件夹,将Epsilon解压后拉入。
第一步,读取模型
加载模型有两种方式,一种是加载moc文件,一种是加载二进制文件
Live2DModelUnity专门负责模型的加载,加载moc文件一定要有.moc后缀
加载moc文件
Live2DModelUnity.loadModel(Application.dataPath + "/Resources/Epsilon/Epsilon/runtime/Epsilon.moc");
加载二进制文件,复制moc文件,在副本文件名后面加上.bytes后缀变为二进制文件,使用textAsset接收二进制文件
TextAsset mocFile = Resources.Load<TextAsset>("Epsilon/Epsilon/runtime/Epsilon.moc");
Live2DModelUnity.loadModel(mocFile.bytes);
这个Live2DModelUnity方法返回一个类型为Live2DModelUnity的模型对象,对应于加载的这个模型。
2.联系贴图
只能通过路径读取
Texture2D texture2D = Resources.Load<Texture2D>("Epsilon/Epsilon/runtime/Epsilon.1024");
live2DModel.setTexture(0, texture2D);
设置贴图 前一个参数是贴图序号,由建模师决定,设置多张贴图:
Texture2D texture2D1 = Resources.Load<Texture2D>("Epsilon/Epsilon/runtime/Epsilon.1024/texture_00");
Texture2D texture2D2 = Resources.Load<Texture2D>("Epsilon/Epsilon/runtime/Epsilon.1024/texture_01");
Texture2D texture2D3 = Resources.Load<Texture2D>("Epsilon/Epsilon/runtime/Epsilon.1024/texture_02");
live2DModel.setTexture(0, texture2D1);
live2DModel.setTexture(1, texture2D2);
live2DModel.setTexture(2, texture2D3);
3,与绘图环境建立链接(unity不需要)
4,指定显示位置与尺寸
定义画布 Matrix4x4 live2dCanvasPos; 创建正交的投影矩阵 参数是左右上下近视口远视口
float modelWidth = live2DModel.getCanvasWidth();
live2dCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, 50, -50);
+-50由官方提供,将相机设置为正交相机orthographic
接下来在update方法中更新模型状态
设置矩阵 两个矩阵相乘 ,localToWorldMatrix局部转世界
live2DModel.setMatrix(transform.localToWorldMatrix * live2dCanvasPos );
live2DModel.update();
live2DModel.update()方法更新模型的顶点,状态,贴图等。
接下来绘制模型
private void OnRenderObject()
{
live2DModel.draw();
}
在sence中新建一个空物体,将脚本挂载在上面,将资源拖入,小姐姐就出现了。
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using live2d;
public class Live2dModel : MonoBehaviour {
public TextAsset modelFile;
private Live2DModelUnity live2DModel;
public Texture2D[] textures;
//live2d的画布
private Matrix4x4 live2dCanvasPos;
// Use this for initialization
void Start () {
Live2D.init();
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, 50, -50);
}
void Update () {
//设置矩阵 两个矩阵相乘
//localToWorldMatrix局部转世界
live2DModel.setMatrix(transform.localToWorldMatrix * live2dCanvasPos );
//更新顶点,贴图等
live2DModel.update();
}
private void OnRenderObject()
{
live2DModel.draw();
}
}
下面在网上找到的Live2d教程,本文为精炼笔记