前々回Meta Quest 3を買いました。
前回VRchat内でのPC作業環境を作ることができました。
パブリックワールドでPCの映像を表示してVR作業環境ができましたが、他の人から見ると虚無に向かってパントマイムをしている不審者にしか見えないのをなんとかしたいと思います。
この記事の目標はUnityと格闘してアバターから座れる椅子とPCデスクっぽいものを召喚し、作業中はなんかいい感じのキーボード叩いてるっぽい動きをさせることです。
最終的にこんな感じのセットをVRchatでどこでも呼べるようにします。
あんまり重いものを出現させるとアバターパフォーマンスがVery Poorとかになって
他人に表示させるときに通信負荷となりますのでご注意。
バックアップから新しいプロジェクトを作る
古い記事だとバックアップの取り方は書いていても復元させることまで書いてなかったりして分からなかったのでバックアップからやります。
破壊的な変更をしてアバターの動きがおかしくなったら困るのでバックアップ大事。
VCCを立ち上げてプロジェクトの・・・をクリックするとOpen Project Folderが出てくるので押します。
Users\~\AppData\Local\VRChatProjects に各プロジェクトが保存されているので、バックアップしたいプロジェクトのフォルダをコピーします。
VCCに戻ってCreate New Projectの隣りにある🔽からAdd Existing Projectをクリックしてさっきのコピーしたフォルダを選択します。これでバックアップの復元終わり。
椅子とPCデスクを召喚する
Boothなどから椅子とPCデスクを入手します。今回こちらのPCデスクを使わせてもらいました。
UnitypackageをインストールするとAssetsにPC_setが追加されます。
PC_setをHierarchyにドラッグアンドドロップします。
この状態ではキャラに重なってしまっているので、ちょうどいいところに動かします。
動かしたいパーツを選択した状態でHierarchyの上にある矢印アイコンで動かします。その隣の↺みたいなアイコンで回転できます。その隣は大きさを変えられます。Inspectorから直接Position、Rotation、Scaleをいじってもいいです。
椅子の高さはだいたい自キャラの膝の高さくらいにするのが良いと思います。
Chairの位置も座れるいい感じのところに動かしてください。
ペンタブがついていましたが使わないので消しました。
World固定でアイテムを出す設定をする
PCデスクを動かされたり振り回されたら作業にならないのでワールドに固定したアイテムを出せるようにします。
手動でやる方法もありますが、面倒なのでツールでやります。
Voyageという項目が増えるので「World Lock Setup - Constraints(PC)」を使います。
これはPC userのみなのでQuest版を使っている人はその下のParticlesを使うそうです。詳しいことはgithubの説明を読んでください。
毎回この画面が出るたびに最初に「リセット」を押す必要があるみたいです。押します。
表示させたいアイテムと自分のアバターをCtrlを押しながらクリックで一緒に選んでドラッグアンドドロップします。
適用ボタンが表示されるので押します。
HierarchyにWLAS~~みたいなクローンができるのでこれをアップロードします。
これでVRChatのメニューにPCデスクと椅子を召喚するボタンが追加されます。
これでどこでも仕事ができる。圧倒的感謝。
調べた感じだとChairに「Add Component」からVRC Stationを追加すればsit判定入れれるだろ!!、と思ってUnityと格闘していたのですがSDKコントロールパネルに「Stations found on Avatar, they will be adjusted to safe limits if necessary」とか書いてあってなんか制限かかってるっぽいです。昔は出来てたみたいなので、どこかで仕様変更されたんですかね。
アニメーションを追加する
空気椅子でPCカタカタしてるアニメーション追加したほうが早そうなのでON/OFFできるアニメーションを追加することにします。
どうやってアニメーションを作るんだって?世の中は金で解決します。
だいたい理想的なのがあったのでベースはこれにして改変を加えることにしました。
入手したanimファイルをアセットの中に突っ込みます。
ここを参考にExpression menuからVRCEmoteの値をいじってアニメーションをON/OFFできるように仕込みます。
ActionLayerの既存のエモートをタイピングエモートに書き換えるだけです。
注意点としてHas Exit Timeのチェックを外しておかないと完全にループしません。
Has Exit Timeのチェックが入ったままだと再生終了するたびに初期位置に戻るのでこうなります。
使用したいアバターによって高さ調整が必要になりますが、それはAnimation内のAnimator.Root TのRoot T.yの値を変えると高さをいじれますのでなんとかなります。
この値は時間ごとに設定されたものなので、最初のフレームだけではなく全てのフレームで同じ値にしないと異なる値をゆっくりと往復する=上下にフヨフヨすることになります。※この表示はCurvesをクリックすると出せます
うまく設定できれば一心不乱にキーボードを叩き続けるマイアバターを拝めます。
視線が動かないのが若干不気味なのでパラメータを適当に弄って首のところを動かしてみます。Animator.Head~みたいな値が顔の動きです。
ついでに腕の動きも増やしてみました。
猫背で腰を傷めそうな姿勢ですけどまあいいか…ということでアニメーション完成です。
シェーダーをいじる
おまけです。やらなくてもいい内容。
タイピングモーションにはなんか透明な板を出したり消したりするパーティクルもついてました。
頑張ったらこれも実装できそうな予感。(しんどそうだからやらない)
でもPC画面はちょっといじれそうなのでいじります。まずはPCモニタのシェーダーをpoiyomiに変えます。シェーダーの入手はここから
liltoonでもできるみたいですが、poiyomiはgifをシェーダーとして使えるので1920x1080のイケてるgifを表示できるんですよ。こんな感じに。
素材はこちらのサイトをgifにしたものです。適当にカチャカチャ文字打つだけでスーパーハッカーになれます。
gifを作ったらAssetのところにgifを突っ込んで右クリから
Thry>Flipbooks>Gif 2 TextureArrayを選びます。
しばらくすると新しくファイルが生成されるのでシェーダーの設定の中のFlipbookのTexture Arrayにドラッグアンドドロップで突っ込みます。
これで終わりです。テクスチャだけで容量109.05MB…?
流石に人様に迷惑なのでTexture Arrayを使うならGifのフレーム数はかなり絞ったほうが良さそうです。50フレームから10フレームに削ったら15MBに下がりました。
フレーム数を削った分FPSは下げる必要があります。
完成!
全部終わったので動作確認しました。
キーボード叩くアニメーション中は首の方向を向いてしまいますが、前回のVRchat記事で書いたごろ寝システムのアンカー機能を使ったところ固定できました。
PC画面が暗いのはシェーダーのFlipbookのEmission Strengthを上げて2くらいにしたら直りました。
以上
圧倒的成長。