在运行时导入模型

最終更新: 2020年1月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”以创建一个空的GameObject。
之后,将InitModel.cs附加到创建的GameObject。

接下来,将要导入的模型追加到Assets文件夹。
这次是从StreamingAssets中导入的,所以选择Assets文件夹,右键单击Project视窗,然后新建一个文件夹。
将新文件夹名称变更为“StreamingAssets”。
关于StreamingAssets,请参考Unity 手册:流媒体资源

如图片所示,将模型追加到StreamingAssets。

最后,按下Unity播放按钮,模型显示即完成。
现在您可以从脚本对模型进行原始化和显示。

此外,还有一个使用ToModel()的例子。
下面有一个链接,敬请参考。

[Live2D GitHub]CubismModel3Json.cs
https://github.com/Live2D/CubismUnityComponents/blob/develop/Assets/Live2D/Cubism/Editor/Importers/CubismModel3JsonImporter.cs
这里使用AssetImporter来挂钩载入Event,使用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方法时,请将true传递给CubismModel3Json.ToModel()的参数。

var model = model3Json.ToModel(true);
请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。