ランタイムでモデルを読み込む
最終更新: 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を作成します。
その後、作ったGameObjectにInitModel.csをアタッチします。
次に読み込むためのモデルを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でインポートイベントをフックに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()の引数にtrueを渡します。
var model = model3Json.ToModel(true);