TKSPのUnity関連ブログ

Unityに関することで書きたいことを書く.

VRChat 軽量で快適な合法チートロポリコンを作ってみた!

はじめに

こんにちは!
VRC合法チート研究会開発長のTKSPです!

今回は合法チート研究会のツールとMesh Bakerを使って便利なロポリコンちゃんを作成してみたので,その方法を伝授します!

何をするか

publicワールドやお出かけに使用するShow Avatarしなくても見える軽量で便利なアバターを作っていきます!
Quest版ではExcellent、PC版ではGoodパフォーマンスのロポリコンを作成します。



環境・バージョン

Windows 10
Unity 2019.4.3f1
VRCSDK3-AVATAR-2021.09.30.16.19_Public
LowPoly_Kon ver1.2

下準備

まず必要なものの購入やダウンロードを済ませておきます。

VRC SDK3のダウンロード

VRChat homeのDownloadからダウンロード
VRChat - Home

ロポリコンの購入

こちらのリンクからロポリコンちゃんを購入します。
booth.pm

合法チートツールの購入

こちらのリンクから全て購入します。
booth.pm
booth.pm
booth.pm
booth.pm

Mesh Bakerの購入

こちらのリンクから購入します。
assetstore.unity.com

Dynamic Boneの購入

みんな持ってるよね。
assetstore.unity.com

ModelBoneDeleterのダウンロード

こちらのリンクからダウンロードします。
booth.pm

UTS2_ShaderOnly_v2.0.8_Releaseのダウンロード

こちらからダウンロード
github.com

**>

f:id:ymtkyorosiku:20220107205933p:plain
ユニティちゃんトゥーンシェーダーのダウンロード

PC版のGoodなロポリコンを作成する

PCプロジェクトの用意

PCアバター用のプロジェクトを作成します。
後でQuest用のものをプロジェクトを複製して作成するため保存先は分かる場所にしておいてください。

f:id:ymtkyorosiku:20220107203615p:plain
プロジェクトの作成

パッケージの導入

先ほどダウンロードしたものを以下の順番でインポートします。
(3つほど足りないですが、Quest対応の時にインポートします)

1.VRC SDK3
2.Dynamic Bone
3.UTS2_ShaderOnly_v2.0.8_Release
4.ロポリコン
5.合法チートツール4種
6.好きな動画(mp4,40秒未満を推奨)と好きな音楽(mp3)をProjectにドラッグ&ドロップ

ロポリコンをSDK3化する

1.LowPoly_Kon_PCプレハブをHierarchyに追加します。
Projectから矢印が付いていないほうのLowPoly_Kon_PCをHierarchyにドラッグ&ドロップします。

f:id:ymtkyorosiku:20220108013512g:plain

2.Pipeline Managerと(Scriptの削除)
右クリックでRemove Component

f:id:ymtkyorosiku:20220108013525g:plain

3.VRC Avatar Descriptorを追加
Add Componentからvrcで検索するとすぐに出ます。

f:id:ymtkyorosiku:20220108013541g:plain

4.ViewPositionとリップシンク設定
ViewPositionに(0,0.83,0.007)を設定
リップシンクはAuto Detect!で自動で設定されます。

f:id:ymtkyorosiku:20220108013552g:plain

5.HandsLayerの複製
VRCSDK/Example3/Animation/Controllers/vrc_AvatarV3HandsLayer.controllerを複製します。
選択してctrl + dで複製できます。

f:id:ymtkyorosiku:20220107213934p:plain
HandsLayerの複製

適当なフォルダに移動し、LowPolyKonFXLayerに名前を変えておきましょう。
選択してF2でファイルの名称変更ができます。
f:id:ymtkyorosiku:20220107214051p:plain

6.HandsLayerの編集
LowPolyKonFXLayerをダブルクリックしてAnimatorタブを開きます。
AllPartsとLeft Handの間にIdleを追加します。
Weightを1に設定してください。

f:id:ymtkyorosiku:20220108013610g:plain

7.Idleアニメーションの作成
CreateからAnimationを作成しIdleとします。
先ほど作成したLowPolyKonFXLayerのIdleに追加し、オレンジの枠を選択したら、InspectorからWriteDefaultsを切ります。

f:id:ymtkyorosiku:20220108013622g:plain

8.Idleアニメーションのキーを設定
LowPolyKonFXLayerをLowPoly_Kon_PCのAnimatorのControllerに指定します。

f:id:ymtkyorosiku:20220108013636g:plain

Window>Animation>AnimationでAnimationタブを開き、Idleを指定します。

f:id:ymtkyorosiku:20220108013651g:plain

録画ボタンを押したら、LowPoly_Kon_PC内のLowpoly_konを選択し、vrcで始まるリップシンク以外のやつを全て少し動かして0のKeyを打ちます。

f:id:ymtkyorosiku:20220108013705g:plain

最終的にこのようになります。Keyを打ち終わったら録画ボタンで停止、Previewを押してしゃがみからTポーズに戻してください。
f:id:ymtkyorosiku:20220107220414p:plain

9.変更したControllerを元に戻します。

f:id:ymtkyorosiku:20220107220929p:plain
Noneを設定

10.アニメーションの設定

Left HandのIdleとRight HandのIdleにVGC/VGCResources/EmptyAnimationを設定します。(Keyが何も設定されていないアニメーションファイルです)

f:id:ymtkyorosiku:20220107221349p:plain
Left HandのアニメーションにEmptyを設定
f:id:ymtkyorosiku:20220107221457p:plain
Right HandのアニメーションにEmptyを設定

右手と左手のFistからThumbs upに好きな表情を設定しましょう。
Lowpply_Kon_ver1.2/Animation_ver1.2に表情のアニメーションが14個入っています。

11.FXレイヤーを設定する
LowPoly_Kon_PCのPlayableLayersのFXにLowPolyKonFXLayerを指定します。

f:id:ymtkyorosiku:20220108013723g:plain

お疲れ様でした。ロポリコンのSDK3化はこれで完了です。

VGCツールを導入する

睡眠システム、水泳アニメーション、スケールチェンジシステムの導入

※順番に注意してください。
睡眠システム、水泳アニメーション、スケールチェンジシステムの順で導入する必要があります。
30秒かからないですね。

f:id:ymtkyorosiku:20220108013748g:plain

動画システムの導入

動画システムを導入します。
アスペクト比調整が小さいほど画像が大きくなります。
スキップするフレーム数が小さいほどフレームレートが上がります。
Material数が1になるように調整しましょう。

f:id:ymtkyorosiku:20220107223233p:plain
設定例

DynamicBoneを減らす

耳以外のDynamicBoneは削除します。

f:id:ymtkyorosiku:20220108013806g:plain

PC版のアップロード

PC版のアバターはこれにて完成です。好きな名前でアップロードしましょう。

シーンを保存したらUnityを閉じてください。

Quest版のExcellentなロポリコンを作成する

Questプロジェクトの用意

Questアバター用のプロジェクトを作成します。
上で作成したPCアバター用のプロジェクトをコピーします。

f:id:ymtkyorosiku:20220107224545p:plain
先ほど作成したPCプロジェクトをコピー

分かりやすい名前に変更します。_questでも_androidでもお好きに。

f:id:ymtkyorosiku:20220107224608p:plain
名称変更

UnityHubからリストに追加、プロジェクトを追加したらターゲットをAndroidに変更して開きます。
ターゲットにAndroidが無い場合はそのまま開いてください。

f:id:ymtkyorosiku:20220107225011p:plain
ターゲットをAndroidに変更して開く

ターゲットでAndroidに切り替えられなかった場合は、File>Build SettingからAndroidに切り替えるためのデータをダウンロードできるかと思います。

f:id:ymtkyorosiku:20220107225451p:plain
Androidに切り替え

Quest版のロポリコンをSDK3化する

LowPoly_Kon_PCのVRC Avatar Descriptorを右クリックでコピーし、LowPoly_Kon_QuestのAnimatorを右クリックしてPaste Component As Newで貼り付けます。
(Script)はRemoveしましょう。

f:id:ymtkyorosiku:20220108013830g:plain

PC版を非アクティブにし、リップシンクがPC版を参照しているのでDefaultに戻してAuto Detect!

f:id:ymtkyorosiku:20220108013844g:plain

VGCシステムの再設定

(シーン保存前にUnityを閉じたのが原因か、自分は水泳アニメーションとスケールチェンジのセットアップが未完了になっていたため再セットアップしました)

動画システムの再設定を行います。
今回はExcellentを目指すので、有効化アニメーションを変更にチェックを入れます。

f:id:ymtkyorosiku:20220107231012p:plain
設定例

ArmatureのScaleが100になっているため、ビデオシステムのスケールを0.01倍にします。
ビデオは内側を向いているので180度回転させておきましょう。
Positionも高いのでYに0を入れておきましょう。

f:id:ymtkyorosiku:20220107231556p:plain
ビデオシステムの設定

パッケージの導入

最初に用意しておいて入れていなかったパッケージをインポートします。
1.ModelBoneDeleter
2.Mesh Baker

ボーンを削減する

GatoToolからModelBoneDeleterを使用して、髪としっぽのボーンを削除します。

f:id:ymtkyorosiku:20220108013906g:plain

複製されるのでLowPoly_Kon_Questは非アクティブにします。

f:id:ymtkyorosiku:20220107232321p:plain
もう使用しないので非アクティブ

Meshを結合する

GameObject>Create Other > Mesh Baker > TextureBaker and MeshBaker
からTextureBaker (0)を生成します。

f:id:ymtkyorosiku:20220108000217p:plain
TextureBakerの生成

