MRが楽しい

MRやVRについて学習したことを書き残す

GitHubの利用手順(リポジトリ名の変更)

本日は GitHub の利用手順です。
本記事では GitHubリポジトリ名の変更手順を記事にします。
前回記事の続きです。
bluebirdofoz.hatenablog.com

リポジトリ名の変更

GitHubのページから前回登録したアカウントでサインインを行います。
github.com
f:id:bluebirdofoz:20201029224907j:plain

リポジトリ名を変更したいリポジトリを開きます。
[Settings]ボタンをクリックします。
f:id:bluebirdofoz:20201029224859j:plain

Settings ページが開きます。
ページ上部の[Repository name]に変更したい名前を入力して[Rename]ボタンをクリックします。
f:id:bluebirdofoz:20201029224917j:plain

これで指定した名前にリポジトリ名が変更されます。
f:id:bluebirdofoz:20201029224926j:plain

URLのリダイレクト

リポジトリ名を変更すると、リポジトリの URL も変更されますが、自動的に変更前の URL はリダイレクトが行われます。
このため、ローカルリポジトリの参照先URLは変更しなくても、そのまま利用可能です。

変更前のリポジトリ名を再利用した場合、このリダイレクトは切断されます。
このため、一度利用したリポジトリ名は再利用しないことが推奨されます。
docs.github.com

TortoiseGitでの参照URLの変更手順

前述の通り参照URLの変更は不要ですが、変更しておく場合は TortoiseGit の場合は以下の手順で変更できます。
リポジトリフォルダを右クリックして[TortoiseGit -> 設定]を開く。
f:id:bluebirdofoz:20201029225014j:plain

[Git -> リモート]画面を開き、リポジトリの[URL]項目を変更します。
[OK]または[適用]で変更が反映されます。
f:id:bluebirdofoz:20201029225024j:plain

MRTK v2のドキュメントを少しずつ読み解く コンストレイントマネージャー

本日は MRTKv2 の調査枠です。
MRTKv2 の Guides ドキュメントを少しずつ読み進めていきます。

MRTKv2のGuidesドキュメント

以下のドキュメントを読み進めていきます。
microsoft.github.io

以下のページでは有志による本ドキュメントの日本語翻訳が行われています。
投稿時点でこちらで未翻訳、または著者が興味のある部分について記事にしていきます。
hololabinc.github.io

本記事では以下のページを読み進めます。
microsoft.github.io
f:id:bluebirdofoz:20201028213137j:plain

ConstraintManager

ConstraintManager を使用すると、一連の制約をトランスフォームに適用できます。
ゲームオブジェクトに TransformConstraint タイプのコンポーネントがアタッチされているもので活用できます。

ConstraintManager は、ゲームオブジェクトにアタッチされている全てのコンストレインコンポーネントを自動的に収集してトランスフォームに適用します。
ただし、ユーザーは適用されるコンストレイントのリストを手動で構成し、コンストレイントのサブセットのみを適用できるようにすることを選択できます。

現在、次の MRTK の UX 要素が ConstraintManager をサポートしています。
・Bounds control
・Object manipulator

インスペクターのプロパティとフィールド

ConstraintManager は、次の2つのモードで操作できます

・Auto constraint selection(自動選択)
・Manual constraint selection(手動選択)

AutoConstraintSelection

f:id:bluebirdofoz:20201028213152j:plain

ConstraintManager のデフォルトモードは AutoConstraintSelection です。
これはアタッチされている全てのコンストレインコンポーネントのリストと、コンポーネントへの移動、コンストレイントの追加ボタンを提供します。

Add constraint to game object

このボタンを使用すると、コンストレインコンポーネントをインスペクターから直接追加できます。
プロジェクト内の全てのコンストレイントタイプがここに表示されます。
詳細については、後述の TransformConstraint を参照してください。

Go to component

オブジェクトで見つかった全てのコンストレイントは[Go to component]ボタンと共に一覧表示されます。
このボタンを押すと、インスペクターは選択したコンストレイトコンポーネントまでスクロールします。

ManualConstraintSelection

f:id:bluebirdofoz:20201028213209j:plain

