🙀

Oculus Quest2で手に乗る3Dキャラ作成(MRTK)

2021/10/25に公開

Oculus Quest2で手に乗る3Dキャラ作成(MRTK)!

「手乗りちょまぎょアプリ開発で学ぶMRTK入門」を参考に作成しました!
https://qiita.com/chomado/items/d4ff1edae797dfbd3c45!

1.Unityで新規プロジェクトを作成

2019.4.15f1で開きました。
名前は3Dchomagyoにしました。

2.MRTKを入れる

この手順は「Oculus Quest2 入門(8) -MRTK」を参考にして、↓の9番までやります。
https://note.com/npaka/n/n159027eb708c
パッケージ名の変更
Edit→Project Settings…→Player→Product Nameの頭文字が数字か_だとBuildができないため注意!

3.アプリの作成

Assets storeからDog Knightをインストール。(3Dモデル)

3Dモデルは自由なので、自分の好きなモデルで作ってみてみてください。
3Dモデルが決まらない人はキューブで作ってみてください。
HierarchyにGame Objectを作成。

Assets/Dog Knight/PrefabのDog PolyartをGame Objectにドラッグ。

位置を調整します。スケールは手のひらに収まるぐらいにします。

掌に追従するソルバーの設定

Game Object→Add Component→Hand Constraint Palm Upをアタッチ。
Hand Constraint Palm Upは手のひらの表裏の動きを検出し、オブジェクトを制御するためのソルバー。

Hand Constraint Palm UpをアタッチするとHand BoundsとSolver Handlerも一緒にアタッチされます。

重力の設定を行う

Game Object→Add Component→Rigid bodyをアタッチ。
・重力の設定
Game Object→Add Component→Box Colliderをアタッチ。
・当たり判定

そうすると、再生ボタンを押した時にキャラが奈落に落ちていきます。

初期床の作成

Hierarchyから3Dオブジェクト→Plane
サイズはキャラが乗るくらいに設定
position X:0 Y:0.205 Z:1
Rotation X:0 Y:0 Z:0
Scale X:0.025 Y:0.025 Z:0.025
床に色もつけます。
Assets/MRTK/SDK /Features/UX/Interactable/Materialsから
HolographicBackPlateをPlaneにドラッグします。

手の検出イベントに合わせて重力の設定を切り替える

キャラクターを安定して手に乗せておくために重力の設定を切る必要があります。
手を検出したら重力の設定をOFF、手をロストしたらONにする。
Game ObjectのInspectorビューを開き、Hand Constraint Palm UPコンポーネントを表示。

On First hand Detected()の+ボタンをクリックしてイベントを追加します。イベント欄のNone(Object)にGame Objectをドラッグします。

プルダウンからGame Objectの重力の有効無効を切り替えるイベントを指定します。
Rigid body→bool use Gravity
イベントにRigid body. use Gravityが設定されたら、チェックボックスのチェックを外します。
これで手が検出時にuse Gravityの設定がOFFになり、重力が無効化されるようになりました。

同様に手がロスト時の重力有効化イベントを設定します。
On Last Hand Lostに同じ手順でイベントを設定し、チェックボックスにチェックを入れます。
これで手がロスト時にuse Gravityの設定がONになり、重力が有効化されるようになりました。

次に手乗り時の動きを安定させるため、手を検出中の時、Rigid bodyを静止状態にしておきます。
On Hand Activeに同じ手順でRigid body. Sleepの設定をします。これで手の検出中はキャラが静止状態でいます。

4.Build&Run

PcとOculusをUSBケーブルで繋ぎます。その後、
File→Build Settings→Android→Run deviceから接続したOculusを選択し、Build&Runを押すと起動します。

5.ボタンで制御してみる

ボタンを追加します。
メニューバーのMixed Reality Toolkit→Toolbox→HoloLens2 Toggle Button 32×32を選択します。

ボタンの位置は自分が押しやすい場所にします。

スクリプトを書く

左下のprojectの+をクリックして、Folderを作成。ファイル名はScriptsにします。
次に、作ったScriptsの中にスクリプトを作成します。Scripts選択しながら左上の+をクリックして、C# Scriptを選択します。
スクリプト名はsampleにします。
VS Codeでsampleを開きます。
スクリプトの中身を書き換えます。

スクリプトの説明
・bool型はtrueかfalseのどちらかのみを保存できる。
・startは最初の一回だけ呼び出される。(初期設定)
この場合は「inclicked = true 」が1回だけ呼び出される。
・ !で反対の意味にする。trueだったらfalse
・if もし〜だったら
この場合はもし、inclickedがtrueだったらHand Constraint Palm UPをtrue(有効化)
・else if さっきの条件には一致しないけど、こっちの条件には一致する場合に使う。
この場合は、上記の条件がtrueなので、falseだった場合はHand Constraint Palm UPをfalse(無効化)

書き換えたらsaveをして、Unityに戻ります。

Game Objectにsampleをアタッチします。
SampleスクリプトをGame Objectにドラッグします。

次に、ボタンを開きます。
下の方にOn Click()があるので、On Click()の+をクリックします。
None(Object)にGame Objectをドラッグします。
プルダウンからsample→Tenoueを選択します。

Buildしてみます。

Discussion