本文翻译自:https://docs.live2d.com/cubism-sdk-tutorials/initializemodel/
译者注:注意!这并不是一篇严谨的翻译,本人并不是翻译行业从业者,也根本不会日文。官网的中文翻译会连带代码一起翻译,而且还不如机翻日文,官网的英语翻译版本有的语法很奇怪,看起来也是机翻。本文主要来自日文机翻,然后再结合实际开发经验调整到通顺,修改不该翻译的东西并润色。
[最后更新日期: 2020/01/30] 译者注:这是这个日文原文的更新日期。
在这里,我们将说明如何通过脚本初始化和显示模型。
概览
在 2.1 版本中,使用 Init
,loadModel
和 setTexture
初始化模型,加载模型并设置纹理。
在 3.0 及更高版本中,LoadAtPath 和 ToModel 可用于初始化模型,加载模型,设置纹理以及更新 / 绘制。
首先创建一个脚本并从指定路径加载模型。
然后, ToModel()
来显示已经加载的模型。
这时,这个脚本已经被编写为从 StreamingAssets 中读取。(译注:就是完事了的意思,做到这步就已经完成了在运行时加载模型)
细节
在 2.1 之前,使用 Live2D.Init()
初始化 Live2D 之后,使用 Live2DUnity.loadModel
加载模型。
Live2D.Init();
var live2dModel = Live2DModelUnity.loadModel((T)Resources.Load(path) as T);
之后,通过以下形式设置纹理,并使用 ALive2DModel.update()
和 ALive2DModel.draw()
更新并绘制模型。
live2dModel.setTexture(textureNumber, texture);
在 3.0 及更高版本中,流程已完全重新设计,使用 CusbimModel3Json.LoadAtPath
加载模型后,调用.ToModel()
以显示模型。
此外,将自动创建并显示 Prefab,并且无需从脚本中编写.update()
或.draw()
即可更新该图。
现在,我们要使用 Cubism 3 SDK for Unity 初始化并显示模型。
首先,创建脚本编写从路径加载模型的代码。
创建一个新的 C# 脚本并将其命名为 InitModel.cs
。
编写 InitModel.cs
如下。
using System;
using System.IO;
using Live2D.Cubism.Framework.Json;
using UnityEngine;
/// <summary>
/// Initialize model.
/// 初始化模型
/// </summary>
public class InitModel : MonoBehaviour {
void Start ()
{
//Load model. 加载模型
var path = Application.streamingAssetsPath + "/koharu.model3.json";
var model3Json = CubismModel3Json.LoadAtPath(path, BuiltinLoadAssetAtPath);
var model = model3Json.ToModel();
}
/// <summary>
/// Load asset. 加载资源。
/// </summary>
/// <param name="assetType">Asset type. 资源类型。</param>
/// <param name="absolutePath">Path to asset. 资源的路径。</param>
/// <returns>The asset on succes; 在成功时返回这个资源;<see langword="null"> otherwise.</returns>
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;
}
throw new NotSupportedException();
}
}
在「层级/Hierarchy」窗口中右键单击,然后单击「创建空对象/Create Empty」以创建一个空的游戏对象。 之后,将 InitModel.cs
附加到创建的游戏对象上。
然后添加模型到 assets
里以便加载。
因为这次从 StreamingAssets
加载,因此选择 Assets 文件夹之后,右键单击 Project 窗口空白处,然后创建一个新文件夹。
将新文件夹名字更改为StreamingAssets
。
关于 StreamingAssets
请参阅 Unity - Manual: Streaming asset 。
像图中一样添加模型到 StreamingAssets
最后按下 Unity 的 「播放/play/▶」按钮,模型将会显示在屏幕上。
现在你已经可以从脚本中初始化并显示模型了。
还有一个使用 ToModel()
的示例。
请看下面的链接。
[Live2D GitHub]CubismModel3Json.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()
。
// OW 方法加载模型
var model = model3Json.ToModel(true);