Assets内の適当なフォルダにMeshBakerのフォルダを作成します。(名前はフォルダ名はMeshBakerじゃなくても分かりやすければよいです。)
f:id:ymtkyorosiku:20220108000352p:plain

TextureBakerを選択し、Create Empty Assets For Combined Materialを選択します。
マテリアルを作成するので、先ほど作成したMeshBakerフォルダに保存しましょう。

f:id:ymtkyorosiku:20220108001023p:plain
マテリアルの保存

LowPoly_Kon_Quest_deleteBonesをDrag & Drop Renderers or Parents HEARにドラッグ&ドロップします。
Objects To Be Combined が2つになっていることを確認します。
Max Tilong Bake Sizeを2048にします。

f:id:ymtkyorosiku:20220108001620p:plain
meshの指定とtexture解像度の設定

include Blend Shapesにチェックを入れます。
Skinned Mesh Rendererに変更します。
Merge Blend Shapes With Same Namesにチェックを入れます。

f:id:ymtkyorosiku:20220108001829p:plain
ブレンドシェイプの設定

Bake Materials Into Combined Materialを押します。

f:id:ymtkyorosiku:20220108004116p:plain
テクスチャとマテリアルの作成

TextureBakerの中にあるMeshBakerを選択し、OutputをBake Into Prefabに変更します。

f:id:ymtkyorosiku:20220108004628p:plain
Bake Into Prefabに変更

Create Empty Prefabで先ほど作成したフォルダに新規Prefabを保存します。

f:id:ymtkyorosiku:20220108004914p:plain
Prefabの保存

Bakeします。

f:id:ymtkyorosiku:20220108005110p:plain
MeshをBakeする

結合したメッシュでアバターを作成する

LowPoly_Kon_Quest_deleteBonesを非アクティブにして作成したPrefabをシーンに配置します。
そのあとMyPrefab0をUnPackPrefabします。

f:id:ymtkyorosiku:20220108014034g:plain

LowPoly_Kon_Quest_deleteBones(Clone)を外に出し、MeshBaker-mesh-meshをLowPoly_Kon_Quest_deleteBones(Clone)の中に入れます。

f:id:ymtkyorosiku:20220108014049g:plain

MyPrefab0を削除します。

f:id:ymtkyorosiku:20220108014059g:plain

Lowpoly_konを削除し、MeshBaker-mesh-meshをLowpoly_konに名称変更します。

f:id:ymtkyorosiku:20220108014112g:plain

リップシンクの設定をやり直します。Defaultに戻してAuto Detect!

f:id:ymtkyorosiku:20220108014140g:plain

マテリアルのシェーダーを変更します。
Legacy Shaders/DiffuseからVRChat/Mobile/Toon Litに変更します。

f:id:ymtkyorosiku:20220108012543p:plain
間違えている状態
f:id:ymtkyorosiku:20220108012556p:plain
正しい状態

アニメーションのパスを修正

VGC/CreateAssets/LowPoly_Kon_QuestにあるVGCVideo_offとVGCVideo_onのパスを変更します。
ダブルクリックでアニメーションを開き、Key名を選択した状態でキーボードのF2で名称変更します。Lowpoly_konに変更します。
f:id:ymtkyorosiku:20220108014208g:plain

Quest版のアップロード

Quest版のアバターはこれにて完成です。
PC版のBlueprint IDをctrl+Cでコピー、Quest版にctrl+Vで貼り付けてAttachします。

f:id:ymtkyorosiku:20220108012735p:plain
PC版のBlueprintを選択してコピー
f:id:ymtkyorosiku:20220108012815p:plain
Quest版に張り付け

エラーをAutoFixで解消します。

f:id:ymtkyorosiku:20220108012840p:plain
Auto Fix

ExcellentやGoodなら成功です!

f:id:ymtkyorosiku:20220108013147p:plain
エクセレント!

どこでも寝れてどこでも座れる、巨大化縮小化が可能で空も飛べる。動画まで再生できるのにExcellentなQuestアバターが完成しました!
まさに合法チート!

VRChatアバターにSit判定を設定する[VRChatアバター改変のすすめ その6]

はじめに

こんにちは。
今回はアバターにSit判定を設定して他の人を座らせる方法をご紹介したいと思います。

Sit判定の作成

Sit判定を付与する方法はとても簡単です。以下の2つのステップで簡単に設定できます。

Sit判定の準備

まず、その2で行った物を取り出すアバターを作成します。
f:id:ymtkyorosiku:20211016124928p:plain
この時、アニメーション再生前はCubeが表示されていて、アニメーション再生後にOFFになるように設定する必要があります。
f:id:ymtkyorosiku:20211016125857p:plain

VRC Station 特性をアタッチ

取り出す物に対して、VRC Stationをアタッチします。
f:id:ymtkyorosiku:20211016125306p:plain

Enter,Exitを設定

Create Empty で、取り出す物の中に2つオブジェクトを作成します。
f:id:ymtkyorosiku:20211016125412p:plain

その後、Enter,Exitなどに名前を変更し、VRC Stationに適用します。
f:id:ymtkyorosiku:20211016125545p:plain

こちらをアップロードするとこのような感じで、Cubeをタッチしたときに座るモーションになり、手と頭を動かすことのできる状態になります。

f:id:ymtkyorosiku:20211023170342g:plain

座るモーションの変更

例として立ちアニメーションを設定したアニメーションコントローラーを作成し、アタッチします。
f:id:ymtkyorosiku:20211016133124p:plain
f:id:ymtkyorosiku:20211016133149j:plain

立ちアニメーションに変更されました。

f:id:ymtkyorosiku:20211023170834g:plain

※自由なアニメーションを設定可能ですが、手と頭は動かせてしまいます。

補足

タッチ判定の形

タッチできる形を決めているのはMesh Filterです。無い場合は動かないと思います。
f:id:ymtkyorosiku:20211016130303p:plain

当たり判定だけ表示したい場合は以下の2つの方法があります。

f:id:ymtkyorosiku:20211016130406p:plain
Mesh Rendererを無効にする
f:id:ymtkyorosiku:20211016130424p:plain
Mesh Rendererを削除する

(確認のために前者の方法でいつでも表示できるようにした方がいいかも。後者の場合はマテリアル数が減ります)

座る場所と降りる場所

Enterが座る位置、Exitが降りる位置になります。
Positionを変更することで、簡単に変更可能です。

f:id:ymtkyorosiku:20211016132921p:plain

その他のパラメータ

その4の設置ギミックを使用して、以下の5つの設定を用意して動作確認を行いました。

f:id:ymtkyorosiku:20211023172024p:plain
1.デフォルト状態
f:id:ymtkyorosiku:20211023172050p:plain
2.can use station from station を外す
f:id:ymtkyorosiku:20211023172156p:plain
seatedを外す
f:id:ymtkyorosiku:20211023172245p:plain
4.can use station from station と seatedを外す
f:id:ymtkyorosiku:20211023172655p:plain
5.disable station exitのチェックをつける

1. 普通。
f:id:ymtkyorosiku:20211023173601g:plain

2. 1->2には座った状態で座れるが、2->1は座れない。
右が1で左が2の椅子です。
f:id:ymtkyorosiku:20211023174038g:plain

3. 立つ、降りた後に動けなくなる。(不具合?)

  • > 他の椅子にSitした場合、再び動けるようになるが、それ以外はワールド入り直さないと動けない(アバター変更じゃ直らない)

f:id:ymtkyorosiku:20211023175026g:plain

4. 他の椅子に移れないため、降りてから他の椅子に座ることで足が動くようになる
 2と3が組み合わさった状態。アバターギミックとしては使わないほうが良さそう。
f:id:ymtkyorosiku:20211023180634g:plain

5. 1と全く変わらない。
多分ワールドギミック用の設定なのだろう...
f:id:ymtkyorosiku:20211023181652g:plain

さいごに

以上、VRChatでアバターにSitギミックを設定する方法でした。
簡単に実装できますね。
手と足が動いてしまっても大丈夫なモーションであれば、オリジナルのSit判定がすぐに使えるようになると思います!

VRChatアバターから音楽を鳴らす[VRChatアバター改変のすすめ その5]

はじめに

こんにちは。
前回はConstraintについての大雑把な説明を行いました。
ここまで読んでくれた方は、かなりアバター改変の腕が上がっているのではないでしょうか?

さて、今回はVRCで効果音や音楽を鳴らす方法について説明していきます。

音楽を用意する

お手軽なのは魔王魂さんです。
よさげな曲をダウンロードしたら、UnityのProjectにドラッグ&ドロップしましょう。
mp3、wav、ogg形式に対応しています。m4aは対応していません。別のツールで変換してください。
f:id:ymtkyorosiku:20211012204433p:plain

音楽を鳴らす

今回はとても簡単です。UnityではAudioSource属性のついた物体で音を鳴らすことができます。
試しにその2で作成した右手のCubeにAudioSource属性を取り付けてみます。
f:id:ymtkyorosiku:20211012204905p:plain
再生したい音楽を指定しましょう。
Play On Awakeには必ずチェックを入れましょう。入っていないと再生されないです。
ループしたい場合はLoopにチェックをします。
Volumeで音量を調整します。

各パラメータについてはこちらの変数の項目を参照してください。
UnityEngine.AudioSource - Unity スクリプトリファレンス

これで、オーケストラ24がワールドにいるすべての人に同じ音量で響き渡るようになりました!
大迷惑!!

音の範囲を調整する

音の範囲を調整するには VRC Spatial Audio Source が必要になります。アタッチしましょう。
f:id:ymtkyorosiku:20211012205310p:plain

