在Unity中使用Live2d插件1

最近在网上找了一个在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教程,本文为精炼笔记,有时间的可以去看看教程http://www.sikiedu.com/my/course/282

猜你喜欢

转载自blog.csdn.net/t1370620378/article/details/88085500