ConstraintManager のモードが ManualConstraintSelection のとき、リストでリンクされているコンストレイントのみが変換に適用されます。
リストにはユーザーが選択した制約のみが表示されます。
ボタンまたはオプションに移動してエントリを削除または追加します。
ManualConstraintSelection を初めて有効にする場合、コンストレイントマネージャーはアタッチされたコンストレインコンポーネントを全てリストに入力します。

Remove entry

これを実行すると、リストからエントリが削除されます。
このオプションはゲームオブジェクトからコンストレインコンポーネントを削除しないことに注意してください。
コンストレインコンポーネントは、対象のコンポーネントを参照している他のコンポーネントを誤って壊さないように、常に手動で削除する必要があります。

Add entry

これを実行すると、リストに含まれていない使用可能な全てのコンストレインコンポーネントを示すドロップダウンが開きます。
エントリのいずれかをクリックすると、そのコンポーネントがリストに追加されます。

Add new constraint

これを実行すると、選択したタイプのコンポーネントをゲームオブジェクトに追加します。
新しく作成されたコンストレインコンポーネントはリストに追加されます。

TransformConstraint

コンストレイントは何らかの方法で操作を制限するために使用できます。
例えば、一部のアプリケーションではオブジェクトを回転させつつ、直立させたままにしたい場合があります。
この場合、RotationAxisConstraint をオブジェクトに追加して、回転をY軸の回転のみに制限するために使用できます。
MRTKにはいくつかのコンストレイントがあり、その全てを以下に説明します。

新しいコンストレイントを定義して、一部のアプリケーションで必要になる固有の操作動作を作成することもできます。
これを行うには、TransformConstraint を継承するスクリプトを作成し、ConstraintType プロパティと ApplyConstraint メソッドを実装します。
オブジェクトに新しいコンストレイントを追加した場合、ConstraintManager に登録する必要があります。
ConstraintManager の AutoConstraintSelection に表示されるか、ManualConstraintSelection のエントリのドロップダウンを追加する必要があります。

MRTK によって提供される全てのコンストレイントは、次のプロパティを共有します。

HandType

コンストレイントを片手、または両方の操作に使用するかどうかを指定します。
このプロパティはフラグであるため、組合せてオプションを選択できます。

・片手(One handed):選択した場合、片手操作中にコンストレイントが使用されます。
・両手(Two handed):選択した場合、両手操作中にコンストレイントが使用されます。

ProximityType

拘束を近距離、遠距離、または両方の操作に使用するかどうかを指定します。
このプロパティはフラグであるため、組合せてオプションを選択できます。

・近距離(Near):選択した場合、コンストレイントは近距離の操作中に使用されます。
・遠距離(Far):選択した場合、コンストレイントは遠距離の操作中に使用されます。

FaceUserConstraint

オブジェクトが常にユーザーの方向を向くように回転が制限されます。
これはスレートまたはパネルに利用する際に役立ちます。
固有のプロパティは次のとおりです。

Face away

true の場合、オブジェクトはユーザーの反対側を向きます。

FixedDistanceConstraint

操作開始時の操作オブジェクトと、別のオブジェクトの間の距離を固定します。
これは操作されたオブジェクトからヘッドトランスフォームまでの距離を固定するなどの動作に役立ちます。
固有のプロパティは次のとおりです。

Constraint transform

固定距離を保つ対象となるオブジェクトを指定します。
デフォルトはメインカメラです。

FixedRotationToUserConstraint

操作中のユーザーと操作対象オブジェクト間の相対的な回転方向を維持します。
これは操作されたオブジェクトが操作の開始時と同じ面を常にユーザーに表示することを保証します。
このため、スレートまたはパネルに利用する際に役立ちます。
固有のプロパティはありません。

FixedRotationToWorldConstraint

操作中の操作オブジェクトのグローバル回転を維持します。
これは操作によって回転を与える必要がない場合に役立ちます。
固有のプロパティはありません。

MaintainApparentSizeConstraint

オブジェクトがユーザーからどれだけ離れていても、ユーザーにとって同じ見かけのサイズを維持します。
これを使用して、操作中にスレートまたはテキストパネルを読み取り可能な状態に保つことができます。
固有のプロパティはありません。

MoveAxisConstraint

オブジェクトの移動軸を固定できます。
これは平面上または線に沿ってオブジェクトを操作する場合に役立ちます。
固有のプロパティは次のとおりです。

Constraint on movement

