Live2D for Unity入门篇 4x

Xsens动作捕捉 2023-04-14 6078

一直都想转型U3D,然后都因为各种原因没有落实。

Live2D for Unity入门篇 4x  第1张

这次疫情原因,需要重新找工作,然后有一个机会可以转U3D开发。所以重新拿起来,希望能抓住这个机会,项目是二次元向,所有需要用到Live2D。

上次自学过一段时间U3D,但是已经比较久远了。久远到这次回来重新使用,发现变化还蛮大的。

具体的U3D安装啥的,没啥难度,直接官网下载就行了。但是不得不说,现在用的这个Unity Hub真心不太好用,经常出各种小问题,目前的解决方案就是卸载了然后重新安装。(可能是因为不熟悉,后面熟悉了应该会好很多。重心不在这,所以不过多纠结)。

然后再说到Live2D,这 玩意儿不清楚的可以直接百度,或者谷歌。去Live2D官网查看相关消息。

www.live2d.com

我这次用到的是Live2D for Unity 也就是Live2D的Unity版本。现在官网最新的版本已经到了4.0。网上找了一些相关的教程来看,发现基本都是2.0的。有一些流程和4.0差异比较大。

然后在官网寻找教程,发现还是这个靠谱。

https://docs.live2d.com/cubism-sdk-tutorials/hittest/

具体可以查看这个链接。不过有一点,官网的这个翻译,一言难尽。(~ ̄▽ ̄)~

相比较2.0版本,最新的4.0优化了好多步骤。

新建一个c#文件,命名为Live2DModel。具体代码如下:

using System;

using System.IO;

using UnityEngine;

using Live2D.Cubism.Framework.Json;

public class Live2DModel : MonoBehaviour

{

// Start is called before the first frame update

void Start()

{

var path = Application.streamingAssetsPath + "/koharu/koharu.model3.json";

var model3Json = CubismModel3Json.LoadAtPath(path,BuiltinLoadAssetAtPath);

var model = model3Json.ToModel();

}

// Update is called once per frame

void Update()

{

}

public static object BuiltinLoadAssetAtPath(Type assetType,string absolutePath)

{

if(assetType == typeof(byte[])){

return File.ReadAllBytes(absolutePath);

}else if(assetType == typeof(string)){

return File.ReadAllText(absolutePath);

}else if(assetType == typeof(Texture2D)){

var texture = new Texture2D(1,1);

texture.LoadImage(File.ReadAllBytes(absolutePath));

return texture;

}

return new NotSupportedException();

}

}

具体可以查看官方文档。

然后将文件挂载到一个空的GameObject上面。直接运行之后就会看到模型已经显示在场景上了。

Live2D for Unity入门篇 4x  第2张

在这期间遇到一个特别坑的问题。代码编辑器使用的IDE是VSCode,没有代码补全,提示是找打不到对应的.net framework版本。项目默认的版本是V4.1.1。尝试了以下方法:

  1. 从微软官方下载对应的开发者版本,因为系统无法卸载高级版本,但是我们可以安装多版本。(当然也有方法可以卸载,但是容易出现问题,不建议)
  2. 直接修改项目中Assembly- XXX文件 中的TargetFramworkVersion的版本。但是这个版本会自动覆盖,而且手动更改好像也无效。
  3. 百度的各种其他乱七八糟的方法。

最后实在没办法的情况下,下载了Visual Studio 2017来作为IDE,结果没想到安装好了之后,VSCode也好了。暂时还没有确定问题到底在哪儿。

自此,Live2D的入门也就完成了。下一步是动作文件的处理。

The End