そのままだと聞こえる範囲が広すぎるので、Farを3、Nearを2にします。
Farは聞こえる距離(メートル)でNearは音量が下がらない範囲(メートルです)
Gainは音量の強さだと思うのですが、AudioSourceのVolumeとバランスをとって最適な音量になるまでいろいろ試してみてください。
これで、Cubeの中心に近づくほど音量が大きくなるようになりました!

完成

今回はとても簡単でしたね。
そのままアップロードで完成です。
その2で作成した、cube_onとcube_offを切り替えるとActiveが切り替わってAudioSourceが無効化されるため、Cubeが出現しているときに音楽が再生され、Cubeが出現していないときに音楽が停止します。

応用

応用1.見た目を変更する


こちらのスピーカーをインポートします。

f:id:ymtkyorosiku:20211012212053p:plain

Cubeと同じ階層に置きます。
f:id:ymtkyorosiku:20211012223648p:plain
Transformをコピー、ペーストします。
Transformと表示されている部分で右クリックするとコピーをするメニューが出てきます。

f:id:ymtkyorosiku:20211012212413p:plain
Transformのコピー
f:id:ymtkyorosiku:20211012212436p:plain
Transformの値上書き

Parent ConstraintとAudioSorceとVRC Spatial Audio Sourceを同じ設定で取り付けます。
新しく取り付ける場合は、すでについているコンポーネントのいずれかから右クリックしてメニューを出現させ、Paste Component As New です。

f:id:ymtkyorosiku:20211012212844p:plain
コピー
f:id:ymtkyorosiku:20211012212955p:plain
新規に追加して値をコピー

スピーカーのAnimatorはいらないので外しちゃいます。
f:id:ymtkyorosiku:20211012213153p:plain

Cubeを削除して、スピーカーの位置を調整します。
f:id:ymtkyorosiku:20211012213724p:plain
f:id:ymtkyorosiku:20211012213730p:plain

アニメーションを修正します。
アバターのAnimator属性のControllerにFXLayerを指定して録画ボタンでしたね。
cube_offとcube_onアニメーションを修正しましょう。

f:id:ymtkyorosiku:20211012214102p:plain

これで見た目をCubeからスピーカーに変えることができました。

応用2.設置ギミックから音楽を鳴らす

その4で作成した設置ギミックのCubeをスピーカーにします。
スピーカーについているParent Constraint以外のコンポーネントを全てCubeに上書きまたは追加します。
f:id:ymtkyorosiku:20211012214931p:plain
f:id:ymtkyorosiku:20211012215024p:plain
これで完成!早い...
Mesh Filterは形、Mesh Rendrerはコンピューターにこの材質で絵を描いて欲しいと命令する特性なので、実は応用1もこの方法なら早かったのです。

応用3.音楽を変更する

複数の音楽を配置する

Cubeの子に空のオブジェクト(Create Empty)を鳴らしたい音楽の数だけ配置し、それぞれにAudioSourceとVRC Spatial Audio Sourceを設定、名称変更、再生したい音楽を指定します。
f:id:ymtkyorosiku:20211012223924p:plain
f:id:ymtkyorosiku:20211012220324p:plain
CubeのVRC Spatial Audio SourceとAudioSourceは外します。
f:id:ymtkyorosiku:20211012224204p:plain
この時、先にVRC Spatial Audio Sourceから外さないとAudioSourceは外せません。

アニメーションの準備

FXLayerにLayerを追加、Weightは1、アニメーションを作成し、パラメータ追加、Motion Timeをonにして、作成したパラメータを指定します。
f:id:ymtkyorosiku:20211012220936p:plain
f:id:ymtkyorosiku:20211012221013p:plain
Motion Timeについては後述します。

アニメーションの作成

先ほど作成した音楽を鳴らす物体をまとめて選択して録画状態でキーを打ちます。
コピペで増やして、n+1分のキーを打ちます。(nは配置した音楽の数、画像の場合は3なので3+1 = 4)
以下の画像のように各フレームで有効にする物体が一つになるようにキーを打ちます。(最後のキーは全部無効化)

f:id:ymtkyorosiku:20211012221727p:plain
1frame
f:id:ymtkyorosiku:20211012221758p:plain
2frame
f:id:ymtkyorosiku:20211012221808p:plain
3frame
f:id:ymtkyorosiku:20211012221819p:plain
4frame
アップロードの準備

第3回で使用したRadial Puppetで0-1の範囲でSelectMusicを切り替えるようにします。
f:id:ymtkyorosiku:20211012222237p:plain
f:id:ymtkyorosiku:20211012222244p:plain

アップロード

アップロードして動作確認しましょう。
設置した後にRadial Puppetの値を変更することで音楽が変更されることが確認できるかと思います。

Motion Timeについて

f:id:ymtkyorosiku:20211012222847p:plain
アニメーションをframeで流れるように再生するのではなく、frameを割合で固定して再生することができます。
f:id:ymtkyorosiku:20211012222837p:plain
応用すれば服を即座に切り替えることもできますし、第3回で行った色の切り替えも、色を混ぜる表現の必要が無い場合は、こちらの方法だとアニメーションファイル一つで実現可能になります。

最後に

以上、VRChatアバターから音楽を鳴らす方法でした。

VRChatで設置ギミックを作成する[VRChatアバター改変のすすめ その4]

はじめに

前回の記事の続きです。
Unity初心者で未読の方は、以前の記事を流し読んでおいて、VRChatで使用するUnityの機能を一通り確認していただければと思います。

今回は設定しなければならないものが多く、以前の記事を読んでいることを前提にするので、画像を多めに使用して雑に書きます。

※こちらのギミックを参考にさせていただいています(というかそのまま)
手っ取り早く済ませるのであればこちらをダウンロードし説明書に従ってください。
booth.pm

今回は自分もあまり詳しくない部分が多いです。
ギミックの作成方法とか、どうやって動いているのかがなんとなく分かっているだけです。
しかし、なんとなくでも分かっていれば応用ができます。
最後に応用例をいくつか書くので、知識をつけて自分オリジナルの改変を目指しましょう。

Constraint の説明

VRChat でワールド固定化などのギミックを作成するにはConstraintの機能をもう少し知る必要があります。

以前、磁石のようなものと説明しましたが、これには多くのパラメータが存在します。
少し難しいですがいつものざっくり解説。
自分も全く理解できていないので、雰囲気だけ掴んどいてください。
f:id:ymtkyorosiku:20211005215420p:plain

f:id:ymtkyorosiku:20211005220519g:plain
①.有効か無効か
f:id:ymtkyorosiku:20211005220605g:plain
②.追従する割合

f:id:ymtkyorosiku:20211005223127p:plain
③-1 固定
③-2 Weightが1の時に、追従する物体からどれだけ離れているか
③-3 Weightが1の時に、追従する物体からどれだけ回転しているか

Constraintでは追従するオブジェクトを増やすことも可能なので、各パラメータを個別で指定する機能がついています。
例えば、反対側にCapsuleを追加してみます。画像の⑥の左側にCapsuleのTransformを追加してます。

f:id:ymtkyorosiku:20211005221713p:plain

④ 追従オブジェクトごとに③と同じパラメータを個別に設定、③を触ると上書きされる
⑤ チェックを外すとその項目だけ追従せずに操作可能になる
⑥ 追従オブジェクトごとに②と同じパラメータを個別に設定、②を触ると上書きされる

f:id:ymtkyorosiku:20211005222854g:plain
Game開始状態でパラメータ触って雰囲気を掴む

ワールド固定ギミックを作る

応用と、仕組みの雰囲気を掴むために、あえてここではBoothのものは使用せず、1から作成する手順を示します。

CreateEmptyを6個作ります。
f:id:ymtkyorosiku:20211009032717p:plain
Shiftキーでまとめて選択し、作成したオブジェクトの座標を0にします。
f:id:ymtkyorosiku:20211009032725p:plain
F2で名称変更し、ドラッグドロップで図のような親子関係にします。
f:id:ymtkyorosiku:20211009033133p:plain
Lockの中に配置したい3Dオブジェクトを設置します。
とりあえず、Lockの中心にオブジェクトが来るように配置してください。
今回も(手に持たせた時と同じように)サイズ0.1のCubeにします。(BoxColliderは外してください)
f:id:ymtkyorosiku:20211009033441p:plain
LockGimmick01にRotation Constraintと、Position Constraintをアタッチし、WorldPointをくっつけます。
以下の画像のように値を設定してください。
Lock にチェックを入れて0に固定し、isActiveにチェックを入れて有効化します。
f:id:ymtkyorosiku:20211009194121p:plain
次に、LockにParent Constraintをアタッチし、ObjectPointとLockPointをくっつけます。
f:id:ymtkyorosiku:20211009034414p:plain
Lock PointにLockをくっつけます。
f:id:ymtkyorosiku:20211009034443p:plain
LockObjectsをアバターの中に入れ、ObjectPointをHips(無いならばArmatureの下にあるオブジェクト)に配置します。
f:id:ymtkyorosiku:20211009035059p:plain
アニメーションを2つ作成します。
f:id:ymtkyorosiku:20211009035121p:plain
boolでLock01パラメータを作成
f:id:ymtkyorosiku:20211009035600p:plain
ToggleでOnOffできるようにして、FXLayerのコントローラーに先ほど作成したアニメーションを追加します。
f:id:ymtkyorosiku:20211009035721p:plain

アニメーションを作成する