移動を制限する軸を指定します。
デフォルトでは、これらの軸はローカル軸ではなくグローバル軸になります。
このプロパティはフラグであるため、任意の数のオプションを選択できます。

・X軸(X Axis):選択した場合、X軸方向の移動は制限されます。
・Y軸(Y Axis):選択した場合、Y軸方向の移動は制限されます。
・Z軸(Z Axis):選択した場合、Z軸方向の移動は制限されます。

Use local space for constraint

true の場合、操作されたオブジェクトのローカル軸を元に制限します。
デフォルトでは False のため、グローバル軸を参照します。

RotationAxisConstraint

回転を制限する軸を指定します。
これは操作されたオブジェクトを直立に保ちながら回転する場合に役立ちます。
固有のプロパティは次のとおりです。

Constraint on movement

回転を制限する軸を指定します。
デフォルトでは、これらの軸はローカル軸ではなくグローバル軸になります。
このプロパティはフラグであるため、任意の数のオプションを選択できます。

・X軸(X Axis):選択した場合、X軸方向の回転は制限されます。
・Y軸(Y Axis):選択した場合、Y軸方向の回転は制限されます。
・Z軸(Z Axis):選択した場合、Z軸方向の回転は制限されます。

Use local space for constraint

true の場合、操作されたオブジェクトのローカル軸を元に制限します。
デフォルトでは False のため、グローバル軸を参照します。

MinMaxScaleConstraint

操作対象のスケールに最小値と最大値を設定できます。
これはユーザーがオブジェクトを小さくし過ぎたり、大きくし過ぎたりするのを防ぐのに役立ちます。
固有のプロパティは次のとおりです。

Scale minimum

操作中の最小スケール値を指定します。

Scale maximum

操作中の最大スケール値を指定します。

Relative to initial state

True の場合、最小、最大の値はオブジェクトの初期スケールを基準として解釈されます。
False の場合はスケールの絶対値として解釈されます。

MRTKの物を掴むオブジェクトマニピュレータに移動や回転の制限を設定する

本日は Blender のアドオン枠です。
MRTK の物を掴むオブジェクトマニピュレータ(ObjectManipulator)に移動や回転の制限を設定する手順を記事にします。
f:id:bluebirdofoz:20201027231721j:plain

MRTKのObjectManipulator

MRTK の ObjectManipulator は、片手か両手を使ってオブジェクトの移動、回転、拡大縮小を行うコンポーネントです。
ObjectManipulator は様々な入力に対応しているため、HoloLens2 の多関節ハンドや HoloLens1 の視線レイとタップ、没入型ヘッドセットのモーションコントローラなどでも機能します。
microsoft.github.io

本記事ではここに Constraint manager を使って移動軸や回転軸の制限を設定してみます。
microsoft.github.io

MRTKのインポート

MRTKのインポート手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

ObjectManipulatorの設定

初めに ObjectManipulator でオブジェクトを操作する場合、対象のオブジェクトにアタリ判定として Collider が設定されている必要があります。
対象のオブジェクトに Collider が設定されていない場合は事前にオブジェクトの形状に合わせて設定しておきます。
f:id:bluebirdofoz:20201027231756j:plain

ObjectManipulator で操作したいオブジェクトに ObjectManipulator コンポーネントを追加します。
f:id:bluebirdofoz:20201027231808j:plain

これで ObjectManipulator コンポーネントの設定は完了です。
f:id:bluebirdofoz:20201027231819j:plain

シーンを再生すると、オブジェクトを手で掴んで操作できます。
f:id:bluebirdofoz:20201027231832j:plain

ただしデフォルト設定では何の制限も設定されていないため、手を捻る操作を行うと、そのままキャラクターが傾くように回転されてしまいます。
f:id:bluebirdofoz:20201027231843j:plain

MRTK のシミュレーション利用方法については以下の記事を参考にしてみてください。
bluebirdofoz.hatenablog.com

ConstraintManagerの設定

今回は、これに ConstraintManager を設定して、キャラクターが常に直立するようにY軸方向にのみ回転する制限を追加します。

例えば ConstraintManager には以下の種類の制限コンポーネントがあります。

MoveAxisConstraint

移動軸に制限を設定します。
例えば、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを移動できるよう制限を設定します。

RotationAxisConstraint

