キャラクターモデルをUnityで読み込みたいと思い、VRMファイルの実行時読み込み(Runtime Load)を調べてみました
環境は以下になります
・Windows11
・Unity 2022.2.19f
・VRM1.0
VRMについては公式ページをご覧ください
https://vrm.dev/vrm/index.html
ランタイムでのロード方法
読み込みだけなら、以下のコードで実現できました
using UnityEngine;
using UniVRM10;
public class VRMLoader : MonoBehaviour
{
async void Start()
{
string path = "vrmファイルへのパス";
Vrm10Instance vrm10Instance = await Vrm10.LoadPathAsync(path);
}
}
ステップバイステップでVRMファイルを読み込む
全体を通しての作業は以下になります
1.UniVRMパッケージを導入
Releases · vrm-c/UniVRM (github.com)
上記ページからUniVRMのパッケージをダウンロードします
ダウンロードしたパッケージをUnityに読み込みます
パッケージに含まれるファイルを読み込みます
読み込みの過程で推奨設定を提示されることがあるため、特に理由がなければ「Accept All」を選択して反映させます
以上でUniVRMパッケージの導入は完了です
2.VRMモデルをロードする
VRMモデルの作り方は公式ドキュメントをご確認ください
VRMファイルを作ってみたい – VRM ドキュメント
モデルはBoothなどでたくさん販売されているので、お好みのモデルを準備してください
今回は「Lua」ちゃんを利用させていただきました
まずはUnity上に空オブジェクトを作成します
作成した空オブジェクトに以下のスクリプトをアタッチします
パスは絶対パスで指定していますので、読み込みたいモデルに合わせて適宜変更してください
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniVRM10;
public class VRMLoader : MonoBehaviour
{
// Start is called before the first frame update
async void Start()
{
string path = "F:\\Project\\Unity\\UniVRMLoad\\LuaV3_FullSet.vrm";
Vrm10Instance vrm10Instance = await Vrm10.LoadPathAsync(path);
vrm10Instance.gameObject.transform.position = Vector3.zero;
}
// Update is called once per frame
void Update()
{
}
}
スクリプトをアタッチすると、こんな感じになります
3.実行してみる
読み込むだけなら、以上の設定でモデルの読み込みが行えます
エディタのプレイボタンを押して実行してみてください
非同期読み込みのため、モデルが表示されるまで若干の遅延がありますが、モデルを読み込むことができました!
ここまでの操作ではVRMモデルを読み込むまでになります
実際には読み込んだモデルに対して動的に各種コンポーネントを設定していくことになると思います
読み込んだモデルは「vrm10Instance.gameObject」を利用することで、UnityのGameObjectにアクセスすることができます
以上です
今回はUnityでVRM1.0のファイルを動的に読み込む方法を紹介しました
コード自体はChatGPTに(ベース部分は)生成してもらいましたが、たしか学習データが2021年までしかないため、VRM1.0で読み込めるように手直しした感じになります。
プログラム生成にChatGPTが利用されることが多くなってきましたが、(ChatGPTが学習していない)最新技術のキャッチアップという点では、まだまだWeb記事に軍配が上がるのかなと思っています
(といっても、UniVRM1.0のリリースが2022年9月なので、それほど新しい技術でもないですが、でも、なぜかVRM1.0に対応したロード方法の記事が見つからなかったので、今回記事にしてみました)