今回は録画ボタンでのKeyが打てない項目を選択するため、Add Propertyから追加します。
Add Propertyに並んでる項目はInspectorにあるものばかりですね。
ここにある項目は全て[アニメーションで上書きすることが可能]です!

以下のキーを追加します。
LockObjects>LockGimmick01>Lock>Parent Constraint > Sources.Array.data[0].weight
LockObjects>LockGimmick01>Lock>Parent Constraint > Sources.Array.data[1].weight
LockObjects>LockGimmick01>LockPoint>Parent Constraint > Active

f:id:ymtkyorosiku:20211009160744p:plain
f:id:ymtkyorosiku:20211009160815p:plain

完成すると以下のようになります。
f:id:ymtkyorosiku:20211009162050p:plain

上から順に0、1、チェック無しにします。
f:id:ymtkyorosiku:20211009163507p:plain
Lock_off_01アニメーションにキーをコピーして1、0、チェックありにします。
f:id:ymtkyorosiku:20211009200139p:plain
60frameのところにキーが打たれていた場合は、そちらを選択して削除します。
f:id:ymtkyorosiku:20211009164201p:plain

ここでやっていることは難しくないです。
以下の図を見てください。
アニメーションのキーと同じ個所がInspectorにあるはずです。
f:id:ymtkyorosiku:20211009163728p:plain
f:id:ymtkyorosiku:20211009163806p:plain
つまり、この部分をOnOffで切り替えているだけです。

動作確認

Unity上だとGame再生中はキャラのボーンのTransformがアニメーションで上書きされてしまうので、Scene画面では値を変更しても反映されなくなりしゃがんだ状態になってしまいます。
そこで、キャラの座標移動を再現するアニメーションを作成します。
まず、ExampleのTポーズアニメーションを複製します。
f:id:ymtkyorosiku:20211009164957p:plain
FXControllerにLayerを追加してWeightを1にして、先ほど複製したアニメーションをドラッグ&ドロップしておき、再生できるようにします。
f:id:ymtkyorosiku:20211009165100p:plain
複製したアニメーションの30frameにRoot T のX座標を変化させるキーを設置します。
f:id:ymtkyorosiku:20211009165622p:plain

これで、Game上で座標が変化した際の動作確認ができるようになりました。
f:id:ymtkyorosiku:20211009170216g:plain

Game中にParametersのLock01を切り替えるとWeightの0と1が逆転し、接続先が変化してその場にCubeを落とすように見えるのが確認できますね!
f:id:ymtkyorosiku:20211009170927g:plain

動作確認が済み次第、不具合が起きないように、FXControllerに追加したLayerのWeightは0にするか、レイヤー自体を削除しましょう。

いつものパラメータ設定とアップロード

そろそろ説明不要かな。
f:id:ymtkyorosiku:20211009175717p:plain
f:id:ymtkyorosiku:20211009175724p:plain

応用

応用1.落とした時だけ見えるようにする。

Lock_onの時にCubeを表示
f:id:ymtkyorosiku:20211009171428p:plain
Lock_offの時はフレームを追加しましょう。
Cubeを表示から非表示に切り替えることで回収しているように見せることができます。
f:id:ymtkyorosiku:20211009171803p:plain
f:id:ymtkyorosiku:20211009171810p:plain

落とした時だけ表示、回収時に足元まで来たら見えなくなるようになりました。
f:id:ymtkyorosiku:20211009172259g:plain

応用2.接続場所を変更する。

試しに、右手に配置してみます。
ObjectPointをボーンに配置したら、座標を(0,0,0)にします。
f:id:ymtkyorosiku:20211009204257p:plain
配置するオブジェクトの回転と座標を調整します。
f:id:ymtkyorosiku:20211009173658p:plain
完成!
f:id:ymtkyorosiku:20211009174607g:plain

応用3.設置物を増やす。

LockGimmick01を複製します。
出現位置を変更したい場合はObjectPointを複製しLockGimmick02に名称を変更し、応用2と同じように設定します。
複製したLockGimmickのConstraintで接続しているObjectPointを変更します。
f:id:ymtkyorosiku:20211009175221p:plain

LockGimmick01と同じようにアニメーションの作成、パラメーターの追加をします。
f:id:ymtkyorosiku:20211009181125p:plain
f:id:ymtkyorosiku:20211009181153p:plain

完成!
f:id:ymtkyorosiku:20211009201033g:plain

最後に

お疲れ様でした。

Constraintを活用することでアバターから切り離したり、接続したりできることが分かりましたね!
次回は音源を配置する方法について説明しようと考えているので、こちらと組み合わせることで、設置した場所に音楽を流すなどの応用も可能になるかと思います!

VRChatでキャラの色を動的に変えるアニメーションを作成する[VRChatアバター改変のすすめ その3]

髪の毛の色を動的に変える

髪の毛の色を変えるためにまず、素材を準備していきます。

白い髪の毛テクスチャを用意する

使用しているアバターの髪の毛のテクスチャが存在すると思うので、そちらをデスクトップにドラッグ&ドロップでコピーできます。
f:id:ymtkyorosiku:20211004192225p:plain
その後、コピーしたテクスチャを右クリックし、プログラムから開くでフォトを開きます。
f:id:ymtkyorosiku:20211004193921p:plain
編集と作成メニューから、編集、調整で色を一番左にして保存します。
f:id:ymtkyorosiku:20211004192655p:plain
f:id:ymtkyorosiku:20211004192834g:plain
これを画像が白っぽくなるまで繰り返します。
完成した白黒(灰?)画像を作業フォルダに(Textureフォルダとか作っておくといいかも)入れます。
f:id:ymtkyorosiku:20211004192736p:plain

マテリアルを用意する

元のアバターのMaterialを探します。
マテリアルには、Mesh Rendererがコンピューターに描いて欲しい材質の情報が詰まっています。(金属?木材?光る?透明?などの情報)
f:id:ymtkyorosiku:20211004193322p:plain
①をクリックすると、対象のマテリアルがProjectに表示されると思うので、それをctrl + dで複製し、F2で名称を変更します。(自分はnero_hair_matにしました)
f:id:ymtkyorosiku:20211004193346p:plain
①をクリックして見つからない場合は自分で探してください。この場合、Element 0に入っている「tex2」の文字を入力すると引っ掛かります。
(Project内の素材が多すぎると①をクリックしても自動で移動しないことがあります)

f:id:ymtkyorosiku:20211004193614p:plain
見つからない場合は絞り込み

複製したマテリアルを、作業フォルダに移動させてください。
f:id:ymtkyorosiku:20211004194304p:plain

マテリアルに画像を適用する

f:id:ymtkyorosiku:20211004195039p:plain
f:id:ymtkyorosiku:20211004195049p:plain

  1. マテリアルを選択
  2. インスペクターを固定
  3. テクスチャを設定
  4. 人によってテクスチャを入れる場所、量が変化します。ネロちゃんはUnityちゃんToonシェーダーでした。
  5. インスペクターの固定を解除(2の逆)
マテリアルをアバターに適用する。

2つ方法があります。どちらもやっていることは同じです。お好きな方で。

  1. Mesh rendererで適用する
  2. Scene画面で適用する

f:id:ymtkyorosiku:20211004195621j:plain

この子の場合はしっぽと耳も同じマテリアルなので変えておきます。

アニメーションファイルを作成する

作業フォルダにHairColorフォルダを作成し、color_red,color_blue,color_greenのアニメーションを作成します。
f:id:ymtkyorosiku:20211004200321p:plain

f:id:ymtkyorosiku:20211004200352p:plain
ctrl+dで複製
f:id:ymtkyorosiku:20211004200419p:plain
F2でRename

BlendTreeファイルを作成する

普通はコントローラー上で直接作成するのですが、コピーができたほうが、後ほどいろいろとはかどるのでSDKからコピーします。
vrc_CrouchingLocomotionを複製し、名称をhair_colorに変更して、作業フォルダに移動してください。
f:id:ymtkyorosiku:20211004201044p:plain
f:id:ymtkyorosiku:20211004201110p:plain
コピーしたブレンドツリーの項目をすべて削除します。

f:id:ymtkyorosiku:20211004201254p:plain

  1. 選択
  2. 選択
  3. 削除(大丈夫か聞かれるのでDeleateを押す)
  4. 削除を繰り返す

全部消すと以下のようになります。

f:id:ymtkyorosiku:20211004201621p:plain

FXLayerを編集する

前回作成したFXLayerにHairColorLayerを追加し、歯車マークからWaightを1にします。
f:id:ymtkyorosiku:20211004201611p:plain
ParametersにfloatでHairColorを追加します。
f:id:ymtkyorosiku:20211004201701p:plain

先ほど作成したBlend Treeを初期Stateとして登録します。
f:id:ymtkyorosiku:20211004201947p:plain

  1. hairColorLayerを選択
  2. hair_colorをドラッグ&ドロップ
  3. stateを選択
  4. Write Defaultsを外す

ブレンドツリーの設定を行う

f:id:ymtkyorosiku:20211004202315p:plain

  1. 1Dに変更
  2. HairColorに変更 -> FXLayerで指定したfloatのパラメータが表示される
  3. Listに3つ追加

Motionに先ほど作成したアニメーションを設定します。
f:id:ymtkyorosiku:20211004202606p:plain

Thresholdを0~1にします。
f:id:ymtkyorosiku:20211004211915j:plain

これで、HairColorが0の時はred,0.5の時はblue,1の時は緑になります。
また、FXLayerにblend Treeが登録されているので、そこに設定されているアニメーションも編集できるようになります。

色を変更するアニメーションを作成する