回転軸に制限を設定します。
例えば、X軸方向、Y軸方向、Z軸方向、それらを組み合わせた方向にのみオブジェクトを回転できるよう制限を設定します。

MinMaxScaleConstraint

拡大縮小のサイズに制限を設定します。
拡大縮小サイズの上限、下限を設定します。トランスフォームに関わらず、初期状態のサイズを基準に設定することもできます。

制限に関する詳細は以下のページを参照ください。
microsoft.github.io

回転軸の制限を設定するため、オブジェクトに RotationAxisConstraint コンポーネントを追加します。
f:id:bluebirdofoz:20201027231914j:plain

RotationAxisConstraint では以下の設定が行えます。

Hand Type:利用可能な手の制限(右手、左手)
Proximity Type:利用可能な距離の制限(近距離、遠距離)
Constraint On Rotation:制限する回転軸(X軸、Y軸、Z軸)
Use Local Space For Constraint:オブジェクトローカル軸を利用する

今回はワールド軸のY軸方向のみ回転させるため、X軸とZ軸の回転を制限します。
[Constraint On Rotation]で[X Axis]と[Z Axis]にチェックを入れます。
f:id:bluebirdofoz:20201027231924j:plain

シーンを再生して動作を確認します。
オブジェクトを掴んで手を捻ったとき、オブジェクトがY軸方向にのみ回転すれば成功です。
f:id:bluebirdofoz:20201027231934j:plain

BSDFMaterialMergeアドオンを使って類似のマテリアルをマージする

本日は Blender のアドオン枠です。
BSDFMaterialMergeアドオンを使って類似のマテリアルをマージする手順を記事にします。
f:id:bluebirdofoz:20201026003103j:plain

BSDFMaterialMergeアドオンについて

オブジェクト内のマテリアルスロットから、出力ノードにプリシプルBSDFノードが接続されたマテリアルの比較を行い、類似するマテリアルをマージする Blender アドオンです。
github.com

以下の記事で作成したものを、役立ちそうなのでアドオンにしてみたものです。
bluebirdofoz.hatenablog.com

本アドオンは指定したオブジェクトについて以下の条件でマテリアルのマージを行います。
1.指定オブジェクトのマテリアルはアクティブな出力ノードにプリンシプルBSDFノードが接続されているか
2.プリンシプルBSDFの比較対象の入力端子にリンクが貼られておらず、デフォルト値が有効か
3.デフォルト値が有効な場合、その入力端子が全て一致すれば類似と判断してスロット上部の一致マテリアルを割り当て直す
4.マテリアルスロット内をマテリアル名でソートする
5.重複するマテリアルの削除を行い、マージしたマテリアルを1つにする

アドオンのインストール手順

以下の GitHub から取得可能です。
github.com

[Code] -> [Donload ZIP]でソースコードをダウンロードします。
f:id:bluebirdofoz:20201026003204j:plain

ダウンロードが完了すると、BSDFMaterialMerge_BlenderAddon-main.zip ファイルが取得できます。
f:id:bluebirdofoz:20201026003213j:plain

Blender を起動し、[編集] -> [プリファレンス] を選択します。
f:id:bluebirdofoz:20201026003222j:plain

Blenderプリファレンスが開きます。
[アドオン]タブを開き、[インストール]ボタンをクリックします。
f:id:bluebirdofoz:20201026003231j:plain

先ほどの zip ファイルを選択して[アドオンをインストール]をクリックします。
f:id:bluebirdofoz:20201026003240j:plain

これでアドオンがインストールされます。
サポートレベルを[テスト中]に切り替えると、アドオンの一覧に BSDFMaterialMerge が表示されます。
f:id:bluebirdofoz:20201026003254j:plain

チェックボックスにチェックを入れて、アドオンを有効にします。
f:id:bluebirdofoz:20201026003305j:plain

インストールが完了すると、以下のパネルが追加されます。
・[3Dビュー]ウィンドウのサイドバーに[Util]タブと[BSDF Material Merge]パネルが追加される。
f:id:bluebirdofoz:20201026003315j:plain

アドオンの使い方

[BSDF Material Merge]パネルを開きます。
[ターゲット]のプルダウンを開き、マテリアルのマージを行いたいプロジェクト内のオブジェクトを選択します。
f:id:bluebirdofoz:20201026003327j:plain

