トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【Unity/VR】ハンドぬるぬるアセット買ったけど・・・【Procedural Hand Pose 】

Procedural Hand Pose

手がコライダーの形に合わせてぬるぬる掴むように動くアセット

3dnchu.com

18ドル。半額の時に買った!

Unityバージョン2019.3.4 or higher

 

VRで使えるんだろうか?

使えるみたい!てのオブジェクト日をコントローラーの位置にしたらいいだけのはずだもんね!

 

使う

Unity2019.4.11

Readmeのドキュメントしか使い方が載っていないみたいだが、これもあまり詳しくない気がする・・・

f:id:bibinbaleo:20201004153512p:plain

サンプル

ExampleSampleを開いたら銃以外のシェーダーが壊れてた

f:id:bibinbaleo:20201004125149p:plain

とりあれずMaterialsフォルダーのマテリアルをStandardにした。

f:id:bibinbaleo:20201004125342p:plain

一応手を動かしたら反応した。

f:id:bibinbaleo:20201004125146p:plain

どの手を動かせばいいか分からない。

f:id:bibinbaleo:20201004130533p:plain

MainCameraのScriptがMissingになってる・・・

f:id:bibinbaleo:20201004155047p:plain

何がついてたんだ・・・

つかまれるもの

サンプルシーンにある、つかまれるもの

f:id:bibinbaleo:20201004130838p:plain

球と銃とフェンスとカード

モデルにはColliderRigidbodyが必要

必要条件
ProceduralHandPoseと互換性のあるオブジェクトのためには、コリダーを持つRigidbodyでなければなりません。
ProceduralHandPoseは、ボーンがオブジェクトに接触しているときに制御するために衝突検出を使用します。そのためには
コライダーがメッシュにフィットするほど、ポーズはより正確になります。

あとPosePointModelPosePointControllerというスクリプトもいるみたい

f:id:bibinbaleo:20201004130839p:plain


手の構造

プレハブ

f:id:bibinbaleo:20201004125141p:plain

一番上にはPosableHandControllerスクリプトがある

f:id:bibinbaleo:20201004131157p:plain

左右のHandの下には3つのオブジェクトがある。Master,Ghost,Model

f:id:bibinbaleo:20201004125143p:plain

手のモデルは二つ見える。MasterとGhostは実態を持っている・・・

f:id:bibinbaleo:20201004125651p:plain

pdfのドキュメントによるとこんな感じ

f:id:bibinbaleo:20201004153629p:plain

•ゴーストハンド:これはポーズをとるハンドです。 マスターハンドの位置/回転、ポーズポイントの位置/回転、リジッドボディの位置/回転/スケール、ポーズポイントのモデル、ジェネレーターの構成に従って、リアルなポーズを見つけようとします。
•マスターハンド:このハンドは、グラブをシミュレートする初期状態を定義します。 この手を好きなように回転/移動でき、ポーズの生成に影響します。 ゴーストハンドはマスターからトランスフォームをコピーするため、マスターのボーンを個別に移動すると、ゴーストハンドのボーンが長く/短くなる可能性があります。 指を回転させても、ポーズの生成には影響しません。
•PosePoint:このポイントは、ゴーストハンドが到達しようとするゴールまたは目的地を定義します。

PosePointはModelのこと???

 

Masterを動かせばいいみたい。実際実行するとmasterだけになる

f:id:bibinbaleo:20201004125809p:plain

ModelについているPosableHandModelのPosePointに、つかまれるオブジェクトにつけたPosePointControllerをセットして初めて動く!

f:id:bibinbaleo:20201004151458p:plain

上の処理をすると、サンプルシーンと同じように二つモデルが表示されてしまう。

f:id:bibinbaleo:20201004154029p:plain

説明通りMasterを動かすとGhostもそれに合わせて動く。

f:id:bibinbaleo:20201004154349g:plain

あとオブジェクトにつけたPointのほうを動かしても動く

f:id:bibinbaleo:20201004154655g:plain

よくわからん~~~

二つも手が表示されてるのおかしいし、結局VRで使うにはどれを動かしたらいいんだ??

 

自分のシーンで使う

Prefabのハンドを置く。

今回つかみたいものはこれ。骨喰藤四郎!!!!

bibinbaleo.hatenablog.com

コライダーなどはついていなかったので、とりあえず適当につける。

f:id:bibinbaleo:20201004152952p:plain

Rigidbodyもつける。isKinematicにチェック

f:id:bibinbaleo:20201004152956p:plain

スクリプトを付けるための空のゲームオブジェクトを付ける。

f:id:bibinbaleo:20201004152958p:plain

この2つのスクリプトを付ける。

f:id:bibinbaleo:20201004153117p:plain

これがついている場所を握っているみたい。Pointを動かしたら手も動いた。

手のModelについているPosableHandModelのPosePointに、つかまれるオブジェクトにつけたPosePointControllerをセット

f:id:bibinbaleo:20201004153343p:plain

これで動く・・・けど絶対間違ってるよね~~

二つも手が表示されてるのおかしいし、結局VRで使うにはどれを動かしたらいいんだ??

そういえばMaterialが壊れてたから、全部Standardにしたけど、Ghostは透明だったりしたのかな・・・

f:id:bibinbaleo:20201004162105p:plain

VR

XR IntaractionToolkitでコントローラー動かしてみた。

RightHandControllerのしたいhand.Rを置いて実行してみる。

f:id:bibinbaleo:20201004162622p:plain

実行すると、コントローラーと手の位置があっていない。なぜかMaster.Rがよく分からない値になっている

f:id:bibinbaleo:20201004162618p:plain

これをYだけ-90のままにするといい感じになる

f:id:bibinbaleo:20201004162621p:plain

そして手を動かすと、Masterはついてきて、Ghostは刀にくっついて動く

f:id:bibinbaleo:20201004162007g:plain

何を間違ったんだ・・・

コライダー自動生成アセット

コライダーの形に沿って動くっぽいので、メッシュに沿ってコライダーを生成してくれるアセットが欲しい

昔使ったやつ。無料!

Cubeとかカプセルとか単純な小ライダーを組み合わせてつける

kan-kikuchi.hatenablog.com

 3年前にMMDにコライダーをつけるのに使ってた・・・

bibinbaleo.hatenablog.com

MeshがあるオブジェクトにSAMeshColliderBuilderを付けてProcessを押す

f:id:bibinbaleo:20201004175443p:plain

ReducerをMesh、MeshTypeをRawにしたらえっちゃ細かいコライダーができる

f:id:bibinbaleo:20201004175354p:plain

f:id:bibinbaleo:20201004175358p:plain

 

f:id:bibinbaleo:20201004175359p:plain

子にコライダー付きのGameObjectが生成される

f:id:bibinbaleo:20201004180111p:plain

あとrigidbodyがいらないならIsCreateを外す

f:id:bibinbaleo:20201004175915p:plain

 最後に

なんかうまくいかなかった・・・

なんで壊れてるんだ