前回の復習です。
最初に、アバターのアニメーションを編集できるようにコントローラーに登録してから、編集したいアニメーションを選択し、録画ボタンです。
f:id:ymtkyorosiku:20211004202946p:plain

髪の毛のオブジェクトを選択し、Mesh Renderer のMaterial色を変更します。
この際、Projectのフォルダにある素材の方を直接触らないように注意してください。
今回は髪の毛だけを変えるため、しっぽや耳の色は同じ素材を使用していますが、変化していないことが確認できるかと思います。

f:id:ymtkyorosiku:20211004203929g:plain

HairについているSkind Mesh Rendererの色を赤に変更するKeyが打てていることが確認できます。
f:id:ymtkyorosiku:20211004204047p:plain

前回書きましたが、大事なことなのでもう一度書きます。
Unityのアニメーションは、「物体の特性に値を上書きする」だけです。
f:id:ymtkyorosiku:20211004211353p:plain
やってることが分かれば何も怖くない。

同様にblueとgreenも作成します。
録画で作成しても良いですが、単純なキーなのでコピペして編集でも大丈夫です。
f:id:ymtkyorosiku:20211004213917g:plain

動作確認

f:id:ymtkyorosiku:20211004212822p:plain
f:id:ymtkyorosiku:20211004212832p:plain
f:id:ymtkyorosiku:20211004212840p:plain

  1. アバターを選択
  2. Game開始
  3. 再生されていることを確認し、ダブルクリックで中へ移動
  4. 選択
  5. 赤い矢印をドラッグ
  6. 色が変わっていることを確認
  7. HairColorが0~1で変化していることを確認
  8. Game終了

色が変わりました!
BlendTreeがrgbを混ぜてくれています。
今回はアニメーションの配置が等間隔(0, 0.5, 1)だったので、赤と青の中間の場合は(r,g,b,a)=(0.5, 0.5, 0, 1)になるため、紫になります。
f:id:ymtkyorosiku:20211004213852g:plain
欲しい色があったら0~1の範囲で後で追加しましょう。

動作確認が済んだらControllerは外しましょう。
f:id:ymtkyorosiku:20211004214452p:plain

VRChatで動かすための準備

いつものやつです。
動作することは確認したので後はVRChatで動くようにするだけです。今回で三回目ですね。

Expression ParameterにHairColorを登録
f:id:ymtkyorosiku:20211004214504p:plain

Menuに登録
f:id:ymtkyorosiku:20211004214559j:plain
Radial Puppetについては後で解説します。
Paramater Rotationの方にHairColorを設定してください

アップロード

Materialの変更で赤いエラーが出ていた場合は(赤いエラーだけ)Auto Fixしてください。
f:id:ymtkyorosiku:20211004215025p:plain
動いた!
f:id:ymtkyorosiku:20211004220501g:plain

Radial Puppetについて

Paramater スティックメニューを開いている間はOn(1),閉じている間はOff(0)
Paramater Rotation 0~1の範囲で0.01刻みに値を変更する(0%~100%)

耳の色も変更する

HairColorFolderと同じ場所にEarColorフォルダを作成します。
f:id:ymtkyorosiku:20211004220945p:plain

次にHairColorFolderの中身を複製するのですが、下記の方法で複数選択した後にctrl + dで複製を行うと簡単です。

複数選択方法

複数選択の方法は2つあるので使い分けてください。

ctrlを押しながらクリックで複数選択-> 間をあけることができる。

f:id:ymtkyorosiku:20211004221410g:plain
ctrlで一つずつ選択

Shiftを押しながら対象の範囲の上部分と下部分を順番にクリック -> 一度にたくさん選択できる

f:id:ymtkyorosiku:20211004221651g:plain
Shiftで一気に選択

また、ctrlの方法は既に選択しているものを選択から外すことが可能なため、Shiftで選択してから、いらない部分をctrlで外すなどの合わせ技ができます。

Hairと同じような状態にする

ctrl + d で複製
複数選択した状態で選択されている素材の一つをドラッグ&ドロップすると一緒に移動できます。便利。
f:id:ymtkyorosiku:20211004222236p:plain

アニメーション名が被ってしまうので「部位_色」に変更します。
名称変更はF2ですね。Earも対応しましょう。
f:id:ymtkyorosiku:20211004222717p:plain
f:id:ymtkyorosiku:20211004222725p:plain

earのblend treeに紐づいているアニメーションを修正します。
f:id:ymtkyorosiku:20211004222930p:plain

Hairでやったことと同じようなことをやる。
f:id:ymtkyorosiku:20211004223820p:plain
f:id:ymtkyorosiku:20211004223827p:plain
f:id:ymtkyorosiku:20211004224133p:plain
f:id:ymtkyorosiku:20211004224541p:plain
f:id:ymtkyorosiku:20211004225309p:plain
f:id:ymtkyorosiku:20211004225317p:plain
f:id:ymtkyorosiku:20211004225737p:plain
f:id:ymtkyorosiku:20211004225957p:plain
f:id:ymtkyorosiku:20211004230102p:plain
f:id:ymtkyorosiku:20211004230703p:plain

  1. Layere追加
  2. Weight変更
  3. Parameters追加
  4. Blend Treeをドラッグ&ドロップ
  5. State選択
  6. Write defaults を切る
  7. controller設定
  8. earのアニメーションを編集してるか確認
  9. コピペしたのでearのキーが全部hairになっているため削除(一番上のキーが全体になるので、右クリックからDelete Keys)
  10. 録画ボタンとかを駆使して耳の色が変わるアニメーションキーを打つ(さっき髪でやった)
  11. プレビューで確認可能
  12. 色が変わってるか確認
  13. プレビューOffの時
  14. 元に戻ってるか確認
  15. 青と緑も作る
  16. controller外す
  17. Expression Parameters登録
  18. Menuに登録
  19. 忘れてました。Blend Treeに紐づいているパラメータ変更

完成!
f:id:ymtkyorosiku:20211004231610g:plain

X軸とY軸を持つBlend Tree

Blend Treeの作成

しっぽの色を変更するアニメーションを例に説明します。
VRChatのfloatの範囲は-1.00~1.00なのですが、そちら活用する方法の一例です。
f:id:ymtkyorosiku:20211004235608p:plain
2D Freefrom Directional の Blend Treeを作成します。
これは、X軸とY軸を-1.00~1.00の範囲で持つBlend Treeです。
今回は黒と白のアニメーションも作成し、いい感じの位置に置いて動作確認をしました。
f:id:ymtkyorosiku:20211004234648g:plain
きれいに混ざりましたね。
本来は色を混ぜるために使うものではないです。
この方法では一部の色が表現できません。(黄色とか)
また、余分にパラメータを消費します。
パラメータに余裕のない方や、指定した色だけで変更したい方は 1D のBlendTreeにたくさんの色変更アニメーションを登録した方が良いです。
パラメータを余分に使っていいという方は、こちらの方法でアニメーション作成の手間を省くことができます。

VRChatで表示

いつも通りのパラメータ追加
f:id:ymtkyorosiku:20211004234017p:plain

Two Axis Puppetを選択
f:id:ymtkyorosiku:20211004234050p:plain

Two Axis Puppetの説明

Parameter 開いてるときOn(1),閉じているときOff(0)
Parameter Horizontal 横に-1.00~1.00の範囲で変化させる
Parameter Vertical 縦に-1.00~1.00の範囲で変化させる

アップロードして確認

自由に色を変更することができますね。
f:id:ymtkyorosiku:20211005000412g:plain

f:id:ymtkyorosiku:20211005000052p:plain
決定したときにxとyの値が固定される

このメニューを、別のことに応用できないかを模索してみてください。
ちなみにデフォルトのLocomotionLayerではアバターの移動方向をX(左右),Z(前後)として、移動方向のアニメーションを混ぜて表現しているみたいです。
f:id:ymtkyorosiku:20211005001648p:plain

終わりに

以上、キャラの色を動的に変えるアニメーションの作成方法の解説でした。

次はWorldにオブジェクトを配置するギミックの作成をしてみたいなと考えています。
頑張って土曜日までには投稿したいです。

VRChatで物を取り出すアニメーションを作成する[VRChatアバター改変のすすめ その2]

はじめに

こちらの記事は前回の続きです。
tksp-unityroom.hatenablog.com

前回、キャラクターを動かすアニメーションの設定ができたので今度は物を取り出す機能の作成を行いたいと思います。

物を取り出す

物を取り出すためには、アバターと同じ位置に物を出現させる必要があります。
そのため、物を取り出す前に、物をアバターに追従させる技術を知っておく必要があります。

物を追従させる

方法は2種類あります。
応用の幅が広いので、ぜひ2の方法は知っていてほしいです。
応用をしない場合は1の方法が処理が軽いので、使い分けられるようになっていただけたら嬉しいです。

  1. 物体をボーンの中に入れる
  2. Constraint特性で結合する

最初にCubeをHierarchy内で作成し、InspectorのSize(XYZ全部)を0.1にして大きさを調整します。
f:id:ymtkyorosiku:20211003142625p:plain

Cubeにはデフォルトで4つの特性(コンポーネント)がついていますね。Transformeについては前回説明したのでそれ以外についてザックリ説明します。

Mesh Filter

その物体の形を確定させるもの

Mesh Renderer

Mesh Filter で指定された形で絵を描いて欲しいとコンピュータに命令を送るもの

box Collider

Collider同士でぶつかると反発する当たり判定の特性。

不要なコンポーネントを外す方法

今回、BoxColliderがついたままだとVRChatのアバターに自動的に付与される当たり判定と干渉して不具合が起きるのでBoxColliderを外しておきます。
消したいコンポーネントを右クリックして、Remove Component で外せます。
f:id:ymtkyorosiku:20211003143458p:plain