後は[Material Merge]で実行するだけです。
f:id:bluebirdofoz:20201026003338j:plain

一致と判断されたマテリアルがマージされました。
f:id:bluebirdofoz:20201026003347j:plain

指定オブジェクトに、プリシプルBSDFを出力ノードに接続していないマテリアルが存在する場合、実行は失敗します。
f:id:bluebirdofoz:20201026003357j:plain

MRTKでボタンのアイコンセット(IconSet)を作成してアイコンの見た目を変更する

本日は MRTK の小ネタ枠です。
MRTKでボタンのIconSetを作成してアイコンの見た目を変更する手順を記事にします。
f:id:bluebirdofoz:20201025222645j:plain

ボタンのアイコンセット

MRTK 2.4 以降では、ボタンのスタイルをテンプレートから選んで変更するアイコンセットの機能が利用できます。
f:id:bluebirdofoz:20201025222657j:plain
microsoft.github.io

以下、上記ページの引用です。

アイコンセットは、ButtonConfigHelperコンポーネントによって使用されるアイコンアセットの共有セットです。
以下の3つのアイコンスタイルがサポートされています。

・クアッドアイコン
クワッドアイコンは、MeshRenderer を使用して四角形にレンダリングされます。
これはデフォルトのアイコンスタイルです。

・スプライトアイコン
スプライトアイコンは、SpriteRenderer を使用してレンダリングされます。
これはアイコンをスプライトシートとしてインポートする場合、またはアイコンアセットを UnityUI コンポーネントと共有する場合に役立ちます。
このスタイルを使用するには、Sprite Editor パッケージをインストールする必要があります。
(Windows-> Package Manager-> 2D Sprite)

・文字アイコン
文字アイコンは、TextMeshPro コンポーネントを使用してレンダリングされます。
これはアイコンにフォントを使用する場合に役立ちます。
HoloLens でアイコンフォントを使用するには TextMeshPro フォントアセットを作成する必要があります。

サンプル画像の取得

今回はクアッドアイコンのアイコンセットを作成してみます。
サンプルとなるアイコン用の画像を以下のページから取得しました。
icooon-mono.com
f:id:bluebirdofoz:20201025222712j:plain

こちらのサイトでは画像のサイズやカラー、画像フォーマットを指定してダウンロードすることができます。
今回は 256px のサイズの PNG 形式で、6つの画像をダウンロードしました。
f:id:bluebirdofoz:20201025222733j:plain

クアッドアイコンのアイコンセットを作成する

初めに、アイコンの見た目に利用するテクスチャを Unity にインポートします。
f:id:bluebirdofoz:20201025222745j:plain

今回取り込んだ画像は背景に透明度が設定されているので、透明度を有効にしておきます。
画像の Inspector ビューを開き、[Alpha Is Transparency]にチェックを入れて[Apply]で反映します。
f:id:bluebirdofoz:20201025222757j:plain

次にアイコンセットを作成します。
MRTK をインポートしていると、右クリックから[Create -> MixedRealityToolkit -> IconSet]で作成できます。
f:id:bluebirdofoz:20201025222813j:plain

作成されたアイコンセットを選択して、Inspector ビューを開きます。
クアッドアイコン、スプライトアイコン、文字アイコンの設定はここから行えます。
f:id:bluebirdofoz:20201025222830j:plain

今回は6つのクアッドアイコンを設定するので[Quad Icons]欄の[Size]に[6]を入力します。
すると、テクスチャを設定するための[Element]項目が追加されるので、[Select]ウィンドウを開いて取り込んだ画像を指定します。
f:id:bluebirdofoz:20201025222841j:plain

同じ手順で、全ての[Element]項目に画像を指定します。
これでアイコンセットの作成は完了です。
f:id:bluebirdofoz:20201025222851j:plain

アイコンセットを利用する

Scene に追加した Button オブジェクトを選択して、Inspector ビューを開きます。
最下部の[Button Config Helper]の[Icon]パネルからアイコンセットを指定できます。
[Icons Set]項目で[Select]ウィンドウを開くと、先ほど作成したアイコンセットが選択できます。
f:id:bluebirdofoz:20201025222901j:plain

アイコンセットの一覧が表示されるので、利用したいアイコンを選択します。
これで Button に自作のアイコンセットのアイコンを設定することができました。
f:id:bluebirdofoz:20201025222922j:plain

