「Live2D Unity 文档翻译」在运行时加载模型

本文翻译自:https://docs.live2d.com/cubism-sdk-tutorials/initializemodel/

译者注:注意!这并不是一篇严谨的翻译,本人并不是翻译行业从业者,也根本不会日文。官网的中文翻译会连带代码一起翻译,而且还不如机翻日文,官网的英语翻译版本有的语法很奇怪,看起来也是机翻。本文主要来自日文机翻,然后再结合实际开发经验调整到通顺,修改不该翻译的东西并润色。

[最后更新日期: 2020/01/30] 译者注:这是这个日文原文的更新日期。

在这里,我们将说明如何通过脚本初始化和显示模型。

概览

在 2.1 版本中,使用 InitloadModelsetTexture 初始化模型,加载模型并设置纹理。

在 3.0 及更高版本中,LoadAtPath 和 ToModel 可用于初始化模型,加载模型,设置纹理以及更新 / 绘制。

首先创建一个脚本并从指定路径加载模型。

然后, ToModel() 来显示已经加载的模型。

这时,这个脚本已经被编写为从 StreamingAssets 中读取。(译注:就是完事了的意思,做到这步就已经完成了在运行时加载模型)

细节

在 2.1 之前,使用 Live2D.Init() 初始化 Live2D 之后,使用 Live2DUnity.loadModel 加载模型。

  1. Live2D.Init();
  2. var live2dModel = Live2DModelUnity.loadModel((T)Resources.Load(path) as T);

之后,通过以下形式设置纹理,并使用 ALive2DModel.update()ALive2DModel.draw() 更新并绘制模型。

  1. live2dModel.setTexture(textureNumber, texture);

在 3.0 及更高版本中,流程已完全重新设计,使用 CusbimModel3Json.LoadAtPath 加载模型后,调用.ToModel()以显示模型。

此外,将自动创建并显示 Prefab,并且无需从脚本中编写.update().draw()即可更新该图。

现在,我们要使用 Cubism 3 SDK for Unity 初始化并显示模型。

首先,创建脚本编写从路径加载模型的代码。

创建一个新的 C# 脚本并将其命名为 InitModel.cs

编写 InitModel.cs 如下。

  1. using System;
  2. using System.IO;
  3. using Live2D.Cubism.Framework.Json;
  4. using UnityEngine;
  5. /// <summary>
  6. /// Initialize model.
  7. /// 初始化模型
  8. /// </summary>
  9. public class InitModel : MonoBehaviour {
  10. void Start ()
  11. {
  12. //Load model. 加载模型
  13. var path = Application.streamingAssetsPath + "/koharu.model3.json";
  14. var model3Json = CubismModel3Json.LoadAtPath(path, BuiltinLoadAssetAtPath);
  15. var model = model3Json.ToModel();
  16. }
  17. /// <summary>
  18. /// Load asset. 加载资源。
  19. /// </summary>
  20. /// <param name="assetType">Asset type. 资源类型。</param>
  21. /// <param name="absolutePath">Path to asset. 资源的路径。</param>
  22. /// <returns>The asset on succes; 在成功时返回这个资源;<see langword="null"> otherwise.</returns>
  23. public static object BuiltinLoadAssetAtPath(Type assetType, string absolutePath)
  24. {
  25. if (assetType == typeof(byte[]))
  26. {
  27. return File.ReadAllBytes(absolutePath);
  28. }
  29. else if(assetType == typeof(string))
  30. {
  31. return File.ReadAllText(absolutePath);
  32. }
  33. else if (assetType == typeof(Texture2D))
  34. {
  35. var texture = new Texture2D(1,1);
  36. texture.LoadImage(File.ReadAllBytes(absolutePath));
  37. return texture;
  38. }
  39. throw new NotSupportedException();
  40. }
  41. }

在「层级/Hierarchy」窗口中右键单击,然后单击「创建空对象/Create Empty」以创建一个空的游戏对象。 之后,将 InitModel.cs 附加到创建的游戏对象上。

img

然后添加模型到 assets 里以便加载。

因为这次从 StreamingAssets加载,因此选择 Assets 文件夹之后,右键单击 Project 窗口空白处,然后创建一个新文件夹。

将新文件夹名字更改为StreamingAssets

关于 StreamingAssets 请参阅 Unity - Manual: Streaming asset

像图中一样添加模型到 StreamingAssets

img

最后按下 Unity 的 「播放/play/▶」按钮,模型将会显示在屏幕上。

现在你已经可以从脚本中初始化并显示模型了。

img

还有一个使用 ToModel()的示例。

请看下面的链接。

[Live2D GitHub]CubismModel3Json.cs

https://github.com/Live2D/CubismUnityComponents/blob/develop/Assets/Live2D/Cubism/Editor/Importers/CubismModel3JsonImporter.cs

在这里,AssetImporter 用于hook 导入事件,而 ToModel 用于生成模型 GameObject。

[Live2D GitHub] CubismViewer.cs

https://github.com/Live2D/CubismViewer/blob/develop/Assets/Live2D/ Cubism /Viewer/CubismViewer.cs

在这里,从绝对路径加载模型文件后,将使用 ToModel 生成模型。

关于 Original Workflow 方式

[2019/01/31 追加] 译注:翻译自日文原文

如果希望由 .ToModel() 创建的 Prefab 使用 Original Workflow 方式,请将作为参数传递给 CubismModel3Json.ToModel()

  1. // OW 方法加载模型
  2. var model = model3Json.ToModel(true);