ボーンとMesh Rendererの関係

さて、ボーンとは何ぞやといいますと骨です。(意味不)
大体のアバターがArmatureの中に入っている構造になっているかと思います。(Armatureが無ければ別の名前で同じような構造になっているかと思います。)
f:id:ymtkyorosiku:20211003144434p:plain

キャラクターの構造としては、先ほど説明したMesh Rendererでその形を描くように命令されているのですが、それだとポーズが取れないです。
そのため、ネロちゃんはbodyにSkinned Mesh Renderer という別の特性を持っています。
f:id:ymtkyorosiku:20211003164451j:plain
これは、Meshの中に入っている形を対応されたボーンのTransformの値で変形させてから描くように命令するMesh Rendererです。
例えば、Arm(腕)ボーンのTransformを変更するとSkinned Mesh Rendererが表示する形が変形することが確認できます。

f:id:ymtkyorosiku:20211003153602g:plain

添付画像のように、Transformの変形はInspectorからの直接指定だけではなく、Hierarchyで物体を選択した後、Sceneでドラッグ操作することでも変更可能です。
変形の方法は以下の通りです。
f:id:ymtkyorosiku:20211003153428p:plain

  1. 位置(Position)
  2. 回転(Rotation)
  3. 大きさ(Scale)
  4. 上記全部まとめてできる

編集をする際は、細かい部分はこちらで調整し、最後は直接指定で小数部分をきれいにしたりすると良いかと思います。

方法1: ボーンの中にCubeを入れる

ボーンの中にCubeを入れて、ボーンを変形させると、追従することが確認できます。
今回はこちらの方法は使用しません。
f:id:ymtkyorosiku:20211003185130p:plain

方法2: Constraint特性で結合する

Constraintは簡単に言えば磁石のようなものだと思っていただければよいです。

CubeにParent Constraintの特性を追加します。

f:id:ymtkyorosiku:20211003154904p:plain
Cubeに追加

Sourcesにくっつけたい物体を指定し、(今回はArmのボーン)
Is Active にチェックを入れて有効化します。
f:id:ymtkyorosiku:20211003160036p:plain

実はこの状態でHierarchyのボーンを動かしてもConstraintが動いているのかは確認できません。
確認するためにはゲームを起動させる必要があります。
ゲームを起動するのは上の再生ボタンです。

f:id:ymtkyorosiku:20211003160423p:plain

  1. ゲーム開始、停止
  2. 一時停止
  3. 一時停止中、1frameずつ進める

f:id:ymtkyorosiku:20211003163020g:plain
ゲーム中に毎frame磁石の力が働くので、Cubeがくっついていることが確認できます。
しかし、Scaleは追従してませんね。
それは、Parent ConstraintがPositionとRotationに追従させる特性だからです。
Scaleも追従させたい場合は、Scale Constraintも追加しましょう。
(今回は追加しない)
f:id:ymtkyorosiku:20211003185531p:plain

この時点でお気づきかと思いますが、全部追従してしまう①の方法に対して、追従する箇所を選べる②の方法は圧倒的に応用性が高いです。

Constraintはいくつか種類があります。Parent Constraint はPosition Constraint と Rotation Constraintを一つにまとめて動作を軽くした特性になります。
f:id:ymtkyorosiku:20211003161127p:plain

さて、最後にアバターの中にCubeを入れておきましょう。VRChatにアップロードするデータは VRC Avatar Descriptor 特性を持つ物体だからです。
データが無ければ存在しないのと同じですからね。

f:id:ymtkyorosiku:20211003161718p:plain

この状態でアップロードするとCubeが追従しているのが確認できます。
f:id:ymtkyorosiku:20211003162528p:plain
今は腕に追従しているので、くっつけるボーンをHandに変更し、Cubeの座標も手の位置にしておきましょうか。
これで手に持っているように見えるはずです。
f:id:ymtkyorosiku:20211003162611p:plain
鏡なので反転するよー
f:id:ymtkyorosiku:20211003162938p:plain

アニメーションを作成する

さて、いよいよアニメーションを作成していきますが、アニメーションって何なのでしょうか?
覚えていただきたいのが、Unityのアニメーションは、「物体の特性に値を上書きする」ものだということです。

前回のアニメーションでキャラクターに拍手をさせたと思うのですが、あれはボーンのTransform属性の座標と回転を変更することによって表現されています。
つまり、Inspectorの値を書き換えることがアニメーションの本質なのです!
では、実際にアニメーションを作成していきます。
cube_off,cube_onのアニメーションと、例としてnero_FXLayerというアニメーションコントローラを作成します。(前はVRCSDKからActionLayerをコピーしてきましたが、FXLayerのサンプルはないので新規作成です)
f:id:ymtkyorosiku:20211003163831p:plain
f:id:ymtkyorosiku:20211003163843p:plain
f:id:ymtkyorosiku:20211003164110p:plain

作成したFXLayerを選択した状態でAnimatorタブを開きます。
LayersにCubeLayerを追加し、歯車のアイコンからwaightを1にします。
cube_off,cube_onの順にドラッグ&ドロップします。(オレンジの矢印がOffに行くようにしたい)
f:id:ymtkyorosiku:20211003170606g:plain
f:id:ymtkyorosiku:20211003170823j:plain

ちなみにオレンジの矢印はEntryで右クリックをして引き直す項目があるので、そちらでOffに行くように設定できればいいです。
f:id:ymtkyorosiku:20211003165801p:plain

これが、前回解説していなかったもう一つのStateを増やす方法です。
では、アニメーションに特性を変化させるKeyを打っていきます。
Action Controller をアバターのAnimator Compornent内のControllerに指定します。
f:id:ymtkyorosiku:20211003170301p:plain
Animationタブを開きます。

InspectorでAnimator Compornentを所持している物体を選択すると、AnimatorタブとAnimationタブがそれぞれ、Animator CompornentのControllerに指定されているAnimationControllerに紐づけされます。

画像で説明すると、1を選択状態にすることで、2に設定しているControllerを3,4で編集することが可能になります。
f:id:ymtkyorosiku:20211003171652p:plain

キーを打つ

方法は簡単です。Animationで編集したい項目を選択してから録画を開始し、Inspectorの値を変更するだけです。

f:id:ymtkyorosiku:20211003173214p:plain
f:id:ymtkyorosiku:20211003173432p:plain

  1. 編集したいアニメーションを選択(編集対象がnero_0.0.0、編集先のControllerがFXLayerになっているのでFXLayerの全Stateに設定されているアニメーションが一覧で表示される)
  2. Key録画開始
  3. アニメーションで操作する物体選択
  4. ActiveをOffにする
  5. CubeのActiveをOffにするKeyが生成される
  6. Key録画終了

ちなみに、④のActiveについてですが、こちらをOffにすると「自身のTransform以外のすべての特性を無効化し、自身の階層下オブジェクトのTransform以外のすべての特性を無効化」する効果があります。
つまり、MeshRendererが無効化されるのでコンピューターにMeshの形を描く命令が飛ばなくなります。
結果、Cubeが描かれないため表示されないのです。ConstraintはActiveになったときに手の座標までワープする感じになりますね。
ワープするのが一瞬見えてしまうのが嫌だという方は、Mesh RendererのActiveを切る方法でアニメーションを作成しても大丈夫です。
しかし、物体自体のActiveを切ってしまったほうが、表示していないときの処理が軽くなるのでお勧めです。

そしたらOnのアニメーションを作成しましょう。
上記と同じ方法でKeyを設定する方法でもよいのですが、OffのKeyを選択(青色になる)して、ctrl+c(コピー)して編集対象をOnのアニメーションに変更し、1frame目にctrl+v(ペースト)してActiveをonにする方が楽です。
f:id:ymtkyorosiku:20211003180018g:plain

アニメーションコントローラーの設定(前回解説したのでわかるはず。boolは0か1のフラグでしたね)

f:id:ymtkyorosiku:20211003180715p:plain

  1. Parametersタブにフラグをboolで追加
  2. フラグ名はなんでもよいが、とりあえずCubeにする
  3. MakeTransitionで結ぶ
  4. MakeTransitionで結ぶ
  5. off -> onの矢印を選択
  6. Has Exit Time無し
  7. フラグをtrueで追加
  8. on -> off の矢印選択
  9. Has Exit Time無し
  10. フラグをfalseで追加
  11. offのStateを選択
  12. Write Defaultsをoffにする
  13. onのStateを選択
  14. Write Defaultsをoffにする
Write Defaultsについて

現在のバージョンではVRChat公式が非推奨と言っているのでoffにしましょう。Write Defaultsがどういうものか知りたい方は調べてみてください。

動作確認

キャラのAnimator特性にControllerが設定されている場合、Animatorタブのコントローラーは紐づいているので、Gameを開始することで実際のアニメーション遷移を確認することができます。
Gameを開始し、Parametersの値を変化させることでアニメーションの遷移が行われて、Cubeの表示がOn,Offされていることが確認できます。

f:id:ymtkyorosiku:20211003183058g:plain

アニメーションコントローラーを外す

編集が終わったのでAnimatorのControllerはNoneにしましょう。右側のボタンで直接指定できるのでNoneを選択します。
f:id:ymtkyorosiku:20211003181809p:plain

次は、VRChatからアニメーション操作をするための処理を追加します。
動作確認が正しく動いていた場合、ここが間違っているか、アップロードのデータに含まれていない(キャラの中にCubeを入れていない)ことが多いので確認してください。

Parameterの追加

