Unity:VRMファイルの使い方(UniVRM、人気アセット)
目次
はじめに
以下、公式のドキュメントから引用させていただきます。
VR(Virtual Reality)やVTuberなどにおいて「キャラクターや人型のアバター(の3Dモデル)」を取り扱おうとした場合、従来はアプリケーションごと・3Dモデルデータごとに独自のシステムを開発したり細かく調整したりする必要がありました。
・・・
「人型のキャラクターやアバター」において細かいモデルデータの差違を吸収・統一しアプリケーション側の取り扱いを簡単にする
つまり?
結局何が言いたいのかというと、様々な3Dモデルデータが存在する中、人型の3Dモデルを統一的に扱うための新しいフォーマットを作ったよって事です。
特徴としては以下になります。
- gLTF 仕様 を拡張して使っています。
- 人型のボーンがデフォルトで定義します。
- 3Dソフトでバラバラな座標系・スケールなどを統一します。
- 人型の目の位置を定義します。
- 著作権の扱いを標準的に定義します。
VRMで何ができるの?
VRMファイルは人型を扱うためのファイルフォーマットなので、VRMに対応したプラットフォームやシステムなどがあれば基本的に使えます。
今回の記事では Unity を使いますが、もちろん Unity でも扱えるためのアセットが存在しますのでそれを使います。
VRMの使い方
さっそく、Unity で VRMファイルを使うための手順に入りたいと思います。
UniVRM のインストール(導入)
UniVRM のリリースページから最新の .unitypackage をダウンロードしましょう。
ダウンロードしたら、Unity画面の「Assets > Inport Package > Custom Package」 で先ほどダウンロードしたファイルを選択しましょう。
UniVRMがインポートできると、以下のようにメニューとAssetsフォルダにVRM関連の機能が追加されます。
VRM モデルを使う
VRMファイルがないとそもそも確認できないので今回は、公式ページのトップページ画像にも使われている、「ニコニ立体ちゃんのアリシア・ソリッド」を使わせていただきます。
ダウンロードすると、以下のように「~.vrm」のファイルがありました、これを Unity でインポートして使ってみましょう。
Unity で VRMモデルを使う方法(インポート方法)は、大きく分けて2パターンの方法があります。
- Prefabとして静的に配置する。
- C#スクリプトで動的に配置する。
Prefabで静的な使い方
「~.vrm」ファイルを、ドラッグアンドドロップで Assets に配置すると自動的にインポートがおこわれ、Prefabが作成されます。
以下のように、Prefabが作成されます。
Prefabが作成できたら、次に「Hierarchy」にPrefabをドラッグアンドドロップしてみましょう。
どうでしょうか、簡単にVRMファイルが使えるようになりました!すごいですね!!
C#スクリプトから動的な使い方
続いては、C#スクリプトからランタイム(動的)にロードを行ってみましょう、Unityでは、Resource/StreamingAssets などファイルをそのまま置いてAPIからロードする事ができます。
今回は、StreamingAssetsフォルダにファイルを置いて試してみましょう。
アセットフォルダに、「StreamingAssets」フォルダを新規作成し、「AliciaSolid.vrm」ファイルをその下に配置します。
次に、VRMLoaderオブジェクトを作成して、VRMLoaderのC#スクリプトを追加します。
C#スクリプトは、以下のようになります。
指定のパスからVRMファイルを読み込んで、読み込みが成功したらPostision=(1, 1, 1) に移動するって感じのスクリプトになります。
using UnityEngine;
using VRM;
public class VRMLoader : MonoBehaviour
{
void Start()
{
var path = Application.streamingAssetsPath + "/" + "AliciaSolid.vrm";
VRMImporter.LoadVrmAsync(path, gameObject =>
{
gameObject.transform.position = new Vector3(1, 1, 1);
});
}
}
上記のスクリプトでの読み込み方法についてですが、最新バージョンだと「[Obsolete(“use VVRMImporterContext.LoadAsync”)]、旧型式です」と警告が表示され、非推奨になっているので新しい方法のスクリプトは以下のようになります。
using UnityEngine;
using VRM;
public class VRMLoader : MonoBehaviour
{
void Start()
{
var path = Application.streamingAssetsPath + "/" + "AliciaSolid.vrm";
var context = new VRMImporterContext();
context.Parse(path);
context.LoadAsync(() =>
{
var gameObject = context.Root;
gameObject.transform.position = new Vector3(1, 1, 1);
context.ShowMeshes(); // メッシュの表示・ここ重要
});
}
}
他のアセット情報
- Unity受賞一覧
- 人気のアセット一覧
- Unityでおすすめアセット集(2019/11更新)
- Unity:初心者におすすめの無料アセット12選
- Unityのおすすめアセット 5選(カメラ編)
- Unityのおすすめアセット 4選(アニメーション編)
- Unityのおすすめアセット 4選(データ編)
- Unityのおすすめアセット 4選(AI編)
- Unityのおすすめアセット 3選(ポストエフェクト編)
- Unityのおすすめアセット 7選(AR・VR・MR編)
- Unityのおすすめアセット 5選(ネットワーク編)
- Unityのおすすめアセット 5選(シェーダー編)
- Unityのおすすめアセット 6選(レンダリング編)
- Unityのおすすめアセット 7選(UI・GUI編)
- Unityのおすすめアセット 4選(スクリプティング)
- Unityのおすすめアセット 5選(モバイルネイティブ機能)
- Unityのおすすめアセット 7選(モデリング)
- Unityのおすすめアセット 50選 ゲームジャム(GameJam) ハッカソン(Hackathon)
- 人気のモデル(キャラクター)
よければ、SNSにシェアをお願いします!