MRTKでRender from cameraを利用してMixedRealityキャプチャとホログラムのズレを補正する

本日は MRTK の小ネタ枠です。
MRTKでRender from cameraを利用してMixedRealityキャプチャとホログラムのズレを補正する手順を記事にします。
f:id:bluebirdofoz:20201024223013j:plain

MixedRealityキャプチャとホログラムのズレ

MixedRealityキャプチャを使うと、アプリケーションのホログラムとカメラの写真を合成した画像を取得できます。
このとき、HoloLens のカメラに近いハンドメッシュなどの描画がズレてしまうことがあります。
これはアプリケーションが描画する視点の位置と、HoloLensに搭載されているカメラの位置が僅かに異なるためです。
f:id:bluebirdofoz:20201024223105j:plain

このズレを補正するのが、Render from Camera の機能です。
本機能を利用すると、キャプチャ時はカメラ位置からホログラムを描画するため、描画のズレが発生しなくなります。
microsoft.github.io

前提条件

Render from Cameraの機能は Unity2018.4.13f1 または、Unity2019.3f1 以降のバージョンでのみ利用可能です。

Render from Cameraの有効化

[MixedRealityToolkit]オブジェクトの[Inspector]ビューを開き、カメラ設定ロバイダーを変更します。
プロファイルを編集するため、デフォルトプロファイルを選択している場合は[Copy&Customize]で新規プロファイルを作成します。
f:id:bluebirdofoz:20201024223035j:plain

任意のプロファイル名を設定して[Clone]を実行します。
f:id:bluebirdofoz:20201024223123j:plain

プロファイルを新規作成したら[Camera]タブを開きます。
[CameraProfile]のプロファイルを[Clone]して新規プロファイルを作成します。
f:id:bluebirdofoz:20201024223135j:plain

任意のプロファイル名を設定して[Clone]を実行します。
f:id:bluebirdofoz:20201024223144j:plain

プロファイルを作成すると[Camera Settings Providers]が編集できるようになります。
[Windows Mixed Reality Camera Settings]のパネルを開き、[CameraSettingsProfile]のプロファイルを[Clone]して新規プロファイルを作成します。
f:id:bluebirdofoz:20201024223153j:plain

任意のプロファイル名を設定して[Clone]を実行します。
f:id:bluebirdofoz:20201024223208j:plain

これで[Render from PV Camera]の項目が編集できるようになります。
チェックを入れることで Render from Camera の機能が有効化されます。
f:id:bluebirdofoz:20201024223218j:plain

動作確認

後は HoloLens2 にアプリケーションをインストールして動作を確認します。
Render from Camera の機能を有効化していない場合と、有効化している場合を比較すると、ホログラムのズレが補正されていることが分かります。

・有効化していない場合
f:id:bluebirdofoz:20201024223229j:plain

・有効化している場合
f:id:bluebirdofoz:20201024223239j:plain

参考ページ

www.tattichan.work

UnityでGenericリグのキャラクターモデルのアニメーションを組み合わせる

本日は Unity の小ネタ枠です。
UnityでGenericリグのキャラクターモデルのアニメーションを組み合わせる手順を記事にします。
f:id:bluebirdofoz:20201023195848j:plain

Genericリグでキャラクターモデルのアニメーションを扱う方法は以下の前回記事を参考にしてください。
bluebirdofoz.hatenablog.com

UnityでGenericリグのキャラクターモデルのアニメーションを組み合わせる

Blenderでのアニメーション作成

Blenderで以下のような2つのアニメメーションを作成して組み合わせてみます。
・基本の立ちアニメーション
f:id:bluebirdofoz:20201023195901j:plain

・尻尾を振るアニメーション
f:id:bluebirdofoz:20201023195915j:plain

組み合わせる2つのアニメーションは同じステップ数である必要はありません。
f:id:bluebirdofoz:20201023195924j:plain

尻尾を振るアニメーションは尻尾のみが動くアニメーションです。
今回は基本の立ちアニメーションに尻尾の部分のみ、尻尾を振るアニメーションを上書きして組み合わせます。
f:id:bluebirdofoz:20201023195934j:plain

これらのアニメーションを持つ3Dモデルファイルを FBX 形式で出力します。
f:id:bluebirdofoz:20201023195945j:plain