Addから追加
f:id:ymtkyorosiku:20211003181445p:plain

Menuの追加

On,Offを制御したいのでToggleを追加
f:id:ymtkyorosiku:20211003181522p:plain

アップロード

完成です!
Cubeを取り出すことができました!
f:id:ymtkyorosiku:20211003192537g:plain

取り出すものを好きな物体に変更する

Cubeの代わりに好きなオブジェクトで同じ方法を試してみるのもよし、Cubeの中に好きなものを追加して、CubeのTransform以外の特性を削除するのもよし

ActionLayerのアニメーションを見てみる

ここまでの説明でアニメーションで何をやっているかが分かったはずなので、怖くないですね。
ControllerにActionLayerを設定して、拍手のアニメーションを見てみましょう。
f:id:ymtkyorosiku:20211003183900p:plain
Animatorコンポーネントの値を書き換えてるだけでした。全部ボーンに関するパラメータですね。

Animator特性について

自分もあまり詳しくないので、なんとなくの雰囲気ですが以下のような感じです。
(Humanoidとは何ぞやとかになるので、詳しく知りたい方はこちらを参照
Unity Humanoid Avatarの解説 [VirtualCast]
)
1.Game中、ControllerのアニメーションをAvaterに適用する。
2.Game中、Avatar(大抵はFBXファイル)の設定を使用してアニメーションに存在する設定値でTransformの値を上書きする。

最後に

お疲れ様でした。
ただCubeを表示するだけなのに教えておきたいことが多すぎて意外と大変でした。

次は色を変化させるアニメーションを作成できたらなと思っています。
tksp-unityroom.hatenablog.com

VRChatアバターにアニメーションを大量に設定するのに必要な知識とか機能のまとめ[VRChatアバター改変のすすめ その1]

はじめに

こんにちは。
VRChatを始めて2ヶ月くらいのTKSPです。
初心者の人たちと話す機会が増えて意外とUnity難しい、分からないという話を聞くので、アバター作成に覚えておくと便利なUnityの機能をざっくりと解説しながら、改変例を紹介していきたいなと考えております。
なんとなくで書いているので間違っている部分もあるかと思いますが、UnityでのアニメーションがVRChat上でどのように作用してアバターが動いているのか全体の雰囲気をなんとなく感じ取ってもらえれば幸いです。

今回はアニメーションを設定する方法の解説をしていきたいと思います。デスクトップでアバターを動かしている人たちは必見です。

アバターアップロードの手順は省きますので別の方の記事を参照してください。
note.com


本記事ではUnity 2019.4.31f1を使用します。
こちらのページを確認し、現在のVRChatに合わせたバージョンで作成するようにしてください。

docs.vrchat.com

Unityのインストール

こちらのページからダウンロード、インストール、UnityIDの登録を済ませておいてください。
unity3d.com

VRChat SDK のダウンロード

こちらからDownload SDK3 - Avatars をダウンロードしてください
https://vrchat.com/home/download

UnityのVRChatアバター作成に必要なタブ

Unityを起動するといろいろなタブが出てきますが、大雑把に説明します。

Hierarchy

現在のシーンに置かれている物体の一覧が表示される
物体をクリックするとその物体が選択され、一部のタブで操作が可能になる(操作できるタブに関しては後述)

Scene

現在開いているシーンが表示される。

Asset Store

ゲームを作るための素材の購入やダウンロードができる。
素材をVRChatに持っていくためには改変が必要なケースが多いため、VRChat初心者にはお勧めしません。Boothを使用しましょう。

Project

現在のプロジェクトに入っている素材一覧です。

Game

基本使用しないです。(アバターのアップロード時には使用する)
アニメーションやパーティクルを作成中で動作確認をする場合などに使用します。
正しく動くかをアップロード前に確認したりできますが、説明が大変なので省きます。

Inspector

Hierarchyで選択した物体の特性を表示、編集します。

Console

エラーや、開発者用のメモを表示したりするところです。
テキストが赤くならなければ気にする必要はほとんどありません。

Animation

Hierarchyで選択した物体か、Projectで選択したアニメーションの作成、編集を行う場所。

Animator

Hierarchyで選択した物体か、Projectで選択したアニメーションコントローラーの編集を行う場所。

Unityをカスタマイズする

これらのタブはドラッグで自分の好きな位置に移動したり、塊から外して別窓で表示できます。
別窓表示時に誤って消してしまった場合は、メニューにあるWindowから探すことで表示させることが可能です。

f:id:ymtkyorosiku:20211002224832p:plain

f:id:ymtkyorosiku:20211002224948p:plain
消しちゃったタブを開く

よく使うショートカット(覚えておくと便利)

Hierarchyの物体を選択している状態で「ctrl + c 」(コントロールキーを押しながらCキーを押す)コピー
「ctrl + v 」ペースト

「ctrl + z」操作を一つ巻き戻す
「ctrl + y」巻き戻した操作を元に戻す
Hierarchyの何もない場所をクリックした後に 「ctrl + s」 シーンを保存する

Hierarchyの物体やProject内の素材を選択している状態で「F2」 名前の変更
Hierarchyの物体やProject内の素材を選択している状態で「ctrl + d」 複製

VRCSDKのインポート

先ほどダウンロードしたVRChat SDK(VRCSDK3-AVATAR-2021.09.30.16.19_Public.unitypackage)をUnityを開いている状態でダブルクリックします。
すると、以下のようなウィンドウが表示されるのでImportします。

Importが終わるとProjectにVRC SDKが導入され、メニューにVRChat SDK と表示されるようになります。

アバターのインポート

次にアバターを導入します。
Dynamic Bone所持済みの方は先にインポートしておいてください。

VRCSDKと同様に.unitypackageがあると思うので導入してください。
無い場合はProjectでAssetsフォルダを選択した状態で右クリックし、Createから作業用のフォルダを作成します。
その中に.fbxやテクスチャなどをドラッグ&ドロップすれば素材として追加することができます。


今回はネロちゃんを使用します。
booth.pm

改変なしでアップロードする場合は多くの場合は.prefabがあると思うのでそちらをHierarchyにドラッグ&ドロップし、メニューのVRChat SDK -> Show Control Panelから表示されるタブからログインしてBuilderタブのBuild & Publish for Windowsからアップロードできるかと思います。


インポートすると.fbxがあると思うのでそれをHierarchyにドラッグ&ドロップします。
すると、Scene画面にオブジェクトが表示されます。

Scene画面の覚えておくと便利な操作方法

f:id:ymtkyorosiku:20211002164314g:plain
右クリックしながらドラッグ
f:id:ymtkyorosiku:20211002164618g:plain
マウスホイール上下
f:id:ymtkyorosiku:20211002164812g:plain
マウスホイールをクリックした状態でドラッグ


