CVVTuberExample の VRMCVVTuber を動かす


概要

Unity アセットの CVVTuberExample の中に同梱されている、
VRMCVVTuberExample を動かすのに少し修正が必要だったのでメモ

CVVTuberExample とは

OpenCV と Dlib を使って簡単に VTuber システムを作るもの。
その中でも VRMCVVTuberExample は、VRMモデルを利用したもの。

利用したもの

OpenCV for Unity(有料)
Dlib FaceLandmark Detector(有料)
CVVTuberExample
UniVRM(今回は現時点で最新の0.49を利用)
VRMモデル(今回は AliciaSolid.vrm を利用、お好きなキャラクターでお試しください VRoid Hub オススメ)
Webカメラ Logicool C270

セットアップ

  1. Asset Store から CVVTuberExample をインポート
  2. CVVTuberExample/CVVTuber/Addons/VRMCVVTuber.unitypackage をダブルクリックしてインポート
  3. CVVTuberExample/CVVTuber/Addons/VRMCVVTuber/Examples/VRMCVVTuberExample.unity をダブルクリックしシーンを読み込み
  4. Asset Store から OpenCV for Unity をインポート
  5. Asset Store から Dlib FaceLandmark Detector をインポート
  6. インポートした OpenCVForUnity, DlibFaceLandmarkDetector の中にある StreamingAssets フォルダを、Assets 配下に移動する
  7. UniVRM をインポート

VRM モデルを読み込む

Assets 配下の適当なところに、ダウンロードしてきた vrm ファイルを D&D
出来上がった prefab を Hierarchy に D&D

その後、Hierarchy の VRMCVVTuberExample 内の VRMControllManager を選択し
Inspector に表示される VRM Loader (Script) 内の Meta に読み込んだモデルを選択する

コードの修正

今のままだと、エラーが出たままで実行できないので、修正します。
原因はおそらく UniVRM の仕様が昔から変わってるからだと思います。

VRMCVVTuberControllManager.cs を修正する

67行目あたり

VRMCVVTuberControllManager.cs
((VRMHeadRotationController)item).target = vrmLoader.lookAtHead.Head.Transform;

VRMCVVTuberControllManager.cs
((VRMHeadRotationController)item).target = vrmLoader.lookAtHead.Head;

VRMLoader.cs を修正する

56行目あたり

VRMLoader.cs
var context = new VRMImporterContext (path);
context.ParseVrm (bytes);

VRMLoader.cs
var context = new VRMImporterContext ();
context.ParseGlb(bytes);

これで実行できるようになります。

おまけ

VRMLoader.cs の修正部分は、ランタイムロードを使う部分なので、
そのまま動かす場合は関係ないですが、実行できるようにするために必要です。

ランタイムロードを確認する場合は、StreamingAssets 配下に vrm ファイルを配置します。
また、Hierarchy の VRMCVVTuberExample 内の VRMControllManager を選択し
VRMCVV Tuber Controll Manager (Script) の Use Runtime Loader にチェックをいれて
VRM Loader (Script) 内の VRM File Name StreamingAssets 配下からの vrm ファイルのパスを入力してください。
StreamingAssets/Model/AliciaSolid.vrm と配置していたら Model/AliciaSolid.vrm と入力する。

これで VRM モデルのランタイムロードができます。
この場合は、モデルの prefab を Hierarchy においておく必要がありません。