Unityへの取り込みとアニメーションコントローラの作成

Unity に出力した FBX ファイルを取り込みます。
Inspector ビューの[Animation]タブから作成したアニメーションが取り込まれていることを確認します。
f:id:bluebirdofoz:20201023195955j:plain

アニメーションを組み合わせるためのアニメーションコントローラを作成します。
右クリックから[Create -> Animatior Controller]でアニメーションコントローラを作成できます。
f:id:bluebirdofoz:20201023200005j:plain

作成したアニメーションコントローラを選択して[Animator]画面を開き、基本の立ちアニメーションを登録します。
ここに尻尾を振るアニメーションを重ね合わせてみます。
f:id:bluebirdofoz:20201023200015j:plain

アニメーションマスクの作成

アニメーションの尻尾の部分のみを上書きするため、アバターマスクを作成します。
右クリックから[Create -> Avatar Mask]でアバターマスクを作成できます
f:id:bluebirdofoz:20201023200026j:plain

作成したアバターマスクを選択して Inspector ビューを開きます。
今回は Generic リグのアバターをマスクするので、[Transform]パネルを開き、[Use skeleton from]をクリックします。
アバターを持つオブジェクトの一覧が表示されるので、取り込んだキャラクターモデルのアバターを選択します。
f:id:bluebirdofoz:20201023200038j:plain

この状態で[Import skeleton]を実行すると、リグの構造が読み込まれます。
f:id:bluebirdofoz:20201023200048j:plain

マスクで利用したいリグのみにチェックを付けるようにします。
今回は尻尾のアニメーションを反映させたいので、尻尾のリグのみを選択したアバターマスクにします。
[Expand All]で一旦全てのチェックを外します。
f:id:bluebirdofoz:20201023200057j:plain

その後、尻尾の部分のリグを全てチェックします。
これで尻尾のリグのみをマスクするアバターマスクができました。
f:id:bluebirdofoz:20201023200108j:plain

アニメーションコントローラのレイヤー作成

次にアニメーションを組み合わせるため、アニメーションコントローラにレイヤーを作成します。
[Animator]画面を開き、[Layers]タブの[+]ボタンをクリックします。
f:id:bluebirdofoz:20201023200120j:plain

新規レイヤーが作成されるので、[歯車]アイコンをクリックしてレイヤーの設定を行います。
各設定項目の説明は以下の通りです。

Weight

アニメーションを適用する重み付けです。
0 ~ 1 が設定可能で、例えば Blending:Override で Weight:1 を設定した場合、アニメーションは完全に上書きされます。

Mask

アニメーションを反映するリグを指定するアバターマスクを設定します。

Blending

アニメーションの組合せの方法を指定できます。
Override の場合、他レイヤーのアニメーションを無視してアニメーションを上書きします。
Additive の場合、他レイヤーのアニメーションに加算される形でアニメーションを適用します。

Sync

ステートやトランジションを他のレイヤーと同期します。
同期するレイヤーは[Source Layer]で指定します。

Timing

有効な場合、同期されたレイヤーにあるアニメーションの長さを調整できるようになります。
組み合わせるアニメーションの長さが異なる場合、これにチェックを入れることで別々にアニメーションの長さを調整できます。
チェックを入れない場合、同期されたレイヤーのアニメーションの長さに合わせて組合せのアニメーションが再生されます。

IK Pass

IKパスを有効化します。

docs.unity3d.com

今回は以下の通り設定しました。

Weight:1.0
Mask:先程作成した尻尾用のアバターマスク
Blending:Override
Sync:True
Timing:True
Source Layer:Base Layer
IK Pass:False

f:id:bluebirdofoz:20201023200145j:plain

[Base Layer]で基本の立ちアニメーションを設定したパネルを選択して Inspector ビューを開きます。
[Motion]の項目に、尻尾を振るアニメーションを登録します。
f:id:bluebirdofoz:20201023200155j:plain

これで2つのアニメーションが組み合わせることができました。
アニメーションコントローラをキャラクターモデルに設定して動作を確認します。
f:id:bluebirdofoz:20201023200205j:plain

シーンを再生したとき、基本の立ちアニメーションと尻尾を振るアニメーションが組み合わさったアニメーションが再生されれば成功です。
f:id:bluebirdofoz:20201023200213j:plain