💭

MRTKでアバターの着せ替えをやってみたい!(試着!)

2021/11/18に公開

今回は最後の段階「着せ替え」をしていきたいと思います

1.服を掴めるようにする

当たり判定をつけていきます
Add Component→Capsule Collider

ObjectManipulatorの導入
Object Manipulatorで服を移動、回転、拡大縮小などができます
Add Component→ObjectManipulator

これで服を掴めるようになりました
しかし、Buildしてみるとわかるのですが服を掴んで動かしてみると勝手に傾いてしまいます
なので回転軸に制限をつけます
Add Compornent→RotationAxisConstraint
RotationAxisConstraintは、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを回転できるよを設定できます

赤線の部分をEverythingにします
これで傾かなくなりました

この作業を他の服にも同様にしてください

2.スクリプトを書いていく

では、実際に服をアバターに着せれるスクリプトを書いていきます
今回はアバターのある一定距離まで服を移動させて離した時に服がアバターの座標に移動するという形で作成していきます
Assets→Scriptsで+をクリック→C# Scripts ネームはClothdistanceにします

作ったスクリプトを開きます
コードは↓こんな感じです

※スクリプトの説明

float型→整数だけでなく少数も使える。
Vector3→X座標、Y座標、Z座標のそれぞれの値を持てる
Vector3.Distance→aとbの間の距離を返す
なので今回の↓は
Vector3.Distance(model.transform.position,this.transform.position)
モデルの座標と(thisは、このスクリプトがアタッチされているオブジェクト)服の座標の距離を返している

if(distance <= 1)
もし、この2点間の距離が1m以下の場合
this.transform.position = model.transform.position
服の座標(transform.position)をモデルの座標と一緒にする

4.動作確認

スクリプトができたので服にアタッチしていきます

そうすると↓のような感じになるので自分のアバターをmodelにドラッグします

次は手を離した時に服とアバターの距離が1m以下なのか判断させたい
On Manipulation Endedは、操作が終了したとき(手を離した時)にトリガーします
この機能を使っていきます
On Manipulation Endedの+をクリック

↓のようにしてください

あとは同じ手順を他の服にも行ってください

これでBuildをしてみてください
服がちゃんとアバターに移動できれば成功です

Discussion