Hierarchyに配置した物体を選択するとInspectorにその特性((コンポーネント)が表示されます。

Transform

その物体の位置、回転、大きさを制御

Animator

その物体のアニメーションを制御

VRC Avatar Descriptorコンポーネントの追加

ここにAdd Componentからvrcと検索してVRC Avatar Descriptorを追加します。
View PositionのEditを押して目線の高さを調整します。額の高さくらいが良いです。

f:id:ymtkyorosiku:20211002171527g:plain
目線の高さ調整

大抵のアバターはLipSync(口パク設定)をAuto Detect!で自動的に設定できるかと思います。

Eye Look は目の向きとまばたきを制御します。
まず、Transformに目のボーンをHierarchyからドラッグ&ドロップで設定し、Scene画面を見ながらRotation Statesの値を調整します。

EyelibsでBlend Shapesを選択し、顔のメッシュをドラッグ&ドロップします。
Blinkで瞬きのアニメーションを設定したら、自動でまばたきするようになります。
Looking Up と Looking Down は - none - で大丈夫です。

ここまでで、アップロードできる設定までは完了しました。

アニメーションコントローラーを作成する

ProjectからAssets > VRCSDK > Example3 >Animation > Controllers内にあるvrc_AvatarV3ActionLayerを複製(ctrl + d)します。

f:id:ymtkyorosiku:20211002174634p:plain
複製

複製したActionLayerは分かりやすいようにRenameし、作業フォルダの中に入れておきましょう。
名称例 : nero_ActionLayer
作業フォルダ例 : TKSP > Nero > Animation

f:id:ymtkyorosiku:20211002174602p:plain

Animatorタブを開いた状態で先ほど複製したActionLayerを開きます。

Animatorタブの操作や内容

操作方法

Sceneと同じでマウスホイールで拡大縮小、マウスホイールクリック状態でドラッグすると平行移動ができます。
f:id:ymtkyorosiku:20211002182452g:plain

Layersタブ

レイヤーを管理

f:id:ymtkyorosiku:20211002180750p:plain

Paramtersタブ

アニメーションを制御するフラグを管理する。
フラグは、ある条件を達成しているかを管理するものです。

f:id:ymtkyorosiku:20211002180742p:plain

State

アニメーションが設定できるブロック。

f:id:ymtkyorosiku:20211002180759p:plain

Transition

矢印。アニメーションからアニメーションへどのように切り替わるかを制御する。

f:id:ymtkyorosiku:20211002180807p:plain

Stateの追加

2つの方法があります。
何もないとこで右クリック、Create State > Empty
f:id:ymtkyorosiku:20211002181230p:plain

AnimationファイルをProjectからドラッグ&ドロップ(次回の記事で説明すると思います)

Transition の追加

Stateの上で右クリック Make Transition で矢印を伸ばしたいStateをクリック

Transitionの削除

削除したい矢印を選択した状態でInspectorから繋がっているStateを選択し削除
f:id:ymtkyorosiku:20211002182026p:plain

ActionLayerの仕組み

大雑把に解説します。
オレンジ色のStateを選択してください、「WaitForActionOrAFK」
これがスタート位置になります。
InspectorのMotion内にあるファイルをクリックすると、ProjectのAssets > VRCSDK > Example3 > Animation > ProxyAnimが開きます。
そのファイル(.anim)を選択するとInSpectorの画面が変わると思いますが、ここでアニメーションの確認ができます。

デフォルトでは黒い服着た人ですが、Hierarchyに置いてあるモデルをドラッグ&ドロップすることで好きなアバターに切り替えることができます。

f:id:ymtkyorosiku:20211002184349g:plain

オレンジのStateから上に伸びている矢印を選択してください
f:id:ymtkyorosiku:20211002184949p:plain

  1. 矢印が繋がっているState
  2. 時間をかけて矢印を通るか(後述します)
  3. フラグです。この場合、VRCEmoteが1以上8以下でこの矢印を通るとなります。Greaterは「~より大きい」、Lessは「~より小さい」です。
  4. 後述します。

次にstand_clap_loopの両端の矢印を見てみましょう。
Equalはイコール(等しい)、NotEqualはノットイコール(等しくない)です。
f:id:ymtkyorosiku:20211002190130p:plain
f:id:ymtkyorosiku:20211002190139p:plain
左のフラグがVRCEmoteが2と等しい時、右のフラグがVRCEmoteが2じゃないときに矢印を通るのが確認できます。

VRCEmoteはParamtersタブでフラグとして登録されていますが、VRChatで切り替える方法を解説します。

先ほどアバターに追加したVRC Avatar DescriptorコンポーネントのPlayable Layersに作成したアニメーションコントローラーを設定します。
f:id:ymtkyorosiku:20211002190755p:plain
f:id:ymtkyorosiku:20211002190804p:plain

作業フォルダにExpression ParametersとExpressions Menuを作成します(名前は分かりやすいようにしておくと良いです)
f:id:ymtkyorosiku:20211002191614p:plain
f:id:ymtkyorosiku:20211002191729p:plain

VRC Avatar DescriptorコンポーネントのExpressions に設定します。
f:id:ymtkyorosiku:20211002191947p:plain

下記の画像のように、ExpressionParametersのInspectorを見てみるとすでにいくつか設定されています。
ここに設定されたものをVRChatのメニューから操作できるようになるので、NameとTypeがActionLayerのParamertersタブのものと一致するか確認しましょう。
今回はVRCEmoteを操作したいので一致していて大丈夫そうですね。
f:id:ymtkyorosiku:20211002193252p:plain

  1. ExpressionParametersを選択
  2. NameとTypeを確認する
  3. AnimatorのParametersタブを確認
  4. Typeの種類はここで確認できます。(Typeの種類は後述します)
  5. Nameと一致しているのを確認

誤って追加した項目は右クリックでDeleteを表示して削除できます。
f:id:ymtkyorosiku:20211002193356p:plain

Typeの種類

int 整数 0~255までを管理できるフラグ
float 少数 -1.00 ~ 1.00 を0.01刻みで管理できるフラグ
bool 真偽 0(偽)と1(真)を管理できるフラグ(VRChatで制御できるフラグは上限があるので少ない数字で表現できる分岐の場合にコスパがいい)

次にMenuを開きます。
Add Controlsで項目を追加します。

Name に手を合わせると入力します。
TypeをToggleに変更します。
ParameterをVRCEmoteに変更します。ここで設定できる項目はExpressionParametersで設定した項目であることが分かります。
Valueに2を設定します。
f:id:ymtkyorosiku:20211002193906p:plain

この状態でアップロードして動かしてみましょう。
すると、Expressionsに追加したToggleが表示されていることが確認できます。

ToggleはOnの時に設定したパラメータを指定の数字に、Offにしたときに設定したパラメータを0にするメニューです。
つまり、OnでVRCEmoteに2,OffでVRCEmoteに0が設定できました!

f:id:ymtkyorosiku:20211002220850g:plain

さて、ExpressionParametersに設定してはいけないParametersも存在します。
それは既に定義しているパラメーターです。
詳しくはこちらを参照
公式(英語):https://docs.vrchat.com/docs/animator-parameters
翻訳(非公式)
ankoro199.hatenablog.com

こちらはAnimationController(ActionLayer)のParameterに設定しておくことでメニュー以外からの操作ができるパラメーターの一覧になります。
ミュートやAFKになったときに特別なアニメーションをさせることができそうですね!


次に好きなアニメーションを設定してみましょう。
キャラアニメーションはこちらを使用させていただきます。
booth.pm

  1. アニメーションを変更したいState選択
  2. StateのMotion欄に再生したいアニメーションを設定

f:id:ymtkyorosiku:20211002212919p:plain


はい、これで拍手のアニメーションが設定したアニメーションで置き換わりました。

Has Exit Time について

次にstand_waveのStateの右矢印を見てみましょう。
stand_clap_loopと違ってVRCEmoteが1じゃないときに矢印を通るフラグが設定されていないことが確認できます。
しかし、Has Exit TimeがOnになっているので、時間の経過で矢印を通るのです。

f:id:ymtkyorosiku:20211002213613p:plain

Settingsの中身を見てみます。

f:id:ymtkyorosiku:20211002214511p:plain
Exit Timeが0.6秒。これは矢印の左接続Stateが開始されてから0.6秒のタイミングで矢印を通ることを指しています。
Transit Duration 0.25秒。これは0.25秒の間、前のStateを混ぜながら次のStateを開始することを指しています。
Transition Offset 0秒 矢印を通るのを開始した際に、次のアニメーションが混ぜられるため開始しているのですが、矢印を通るタイミングでの次のアニメーションの再生位置を指定できます。(前のアニメーションとうまく混ぜられるように設計するため?)
詳しくは公式のリファレンスを参照してください。
アニメーション遷移 - Unity マニュアル

さて、例えば、先ほど設定したEmote2の時と同じようにToggleでメニューを登録してしまうと問題が発生します。
f:id:ymtkyorosiku:20211002214835p:plain
それは、ToggleがOnになっていてもアニメーション終了判定を通ってしまいループしてしまうからです。

f:id:ymtkyorosiku:20211002215048p:plain

  1. Onになったら通る
  2. Offになっていなくても0.6秒経過したら通る

このようなときはToggleではなくButtonを使用しましょう。
f:id:ymtkyorosiku:20211002215350p:plain

ボタンは押している間はOn、離している間はOffになります。
つまり、Onの時に設定したパラメータを指定の数字に、Offにしたときに設定したパラメータを0にするメニューです。
OnでVRCEmoteに1,OffでVRCEmoteに0が設定できました!
f:id:ymtkyorosiku:20211002221057g:plain

さて、ここまで来たらアニメーションの設定はなんとなく分かったのではないかと思います。
Stateの追加方法やTransitionの追加方法も途中で紹介していたりするので見落としてなければできるはずです。
しかし、ActionLayerには罠があります。
それはVRCEmoteの9~16は座っているときのパターンで既に使用されているので追加したらうまく動かなくなることです。

f:id:ymtkyorosiku:20211002221752p:plain
粉バナナ

上方向のTransitionに17~の矢印を追加するのが正解になります。
Transitionは同じ個所に複数追加することもできるのです。
f:id:ymtkyorosiku:20211002222359g:plain

先ほど、VRCEmoteが1以上8以下の矢印があったと思いますが、同じ矢印に条件を複数設定した場合は条件A,条件Bとすると、積集合A∩Bとなります。(AかつB)

f:id:ymtkyorosiku:20211004190833p:plain
1以上 かつ 8以下


同じ場所、同じ方向に矢印を2本以上引いた場合、それぞれの矢印をCとDとすると、和集合C∪Dとなります。(CまたはD)

f:id:ymtkyorosiku:20211004190952j:plain
(1以上 かつ 8以下) または 17以上

∪と∩の違い|数学|苦手解決Q&A|進研ゼミ高校講座


Stateをたくさん追加するのが大変だと思ったので17~58を使用できるようにしたActionLayerを用意しておきました。
https://tksp110.booth.pm/items/3323298

さて、こちらにレイヤーはStateを作る際にSub - State Machineを作成しているのですが、これはStateを入れることができるフォルダのようなものです。
Stateが多くなると、矢印がごちゃごちゃしてしまうので、きれいにしたい場合はフォルダ分けしておくと見やすくなります。
f:id:ymtkyorosiku:20211002222622p:plain

こちらをインポートしてアニメーションを設定し、Toggleでそれぞれの番号に合ったメニューを設定しておけばアニメーションを沢山設定できます。
その際、MenuにはToggleやButtonが8個までしか設定できないことが分かるかと思いますが、その場合はメニューを増やします。
f:id:ymtkyorosiku:20211002223128p:plain

ButtonやToogle以外にSub Menuという項目があるので、こちらを選択すると、メニューの中にメニューを作成することができます(つまり無限に増やせる)
f:id:ymtkyorosiku:20211002223410p:plain

EmoteMenu1をドラッグドロップして登録。
登録したメニューをダブルクリックするとそのままそのメニューの設定ができるので覚えておくと便利です。
また、Parameterはメニューが開かれているときにOn、メニューが閉じられたらOffになります。上級者がアニメーションコントローラーを凝るときに使えそうですね!

さいごに

以上、VRChatアバターにアニメーションを大量に設定するのに必要な知識とか機能のまとめでした。

続き書きました。
tksp-unityroom.hatenablog.com