Vket Cloudで、Mixamoからダウンロードしたモーションをアバターに実装する➂【新規プリセットアバターファイル作成 - アニメーション設定】

::: note info
本記事は、VR法人HIKKYのorganization下のQiita/Zenn両方に投稿しております。
:::

# はじめに
Vket Cloudで使用できるアバターには、モーションや持ち物を設定することが可能です。

![剣を振り回すVketちゃん1号.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/79743bd3-4581-e8d2-8924-9ddf75d5b297.gif)
本記事では、上記の剣を振り回すVketちゃん1号を作成する方法について紹介します。

# 手順
実装までの手順は、
1. Mixamoからアニメーションをダウンロードする
2. アニメーションをUnityに取り込み、Vket Cloudで使える形にする
3. 新規プリセットアバターの設定を立ち上げ、モーションの追加を行う
4. 追加モーションを再生できるようにする
5. **剣オブジェクトを作成し、アバターの持ち物として設定する**
6. **アニメーション再生中のみ剣が表示されるようにする**

となります。
本ページでは、5,6を紹介します。

## 剣オブジェクトを作成し、アバターの持ち物として設定する
Cubeを使って剣の形をしたオブジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/b8eae441-9bb8-e9ea-538b-d4237255b81a.png)

このとき、持ち手が原点座標(0,0,0)の位置にあるようにします。
また、空のオブジェクトを作成し、Position、Rotationを(0,0,0)、Scaleを(1,1,1)にし、
Cube群をその子オブジェクトにします。
空のオブジェクトはSwordという名称にしておきます。

このオブジェクトを選択し、フィールドのエクスポートを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/0193d9e5-08f2-de97-da0e-d773ad1c5755.png)

↑フィールドのエクスポートはVketCloudSDKタブの中にあります。

新しいフォルダーを作成し、その中にお好きな名前(半角英数アンダーバー)で保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/1e5d5ee6-0e88-1f2a-b266-e8cbd89b3ce6.png)
↑保存時に複数ファイルが自動生成されるため、空のフォルダに保存するのが好ましいです。

3で追加したプリセットアバター設定のObjectタブに新規オブジェクトを追加します。
名前をSwordにしたうえで、下記の画像のように設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/b8348c6f-49ca-bb13-0039-9e6ea496ba96.png)


オブジェクトの部分には先程作成したオブジェクトを当てはめます。
TargetはrightHandにします。

この状態でビルドすることで、Vketちゃんの近くに剣が表示されました。
しかし、手の位置と比較し、向きがおかしいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/5c5c9377-4610-6cde-6775-4f45c559a686.png)
↑手の甲から生えているような感じになる。

向きの修正にはPosition、Rotationを使用しますが、こちらはTargetで指定した関節位置からの相対座標、相対確度となります。
したがって、適切な位置や向きになるように、Position・Rotationの数値調整↔ビルドをくり返します。

今回の場合、下記画像の設定で適切な見た目となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/7a66fe55-fd9e-fc65-8f28-c10fcff222a9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/9fea06df-5f71-7136-6495-dc416ac467a4.png)
↑自然に持った感じになる。

::: note info
ターゲットに設定可能なボーンは全部で53箇所あります。
[Vket Cloudでアバターの持ち物設定に使用可能なターゲット一覧](<https://qiita.com/vket_chan/private/8148a47273cfdc130c62>)でそれぞれの設定値に対応する位置の紹介を行っています。
:::

これで、剣を持った状態で剣を振り回すアニメーションが可能になります。

## アニメーション再生中のみ剣が表示されるようにする
特定のアニメーションを行っている時のみ、剣オブジェクトが表示されるようにするためには、**オブジェクト非表示 / オブジェクト表示アクション**を使用します。

::: note info
**オブジェクト非表示 / オブジェクト表示アクション**

アバターの持ち物を非表示 / 表示する。
ワールド内で特定のユーザーが本アクションが発生する動作を使用した際、ワールド内の全ユーザーに自動で同期される。

言語設定をEnglishにした場合の名称は、**Hide Object / Show Object**となる。
:::

本アクションはアバターのエモート / モーションのアクション設定限定で使用できるアクションとなります。

### 1. 特定アニメーション再生中以外、剣を消す
振り回すアニメーション再生時以外は不要なので消します。
振り回すアニメーションから派生可能なすべてのアニメーションにオブジェクト非表示を付けることで、振り回すアニメーション再生時以外の再生中に剣が表示されないようにします。

したがって、振り回しを行うモーション以外のすべてのモーション / エモートにオブジェクト非表示を付け、Swordを指定します。

::: note info
**設定方法**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/be516762-2113-eb28-c703-69d87e71f2c5.png)
1.モーション / エモートのアクションを使用する？にチェックを入れ、設定をクリックします。
2.表示されたダイアログでオブジェクト非表示を設定します。
3.名前にSwordを入力します。

これで「設定を行ったモーションを行った時、剣が消える」が実装されました。
:::

::: note warn
**注意！**
VketCloudSDK13.4.1以降では、エモートの設定が行えなくなりました。
そのため、上記アクションの設定はモーション再生中のみとなります。
:::

### 2. 特定アニメーション再生中は剣を表示する
振り回すアニメーション再生中は剣が表示されてほしいので、剣を振り回すモーションにはオブジェクト表示を付け、Swordを指定します。

これで、剣を振る時だけ剣が表示されます。

## おまけ：任意のタイミングから任意のタイミングまでの間、持ち物を表示するためには？
例えば、「ワールド内で剣立てを調べて剣を拾ったタイミングから再度剣立てを調べて剣を置くタイミングまで剣を持つ」という動作を作る場合、下記のような設定を順に行います。

**1.Idleに変数が値に等しい場合とオブジェクト非表示アクションを追加**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/e938bdd4-2e94-6310-15af-74a9eb2670c7.png)

※「変数が値に等しい場合」はOperationタブの中にあります。
※「変数が値に等しい場合」は、条件を満たしている時、それ以降のアクションの実行を行わない、という効果のあるアクションです。


**2.剣を拾うモーションを追加、値の設定とオブジェクト表示アクションを追加**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/8dbb33de-2fc1-0c0d-511b-29d6b985704e.png)

※「値の設定」はOperationタブの中にあります。

**3.剣を置くモーションを追加、値の設定とオブジェクト非表示アクションを追加**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788807/8a8e8174-156b-7b09-efc9-2f09100fceff.png)


この設定を行うことで、ワールド入室時点を開始としない、任意のタイミングから任意のタイミングまでの間、どんなモーションやエモートを行っても持ち物を表示し続けることが可能です。

## まとめ

アバターの持ち物機能や追加モーションを使いこなすことで、ワールド内でのアバター表現を大きく拡げることができます。
ぜひ、ワールドに取り入れてみてください。

## Vket Cloudについて

ブラウザからアクセスできる“Webメタバース”を作成するサービスです。 Vket Cloudで制作された空間は、アプリレスでWebブラウザから簡単にアクセスできるため、プラットフォームの制限の中で限られたユーザーにだけでなく、インターネットに存在するすべてのユーザーに対してオープンなコンテンツ・サービスを届けることが可能です。

https://cloud.vket.com/

**前:** [Vket Cloudで、Mixamoからダウンロードしたモーションをアバターに実装する②](<https://qiita.com/vket_chan/items/833a5a5036760cfd910e>)