開発blog?とりあえず何でもやってみる人。試した結果などの記録的な何か(笑)。参考にでもなれば嬉しい。利用制限はありません。リリースするまでに至ってしまったという...(タイムスタンプを見ると、試しにライブステージ導入してから、アプリリリースまで4日しかかかってない←夢中になるといつの間にかアプリを完成させてしまうことも多い(笑))。VRMViewerを試していて、プラグイン使ったらAndroidに簡単に移植できそうだな~、と思ってやってみたら成功した(笑)。アリシア、プロ生ちゃん、東北ずん子、琴葉茜葵、ナカシス、あといくつかニコニ立体からDLして試したけど上手く行くようだ。VRoidはテカるのが残念。これは色々応用できそうだ。読み込み、利用する方法を書いておこう。バーチャルキャストで使われるアバターフォーマットではあるが、リアルタイムで読み込むことができるので、あらかじめモデルをアプリに入れてビルドする必要もなく、読み込みもそれほど時間はかからないので、応用範囲は広いと思う。動的に読み込めるのは画期的だとさえ思う。アクションでも、好きなキャラで遊べるゲームとかも作れそうだしね(もちろん、大きさやコライダの判定などの問題もあるが、あくまで可能性として(笑))。アイデアは常に新しい発想から生まれるので、既成概念に捕らわれずに色々やってみると良いと思う。それがいつか新たな作品に繋がる。内に読み込んでしまえば、プラットフォームに関係なく扱えると思うので(見た目はシェーダなどのせいで多少変わることもあるが)、ひとつの方法として覚えておけば色々活用できるだろう。Windows版を出しているが、ファイル読み込みやダイアログなどプラットフォーム固有のもの以外は全て同じだ。実際にシーン1つだけでビルドしている。複数のプラットフォーム対応も簡単にできることがわかる。いうオープンソースが必要となる。License」となるので、その辺りは各自で確認して欲しい。比較的緩いライセンスだ。ついでに参考資料も載せておこう。プラットフォームに切り替えておいた方が良いかも知れない。等)を再コンパイルしたりするのに結構時間がかかる(笑)。バージョンなど)の他に「UniVRM-RuntimeLoaderSample-x.xx_xx.unitypackage」のインポートも必要になる。本体「UniVRM-x.xx_xxx.unitypackage」を先にインポートしてから、ランタイムローダ「UniVRM-RuntimeLoaderSample-x.xx_xx.unitypackage」をインポートしよう。動的読み込みに必要なものはこれだけで良い。インポートが終わったら、次にプロジェクトビューで「Assets/VRM.Samples/Scenes」で、シーン「VRMViewer」を開いてみよう。等他のプラットフォームの読み込み方法もわかると思う。Viewer」はこのシーンを元ベースとしている(見た目もたいして変わってないのでわかると思うが(笑))。利用アプリを見てみると、たぶん同じようにこれを改造してるものが多い気がする。エクスポートできるアプリを作るなら、シーン「VRMRuntimeExporterSample」あたりを見てみると良いと思う。オープンソースなのだから、遠慮なく使わせて頂こう(笑)。動的に読み込んで、シーン上にモデル(アバター)をロードすることができる。この辺りから少し改造していこう。UI」にそのコードが書かれている。開かれる(シングルクリックなら、プロジェクトビューで移動できる)。2.「ViewerUI.cs」を開いたら、検索で「OnOpenClicked」を探してみよう。これが前述した「Open」ボタンのイベントハンドラとなっている。ここのコードを見てみるとプリプロセッサディレクティブ(#if~文)でプラットフォームが分けられている。エディタ上でもテストできるようにディレクティブ(UNITY_EDITOR_WIN)を付け加えておこう。ある場合の条件」である。プラットフォーム依存コンパイルを上手く使えば、複数のプラットフォームを分別することも可能だ。コードは見づらくなるので、機能まるごとみたいな場合は、クラスごとに用意するという手もある。今回は一部を改造して使うので、この方法でやっていこう。・プラットフォーム依存コンパイル3.「UNITY_EDITOR_WIN」を入れたら、グレーアウトしていた文字が見えるようになったと思う。「FileDialogForWindows.FileDialog」の方にエラーが出たかも知れない。これも同じプラットフォーム依存なので、「FileDialogForWindows」部分にカーソルを合わせ、「F12」を押せば、クラスがまるごとグレーアウトしてるのがわかる。#if~文に追加しよう。}}これでコンパイルが通るようになったと思う。Unityエディタに戻ってプレイしてみよう。「Open」ボタンを押して適当な「~.vrm」を読み込んで見ると良い。ニ立体で多く配布されているので、いくつかダウンロードしておくと良いだろう。「ニコニ立体ちゃん」ことアリシア・ソリッドはとても軽いのでテストするにはもってこいだ。Viewer」では非同期読み込みの方を利用している。非同期読み込みを使うには「.NET4.x」にする必要があるので、ここでは割愛)。標準機能には無いので、ここではプラグインを使うことにする(自分で作ったものがあれば、それでも良い)。等で公開されてるアプリなどにも利用されている。「〇〇というアプリを作ってるんですが、使わせて貰って良いですか?」と聞かれるようになったので、気兼ねなしに使えるようにアセットストアにも出したという経緯もある)。AssetStore版を例にしている)。セットアップは以前の記事にあるので、そちらを参照して欲しい。GoogleDrive版では一部ファイル名やパス、素材が違うくらいで、内容的には同じだ。注意点は「Plugins」フォルダを「Assets」直下に移動し、「Plugins/Android」フォルダにあるサンプルのマニフェストファイル(AndroidManifest.xml)を用意しておくということだ(テストだけなら、"AndroidManifest_demo.xml"[AssetStore版]、または"AndroidManifest_test.xml"[GoogleDrive版]を複製してリネームすれば良い)。・AssetStore版のセットアップ・GoogleDrive版のセットアップ1.プラグインのインポートとセットアップの準備が済んだら、プロジェクトビューの検索で「StorageOpenFileController」のプレファブを見つけよう。ファイルの情報を受け取れるようになる。ストレージの読み取りなどにはパーミッションなども必要になるが、前述のデモのマニフェスト("AndroidManifest_demo.xml"など)を使ってる分には既に含まれている(「READ_EXTERNAL_STORAGE」または「WRITE_EXTERNAL_STORAGE」が必要。デモにはそれ以外の権限も含まれているが、通常は不要な権限は削除した方が良い→ユーザーにインストを拒否られる確率が高くなるため)。ときと違い、自動で出なくなった(?))。アプリでパーミッション(権限)要求をする・READ_EXTERNAL_STORAGE(ファイル読み取り権限)・WRITE_EXTERNAL_STORAGE(ファイル読み書き権限)2.次に「StorageOpenFileController」で取得したファイル名を受け取るハンドラを、元のコード「ViewerUI.cs」の「OnOpenClicked」に追加しよう。書き方は前述のコードに追加する形となる。プラットフォーム用に書いておこう。FantomLib;」を入れておくことを忘れずに。・・・(略)・・・}※この例はやっつけ的なコードなので、「StorageOpenFileController」をインスペクタで登録できるようにしたり、任意にまとめたりして使って下さい(笑)。"")にしていることに注意して欲しい。これはすぐ下にある「string.IsNullOrEmpty(path)」で一旦終了することを意味する。取得したパスを受け取るハンドラを作成する必要がある。ここでは簡略のため、元の「OnOpenClicked()」内のコードを一部まるっとコピーして、もう1つ「OnStorageOpenFile()」というメソッドを定義した(メソッド名は任意)。以前は拡張子分岐は無いが、同じように「LoadModel(path)」を呼べば良い。OnStorageOpenFile(path)」へ行くように書き換えても良いだろう。その辺りはお任せする(笑)。コード自体はこれで良い。4.後はヒエラルキーに戻って「StorageOpenFileController」のコールバック「OnResult」に先程の「OnStorageOpenFile(String)」に登録しよう。これで一応完成である。ビルドして動作確認してみよう。Settings...」を開いてシーン「VRMViewer」を追加してビルドしよう。ビルドに関してはいくつか注意点があるので、以下を参照して欲しい。from~(パス)\AndroidManifest.xml」と出る。ここまでできれば、例えば以前の「VRoid(VRM)を動かす」のようにして、ゲームに使うことも可能だろう。1つ1つの技術は結構手間のかかるものだと思うが、プラグインも含め、全て無料でできるので、これを使わない手はない(笑)。今までにない新たな利用法を考えてみるのも良いだろう。読み込んで動的にアバターを召喚(笑)しただけだが、実際にスマートフォンで利用するには画面解像度・回転の対応やピンチなど、使い勝手を良くした方が良いだろう。プラグインにはそういったスマホらしい操作(ピンチ・スワイプ・ロングタップ等)の例も入っている。版はまさにその使用例なので、動作確認にインストして動かしてみるのも良いだろう(またはプラグインのデモもQRコードからインストできるようにしてあるので参考に)。以前から気になっていた表情「Joy」と口パクの2重モーフを、名前で判断して除外する方法を試してみた。Joyはユーザー定義なので全てとはいかないが、VRoid等決まった名前で作られている場合有効のようだ。ニ立体のもほとんど行ける。いやしかしVRoidモデルも結構個性あるね(笑)。以前作ったARでキャラを大量召喚するサンプルに少し手を加えて、今度は動的に読み込んだVRMをAR召喚する実験をしてみた。意外とスンナリ行けるね。現実世界に召喚すると、身長とか体型とかリアルに感じられるのが良い。