Editor拡張的にみたUnity2019でできるようになること
VRChatで使用しているUnityEditorのバージョンが2018.4.20f1から2019.4.28f1になります。
Unity2019になったときにUnityEditor拡張的にはどのようなことができるようになるかを調べてまとめてました。
他にも見つかれば追記していきます。
新機能
UIElements
Editor拡張のGUI部分をXAML的な記法で作ることができるようになりました。
従来の作り方でも作ることができますが、GUI作成を支援する機能も備わっているので移行するのはありだと思います。
ちなみにもっと後のUnityのバージョンではこの名称はUI Toolkit
に変わっているようです。
Unity Package Manager (UPM)
プロジェクト内のUnityPackageを管理できる機能です。
この機能を使用してインポートしたUnityPackageが管理されます。
管理されているUnityPackageは新しいバージョンがあるとこの機能の画面から最新バージョンをインストールできます。
docs.unity3d.com
Addressable Asset System
リソースを読み込むための新しい方法が増えました。
従来のResources.Load
に変わる方法として提案されています。
この機能を使用するにはPackageManagerでこの機能を追加するためのUnityPackageをインポートする必要があるようです。
EditorTools
SceneView上でGameObjectやComponentを操作しやすくする機能を実装するためのAPIが増えました。
変更点
AssetDatabase V2 (Experimental)
V2ということで内部的に大幅変更されてそうです。
しかし、V1と同じAPIを使用できるので、この変更で関連するスクリプトを変更する必要はないようです。
GUIDの持ち方は変わるみたいなのでGUIDのファイルを直接参照するようなものは変更する必要があるかもしれないですね。
また、キャッシュサーバーを使ってインポートやプラットフォーム切り替えを高速化するようですが、そのためにUnity Accelerator
を使用するようです。
EditorStyles
新しく使えるようになったスタイルがあったり、全体的に見た目が変わっていたりします。
新しく使えるようになったもの
- EditorStyles.linkLabel
- EditorStyles.foldoutHeader
- EditorStyles.foldoutHeaderIcon
- EditorStyles.toolbarSearchField
廃止(Obsolete)
- SceneView#onSceneGUIDelegate
代わりに SceneView#duringSceneGuiか SceneView#beforeSceneGuiを使う
UnityでSteamVRPluginとTobiiXRSDKを使ったプロジェクト開発でのトラブルシューティング【備忘録】
ViveProEyeの視線トラッキングを使ったUnityアプリケーションの開発をするためにはViveEyeTrackingSDK(SRanipal)が必要である
Tobii社はこれをいい感じに使えるようにするためにTobiiXRSDKを開発した
VRアプリケーション開発でよく用いられるSteamVRPluginを使用したプロジェクトで
これを使用した際にいくつかの問題が発生したので、その内容と解決方法を残しておく
新しい問題が発生したら随時更新予定
開発環境
- Unity 2019.4.4f1
- SteamVRPlugin 2.6.1 (sdk 1.13.10)
- ViveEyeTrackingSDK(SRanipal) v1.3.1.0
- TobiiXRSDK v2.0.0.174
動作プロジェクトの構築
おおまかには以下のリンク先の手順に沿って作成した
https://vr.tobii.com/sdk/develop/unity/getting-started/vive-pro-eye/
最小設計としてはシーン内に
- [CameraRig] (SteamVRPluginに同封されたPrefab)
- TobiiXR Initializer (TobiiXRSDKに同封されたPrefab)
があれば動く
ViveEyeTrackingSDKに含まれるSRanipal_Eye_Framework.prefab
はなくても動くようである
発生した内容と解決策
Valve.VRに既に存在するみたいなエラーが発生する
openvr_api.csというファイルがSteamVRPluginとTobiiXRSDKの両方に存在するため発生している
HMD Specific Information - Cognitive3D - Documentation
上記リンク先の内容に従って片方のopenvr_api.csを削除すると発生しなくなった
TobiiXRSDK v2.0.0.174ではAssets/Examples/Utilities/Controller/Plugins
の中にopenvr_api.csがあったため、これを削除した
DllNotFoundException: openvr_apiというエラーが発生する
SteamVR Pluginお役立ち情報です。
— あきら☎︎🗾@VMC0.47r1/f1❗ (@sh_akira) 2018年12月30日
Unity 2018.3.0f2にしたらDllNotFoundException: openvr_apiが出た場合、WindowメニューのPackage ManagerからOpenVRをインストールして、Unityを再起動すると直ります。
上記ツイートにあるようにUnityのPackageManagerでOpenVR DesktopというものをインストールしてUnityを再起動すると発生しなくなった
これ自体は本環境に関わらずUnityでのVRアプリケーション開発において発生する可能性がある
アイトラッキングがうまくいかない
- 起動時にActiveなカメラが複数あると別のものを参照しているのかうまくいかないことが多い
- TobiiXR.FocusedObjectsの配列に入るものはIGazeFocusableを持つコンポーネントがついたものだけ
[VRChat] Avatars2.0からAvatars3.0へ簡単に移行するためのEditor拡張を作成した
はじめに
VRChatにAvatars3.0がきました。
これはアバターをセットアップするための新しい仕組みです。
従来のAvatars2.0に比べて、細かなアバターの表現を実現できるようになりました。
実際どんな感じに変わったかは記事にまとめたのでこちらを見てみてください。
[VRChat] Avatars3.0のVRCAvatarDescriptor - がとーしょこらの技術録
まだ従来のAvatars2.0も使うことができるので、無理にAvatars3.0に移行しなくても良いですが、
何かとAvatars3.0へ移行する必要がある要因が出てきたりします。
たとえば...
- AFKのポーズを変えたい
- アクションメニューに○○って項目を追加したい
- EmoteSwitchを後から来た人にも同期するようにしたい
ここらへんをやろうとするとAvatars3.0でアバターをセットアップする必要があります。
しかし、VRCAvatarDescriptorが違ったり、CustomOverrideEmptyが使えなくなっていたりしているので
一からセットアップし直しになります。
これを解決するために
「Avatars2.0用のアバターの設定をいい感じにAvatars3.0用に変換するEditor拡張」を作ったので、
これを使った移行を紹介します。
また、Avatars2.0のプロジェクトからアバターをunitypackageで取り出すときに
普通にやると間違えそうになるのでそれ用のEditor拡張も作成しました。
これも使っていきます。
Avatars2.0から3.0への移行手順
移行手順を段階に沿って紹介していきます。
既にあるAvatars3.0用のプロジェクトに変換後のAvatars3.0のアバターを追加する場合は1の手順は不要です。
また、BoothなどでダウンロードしてきたAvatars2.0のアバターを変換する場合は2の手順は不要です。
1. Avatars3.0用のプロジェクトを用意
Avatars2.0と3.0ではVRCSDKが全くの別物なので、
VRChat公式ページからAvatars3.0用のVRCSDKをダウンロードしてきます。
https://www.vrchat.com/home/download
VRChat SDK3はワールド用とアバター用に分かれているので、
アバター用のほうをダウンロードします。
UnityでAvatars3.0用の新しいプロジェクトを作成します。
これはAvatars2.0と変わらず、Unity2019.4.31f1で作成してください。
(下の画像はUnityHubでの画像)
そこに先ほどダウンロードしてきたAvatars3.0用のVRCSDKをインポートします。
2. Avatars2.0のアバターの荷造り
移行したいアバターがあるAvatars2.0のUnityプロジェクトを開きます。
ここに上で紹介したGameObjectExporterをインポートします。
Hierarchyにある移行したいアバターを右クリックして、「Export UnityPackage」を選択します。
そのあと、「Default」などが表示されます。
- Default : アバターに関連するアセットすべてを含みます。
- ignore Shader : シェーダーを除いたアバターに関連するアセットすべてを含みます。
- ignore DynamicBone : ダイナミックボーンを除いたアバターに関するアセットをすべて含みます。
- ignore Shader and DynamicBone : シェーダーとダイナミックボーンを除いたアバターに関するアセットをすべて含みます。
配布するときなどはシェーダーとダイナミックボーンを除いたほうがよいときがありますが、
自分のプロジェクト間で移動させるときはDefaultで良いと思います。
「Export Unitypackage > Default」と選択することでアバターのunitypackageがDesktop上に作成されます。
(アバターの名前.unitypackageという名前で出力されています)
3. Avatars3.0のセットアップ
1で作成したAvatars3.0用のプロジェクトに上で紹介したVRCAvatars3Toolsをインポートします。
さらに2で作成したアバターのunitypackageもインポートします。
Unity上部のメニューからVRCAvatars3Tools>VRCAvatarConverterTo3を押して、変換用ツールのウィンドウを表示します。
2.0 Avatar Prefabの右にある二重丸を選択して、Avatars2.0アバターのPrafabを選択します。
いろいろ情報が表示されます。
一応一通り目を通して「Convert Avatar To 3.0」を押してください。
HierarchyとSceneViewに変換されたアバターが表示されます。
Inspectorを見ると変換後のアバターには
- MissingになったScript
- PipelineManager
- VRCAvatarDescriptor
がついていると思います。
それぞれ
- MissingになったScript : Avatars2.0のVRCAvatarDescriptorだったもの
- PipelineManager : アバターIDがついているもの
- VRCAvatarDescriptor : Avatars3.0のVRCAvatarDescriptor
です。
MissingになったScriptは(Script)あたりを右クリックして
RemoveComponentで削除しておいてください。
残しておくとアップロード時にエラーでアップロードできないです。
また、一度アップロードしたことがあるアバターなら、
PipelineMangerにAvatars2.0のときのBlueprint IDが残っています。
このままアップロードするとAvatars2.0のアバターが3.0に上書きされてしまうので
上書きされてほしくない場合は「Detach」を押して、idを削除しておいてください。
これで変換はすべて完了しました。
このままアップロードすることでAvatars3.0のアバターとして使用できます。
それでは良いAvatars3.0ライフを!
関連リンク
[VRChat] Avatars3.0で表情切り替え時のまばたき干渉防止を実装する
はじめに
EyeLookの設定によって自動まばたきが有効になっている場合、
目を動かす表情変更をおこなうと干渉して目が意図しない見た目になることがあります。
本記事ではこれを防止する方法を解説していきます。
動作確認環境
- Unity 2018.4.20f1
- VRCSDK3-AVATAR-2020.08.06.16.30_Public.unitypackage
実装する手順
Avatars3.0のVRCSDKで追加されたVRCAnimatorTrackingControlを使います。
これはHeadやLeftHandなどの動きを
- IKなどのスクリプトで操作するか
- Animationで操作するか
を切り替えることができるBehaivourです。
Humanoidのボーンだけでなく, 目や口の動きも切り替えることができるようになっています。
このBehaivourと呼ばれるものはGameObjectにつけるComponentみたいなものでAnimatorControllerのStateにつけるスクリプトです。
本記事では表情切り替えギミックのよくある実装方法であるVRCSDKに同封されたvrc_AvatarV3HandsLayer.controllerを複製して実装したとして説明していきます。
まばたき干渉防止の実装の考え方としては他の実装方法でも使えると思うので各自読み替えてください。
まず, 表情切り替えのギミックが設定されたAnimatorControllerのLayerを表示します。
よくある方法で実装されている場合は、
VRCAvatarDescriptorのFXに設定されたAnimatorControllerのLeftHand, RIghtHandがこれにあたるかと思います。
FXの設定されている部分をダブルクリックするとAnimatorウィンドウに表示されると思います。
実装の方針としては
- 表情切り替えしていないIdle状態 : スクリプトによって目が操作される
- 表情切り替えしている状態 : Animationによって目が操作される
のようにしていきます。
LeftHandでは橙色のStateがIdleが表情切り替えしていないIdle状態にあたります。
また、Fistなどの灰色のStateが表情切り替えしている状態にあたります。
まず, IdleをクリックしてInspectorに詳細を表示します。
Add Behaivourを選択して、VRCAnimatorTrackingControlを追加します。
Eyes & EyelidsのTrackingにチェックをいれるようにします。
これでこのIdleのStateにきてから変更されるまでは目の動きはスクリプトによって操作されるようになりました。
次に同じ手順でFistなどの表情切り替えしている状態のStateにもVRCAnimatorTrackingControlを追加します。
ここではEyes & EyelidsのAnimationにチェックをいれるようにします。
これでこのStateにきてから変更されるまでは目の動きはAnimationによって操作されるようになりました。
同様にOpenやGunなどの表情切り替えしているStateにも同じ設定をしてください。
これでまばたき干渉防止を実装することができました。
発展(リップシンク干渉防止)
発展として表情切り替えとリップシンクが干渉してしまう問題も同じような方法で防ぐことができます。
これはまばたき干渉防止と両立することができます。
表情切り替えしていないStateにつけたVRCAnimatorTrackingControlでMouth & JawのTrackingにチェックをいれます。
また、表情切り替えしているStateではMouth & JawのAnimationにチェックをいれます。
これでリップシンク干渉防止を実装することができました。
参考
[VRChat] Avatars3.0で物を出し入れする (EmoteSwitchみたいなもの)
この記事は以下に移行しました。今後の更新は以下でおこなわれます
https://gatosyocora.net/posts/vrchat_avatars3_action_switch/
はじめに
これまでのアバター(Avatars2.0)では
Emote(エモート)機能でオブジェクトを出したり、消したりするギミック(通称:EmoteSwitch)がありました。
Avatars 3.0ではアクションメニューを拡張してボタンを追加することで、
そのボタンの操作によってオブジェクトを出したり、消したりできるようになりました。
これはEmoteSwitch(エモートスイッチ)に比べて、
- 単純な設計で実装できる
- 後からインスタンスに来た人にもオブジェクトの状態が同期する
- 多くのオブジェクトの出し入れを管理できる
- ワールドを移動してもオブジェクトの状態が維持されるようにできる
などメリットがいくつもあります。
この記事ではAvatars3.0のアクションメニューのToggleボタン操作によって、
後から来た人にも同期するようにオブジェクトを出し入れするギミック(以下、ActionSwitch)を実装する方法を解説します。
[2020/8/31]
2つ以上の物を入れ替えるときに一瞬同時に出てしまう問題を解消する方法を追記しました。
[2021/1/10]
WriteDefaultsの注意について追記しました。
[2021/3/26]
ギミックに使用するParameterの種類をIntからBoolに変更しました。
WriteDefaultsがオフを想定した内容に変更しました。
動作確認環境
- Unity 2018.4.20f1
- VRCSDK3-AVATAR-2021.03.22.18.27_Public.unitypackage
実装する手順
この記事では実装手順の紹介なのでCubeを使ってオブジェクトの出し入れを紹介します。
他のもの(服や武器など)の出し入れの場合は本記事のCubeの部分を置き換えて実装してみてください。
【注意】(2021/1/10, 3/26追記)
以下は各StateのWriteDefaultsがオフ(チェックが入っていない)を想定しています。
オンとオフが混在している場合、ギミックがうまく動作しないことがあるので注意してください。
大まかな手順
- FXに設定されたAnimatorControllerに新しいLayerを追加する
(これに対してStateを追加したりしていく)- weightが1になっているか確認
- 初めから存在するEntry, AnyState, Endに加えて、新しく以下のStateを追加する
- CubeOFF : Cubeが出ていない状態(デフォルト状態)
- CubeON : Cubeが出ている状態(アクティブ状態)
- 各StateのWriteDefaultsをオフ(チェックが入っていない状態)にする
- Entry->CubeOFF->CubeON->Endとなるように遷移の矢印を追加する
- AnimationParameterにBool型の「ActiveCube」というパラメータを追加する(初期値false)
- 遷移の矢印に以下の設定をする
- CubeOFF -> CubeON
- Conditions : ActiveCube true
- Has Exit Time : false
- Transition Duration(s) : 0 [2020/8/31追記]
- CubeON -> End
- Conditions : ActiveCube false
- Has Exit Time : false
- Transition Duration(s) : 0 [2020/8/31追記]
- CubeOFF -> CubeON
- CubeONに以下のようなAnimationClipを設定する
- CubeのActiveをtrue (表示) にする
- 0フレーム目にのみキーを持つ
- CubeOFFに以下のようなAnimationClipを設定する
- CubeのActiveをfalse (表示) にする
- 0フレーム目にのみキーを持つ
- CubeのデフォルトのActiveはfalse (非表示) にしておく
- Expression ParametersにBool型の「ActiveCube」というパラメータを追加する
- Expressions Menuに以下のようなControlを追加する
- Type : Toggle
- Parameter : ActiveCube
1. ActionSwitchの実装の準備
VRCAvatarDescriptorのPlayable LayersのFXに設定されたAnimatorControllerをダブルクリックして選択します。
(まだ設定されていない場合、Assets/VRCSDK/Examples3/Animation/Controllersにあるvrc_AvatarV3HandsLayerを複製してここに設定してください。)
次に、選択された状態でAnimatorウィンドウを開きます。
(Unity上部のWindow>Animation>Animatorで開けます。)
左上にある「+」を押して新しいLayerを作成します。
Layerには分かりやすい名前をつけてください。
今回はCubeを出すのでCubeという名前をつけました。
Debugメニューで文字化けしてしまうため、日本語ではなく英語の名前にしたほうがよいです。
次に右のほうにある歯車のマークをクリックして、
以下の画像のようなLayerの設定画面を開きます。
Weightの項目を0から1に変更してください。
このようにLayerのWeightを1にしないと、
そのLayerでの変更はアバターに反映されないので注意が必要です。(よく忘れがち)
これで新しいギミックを作成する準備は完了です。
この流れは今回紹介するActionSwitchだけでなく、
多くのギミックを新しく実装する手順に含まれる操作です。
2. ActionSwitchの実装
今回はActionSwitchを使って、
Cubeを出したり、消したりしていきます。
以下の画像が完成したときのStateとParameterです。
これを目指して作っていきます。
2.1 Stateの作成と設定
このギミックはCubeが出ている状態と出ていない状態の2つの状態でできています。
先ほどの画像では
- 橙色のStateがCubeが出ていない状態(デフォルト状態)
- 灰色のStateがCubeが出ている状態(アクティブ状態)
のようになっています。
まず、まだCubeを出していないデフォルト状態を作成します。
何もない場所で右クリックして、
Create State>Emptyで新しいStateを作成します。
同じ手順でCubeが出ているアクティブ状態のStateも作成します。
それぞれのStateをクリックするとInspectorに詳細が表示されます。
ここの名前部分を選択して、それぞれのStateを分かりやすい名前にしておきましょう。
Debugメニューで文字化けしてしまうため、日本語ではなく英語の名前にしたほうがよいです。
CubeOFF : Cubeが出ていない状態(デフォルト状態)橙色
CubeON:Cubeが出ている状態(アクティブ状態)灰色
また、VRChat公式ではWriteDefaultsはオフを推奨しているのでこちらもチェックを外しておきましょう
次にState同士を矢印でつないでいきます。
CubeOFFのStateを右クリックして、Make Transitionを選択します。
すると矢印がついた白線がマウスに追従するのでその状態でCubeONのStateをクリックします。
これでCubeOFFからCubeONへの矢印(遷移, Transition)が追加されました。
同じように今度はCubeONからExit(赤色のState)に向けて矢印を追加します。
2.2 Parameterの作成と設定
次にStateから別のStateへの移動の条件を設定するためにParameterを設定します。
Layersの横にあるParametersをクリックして、
そのAnimatorControllerに設定されたAnimationParameterの一覧を表示します。
左上にある「+」をクリックして新しいParameterを追加します。
今回はオブジェクトを出し入れするのでBoolを選択します。
名前はActiveCubeにしました。
特にこれでないといけないわけではないですが、
以降でActiveCubeを選択・設定するときに同じ名称になるようにしてください。
また、日本語ではなく英語の名前にしたほうがよいです。
次にLayersを押してLayer一覧に戻り、記事序盤で作成した「Cube」レイヤーを選択します。
CubeOFFとCubeONの間にある矢印をクリックします。
するとInspectorに矢印の詳細が表示されます。
Conditionsの「+」をクリックして新しい項目を追加します。
左から順にActiveCube, trueに変更します。
これでCubeOFFにいるときにActiveCubeというParameterがtrue(チェックが入った状態)になったらCubeONに移動します。
さらにHas Exit Timeのチェックを外します。
[2020/8/31追記]
また、SettingsにあるTransition Duration (s) を0にします。
これはStateの遷移にかける時間で、0より大きい場合、State間の状態が補完されながら遷移されます。
これでCubeが出ていないデフォルト状態からCubeが出ているアクティブ状態にするギミック部分はできました。
次にCubeが出ているアクティブ状態からCubeが出ていないデフォルト状態に戻す部分を作っていきます。
CubeONのStateとExitのStateの間にある矢印を選択します。
先ほどと同じような手順でConditionsとTransition Duration, Has Exit Timeを以下のように設定します。
Has Exit Time : チェックを外す
Transition Duration (s) : 0
Conditions : ActiveCube false
2.3 Animationの作成と設定
アバターにCubeを追加します
(説明用にCubeを追加しているので、
このCubeが今回出し入れしたいものだと考えてもらって大丈夫です)
Cubeの代わりにするオブジェクトにAnimatorがついている場合には削除してください。
2.3.1 表示状態にするAnimation(CubeOn)の作成
まず、Projectウィンドウで右クリックをして、
Create>AnimationでAnimationClipを作成します。
Cubeを出すアニメーションなのでCubeOnという名前にしました。
次に先ほど触っていたAnimatorControllerに戻って、
CubeONのStateを選択します。
CubeONのmotionに先ほど作成したCubeOnというAnimationClipを設定します。
Animationの設定のために一時的に
アバターのルートにあるAnimatorのControllerに
FXに設定されているAnimatorControllerを設定します。
VRCAvatarDescriptorが設定されたオブジェクトを選択している状態で
Animationウィンドウを開きます。
AnimationウィンドウはUnity上部のWindow>Animation>Animationで開けます。
左側にあるPreviewの下をクリックすると、
先ほどAnimatorに設定したAnimatorControllerが持つAnimationClipの一覧が表示されます。
先ほど設定したCubeOnを選択してください。
Previewの横の録画ボタンをクリックすると、録画モードが開始されます。
この状態で出現させたいオブジェクト(本記事ではCube)を選択します。
そしてInspectorの左上にあるチェックマークを入っている状態にします。
最初から入っている場合はチェックボックスを一度押して再度押して入っている状態にしてください。
下の画像のようになれば大丈夫です。
すると先ほどのAnimationウィンドウにCubeのIs Activeを操作するキーが0:00のところに追加されました。 これがチェックマークが入っている状態になっていることを確認してください。
これで録画は完了なので、Previewボタンを一度押して録画モードを停止してください。
これでAnimationの準備は完了なので、AnimatorからAnimatorControllerを外しておきましょう。
Controllerの右の方にある二重丸を選択して一番上にあるNoneを選択すると外すことができます。
Cubeは最初は消えている状態にするのでチェックを外して消しておきましょう。
2.3.2 非表示状態にするAnimation(CubeOff)の作成
次にCubeを初期状態の非表示状態にするAnimationを作成します。
先ほど作成したCubeOn.animを選択した状態でCtrl+Dを押すと複製されます。
複製されたCubeOn 1を右クリックしてRenameでCubeOffという名前に変更します。
Animatorウィンドウを開いて、CubeOFFステートのMotionに複製したCubeOffを設定します。
CubeOff.animを選択した状態でAnimationウィンドウを開くとその内容が見れます。
Cube : Game Object.Is Active 1のようになっているので、1のところをクリックし、0に変更します。
これでCubeを非表示状態にするAnimationファイルになりました。
これでギミック部分は完成しました。
2.4 ExMenuの設定
最後にメニュー操作でオブジェクトを出し入れできるようにします。
VRCAvatarDescriptorのExpressionsのParametersに設定しているExpressionParametersをダブルクリックして選択します。
設定されていない場合はCreate>VRChat>Avatars>Expression Parametersで新しく作成して設定してください。
左上のAddを押すと新しい項目が増えるのでNameにActiveCubeと入力してTypeはBoolを選択してください。
ここの名称はAnimatorControllerのParametersで新しく設定した名称と同じにしてください。
(大文字小文字も同じになるように)
DefaultはCubeが最初出ていない状態なのでチェックがない状態にします。
Savedは別のワールドやVRChatの再起動でもCubeが出ている状態を維持するためにチェックがある状態にします。(ここはお好みでどちらでも良いです)
次にVRCAvatarDescriptorのExpressionsのMenuに設定しているExpressionsMenuをダブルクリックして選択します。
設定されていない場合はCreate>VRChat>Avatars>Expressions Menuで新しく作成して設定してください。
Add Controlを押して新しい項目を増やします。
既に項目が8個ある場合は追加できないので、
ExpressionMenuを新しくしてSubMenuとして追加することを検討してください。
NameとIconは分かりやすいように設定してください。
TypeはToggle, ParameterはActiveCube, Boolに設定してください。
これですべての設定が完了です。
VRChatにアップロードしてCubeを出してみましょう。
3. 注意点(おさらい)
- 新しく作成したLayerはweightが0になっているので1にする
- オブジェクトの出し入れのギミックはFX Layerに設定したAnimatorControllerに追加する
- Expression ParametersとAnimatorControllerのParameterの名称は完全に同じにする
- AnimatorControllerにあるStateのWriteDefaultsはオフ(チェックが入っていない状態)にする
4.応用編
デフォルトで表示されているものを消す
本記事で紹介したものは「消えているものを表示する」でしたが、
その逆も紹介した方法の応用で実現できます。
おおまかな設定手順は同じで以下のものを変更します。
- 出し入れするオブジェクトの左上のチェックを入れて表示されている状態にしておく(工程)
- 設定するAnimationClipでIs Activeにチェックをはずす(工程)
- 1を0に変更ではなく、0になっているので1に変更する(工程)
初期状態と変更後にどういう状態にするかを変えただけです。
これで「表示されているものを消す」というギミックになります。
さいごに
今回紹介した方法は個人的に最小構成でActionSwitchを実装する方法だと思います。
Expression Parametersの節約や初期状態でオブジェクトが出ているようにする方法など、応用する方法がいろいろあります。
また、これだけ長い手順なので毎回設定するのは大変です。
同じようなことを実現する方法としてこのようなツールも出ているので使ってみてもいいかもしれないです。
いろんな方が作っておられるので用途と自分にあったツールを選ぶのが良いと思います。
Avatars3.0のAFKのポーズを変更する
はじめに
VRChatのAvatars3.0でAFKモードが追加されました。
HMDを外すかEndキーを押すことでAFKモードになって、
デフォルトだとアバターが座禅を組んで浮いている状態になります。(なぜ...)
本記事ではこのAFKモードでアバターがとるポーズを変更する方法を書きます。
AFKのポーズを変更した pic.twitter.com/Hxx0eeVozt
— がとーしょこら (@gatosyocora) 2020年8月7日
手順を概要的にまとめて、その後詳細に書いています。
自分に合ったほうを見ていただけると良いかと思います。
ねここやさんが配布されているポーズアニメーションを例に説明していきます。
オススメの商品です。
necocoya.booth.pm
動作確認環境
- Unity 2018.4.20f1
- VRCSDK3-AVATAR-2020.08.06.16.30_Public.unitypackage
変更する手順
- vrc_AvatarV3ActionLayer.controllerを複製する。
- 1で複製したAnimatorControllerのAfk Init, AFK, BlendOutのStateのMotionに以下のようなAFKアニメーションのAnimationClipを設定する.
- LoopTimeがtrue
- 0フレーム目にのみAFKのポーズをしたHumanoidのアニメーションキーを持つ
- VRCAvatarDescriptorのPlayable LayersのActionに1で複製したAnimatorControllerを設定する
変更する手順(詳細版)
1. AnimatorControllerの複製と設定
Assets/VRCSDK/Examples3/Animation/Controllersのvrc_AvatarV3ActionLayerを複製します。
選択した状態でCtrl+Dで複製できます。
そのアバター用であることがわかる名前に変更して、別のフォルダに移動しておきましょう。
次に複製したものをVRCAvatarDescriptorのPlayable LayersのActionに設定します。
次に設定したAnimatorControllerをダブルクリックして選択状態にします。
そして、Animatorタブを開きます。
AnimatorタブはWindow>Animation>Animatorで開けます。
Animatorタブには選択したAnimatorControllerの内容が表示されていると思います。
2. AFKアニメーションの選択と設定
AnimatorControllerにあるAfk Init, AFK, BlendOutというStateに設定したいAFKアニメーションを設定します。
どのAFKアニメーションを使うか決めるときにプレビューを見ると良いです(詳細)。
それぞれクリックするとInspectorがそのStateの詳細が表示されます。
Motionに設定したいAFKアニメーションのAnimationClipを設定します。
Afk Init, AFK, BlendOutすべてのMotionに同じAnimationClipを設定してください。
設定したMotionをダブルクリックして設定したAnimationClipを選択状態にします。
すると, InspectorにAnimationClipの詳細が表示されます。
Loop Timeにチェックがない場合、チェックを入れます。
AnimationClipが選択された状態でAnimationタブを開きます。
Window>Animation>Animationで開けます。
60:00のほうにある一番上のひし形を選択して、60:00のひし形すべてを選択します。
Deleteキーを押して選択したひし形をすべて削除してください。
0:00のみにAnimationキー(ひし形)がある状態にします。
これで変更が完了しました。
実際にアップロードしてAFKを試してみましょう。
番外:AFKアニメーションを選ぶ
Humanoidボーンを変更するAnimationClipを選択すると,
Inspectorの下部に実際のモーションが表示されます。
こうなっている場合は灰色部分にカーソルを合わせて上に持ち上げると,
実際のモーションのプレビューが表示されます。
ここにHierarchyにあるアバターのモデルをドラッグ&ドロップすると
プレビューされている3Dモデルがそのアバターになるので選ぶときにいい感じになります。
[VRChat] Avatars3.0のVRCAvatarDescriptor
Avatars3.0では従来のもの(Avatars2.0)と比べてVRCAvatarDescriptorの項目が大幅に変更されました。
本記事ではAvatars2.0とAvatars3.0のVRCAvatarDescriptorを比較しながらその内容を紹介していきます。
内容は以下に基づいています。
- VRCSDK3-2020.07.31.17.18_Public.unitypackage
- https://docs.vrchat.com/v2020.3.2/docs/avatars-30
Avatars3.0のVRCAvatarDescriptor
Avatars3.0でのVRCAvatarDescriptorが持つ大まかな設定項目です
- View : 視点に関する設定項目
- LipSync : 話したときの口の動きに関する設定項目
- Eye Look : 目の動きに関する設定項目
- Playable Layers アバターのボーンの動きやギミックに関する設定項目
- Lower Body : トラッキングされていない体の部位の動きに関する設定項目
- Expressions : アクションメニューに関する設定項目
Avatars2.0に比べ, Eye Look, Playable Layers, Lower Body, Expressionsが追加されました。
Eye LookはAvatars2.0で自動的に設定されていた目の動き(通称: EyeTracking)を設定できるようにしたものです。
Playable LayersはAvatars2.0におけるAnimatorOverrideController(通称: CustomOverrideEmpty)に代わるものです。
Lower Bodyはトラッキングされていない体の部位の動きに関するAvatars2.0にはなかった新しい設定項目です。
ExpressionsはAvatars3.0から利用可能になったドーナッツ型のメニュー(アクションメニュー)を拡張するための項目です。
InspectorにEditまたはPreviewボタンがある項目がありますが,
これは一度押すとボタンの文字が「Return」になり,
プレビュー&編集状態(勝手にこう呼んでいるだけ)になります。
この状態のときにSceneViewに表示されるGizmoを操作することで設定内容を変更できます。
3Dモデル : 京狐
View
視点に関する設定項目です。
- View Position
アバターの視点位置です。Avatars2.0にあったViewPositionと同じですが,
Editボタンを押すことでScene上でGizmoを使って自由に動かして設定できるようになりました。
LipSync
話したときの口の動きに関する設定項目です。
- Mode
口の動きを制御する方法を複数の中から選択できます。
Avatars2.0に比べ, Viseme Parameter Onlyが追加されました。
〇 Jaw Flap Bone
顎のボーンを使って口を開閉する方法です。
Jaw Bone
顎のボーンです。Rotation States
口を開閉したときの顎ボーンの回転です。
Previewボタンを押すと設定した回転が反映されます。
Scene上に回転Gizmoが表示されるのでそれを操作することで設定を変更できます。- Closed
口を閉じたときの顎ボーンの回転です。 - Open
口を開いたときの顎ボーンの回転です。
- Closed
〇 Jaw Flap Blend Shape
顎を動かすBlendShape(シェイプキー)を使って口を開閉する方法です。
Face Mesh
顎を動かすBlendShapeを持つオブジェクトです。Jaw Flap Blend Shape
顎を動かすBlendShapeです。
〇 Viseme Blend Shape
口を様々な形に変更するBlendShape(シェイプキー)を使って口を動かす方法です。
Boothで販売される3Dモデルの大半はこれを使用すると良いです。
Face Mesh
口を様々な形に変更するBlendShapeを持つオブジェクトです。Viseme: ○○
口を特定の形に変更するBlendShapeです。
それぞれの名称と口の形はOVRLipSyncに対応しています。
〇 Viseme Parameter Only
音声に対応した0~14の数値をAnimatorで使用して口の動きを制御する方法です?(未検証)
Eye Look
目の動きに関する設定項目です。
Avatars2.0で自動的に設定されていた目の動き(通称: EyeTracking)を設定できるようにしたものです。
デフォルトではEnableボタンだけが表示されており,
Enableボタンを押すことで設定項目が出てきます。
目の動きを設定しない場合はこのままで良いです。
General
目の動きの全体に関連する設定項目です。
Eye Movements
Calm (穏やか) <---> Excited (興奮)
瞬きの頻度Shy (恥ずかしがり) <---> Confident (自信)
他のプレーヤーを見る頻度、および目をそらすまで他のプレーヤーの顔に視線が留まる時間
Eyes
目の部分に関連する設定項目です。
Transforms
- Left Eye Bone
左目を動かすボーンです。
Avatars2.0のLeftEyeという名称のボーンに対応するものです。 - Right Eye Bone
右目を動かすボーンです。
Avatars2.0のRightEyeという名称のボーンに対応するものです。
- Left Eye Bone
Rotation States
目のボーンの回転を設定します。Looking Straight
前を見ているときの目のボーンの回転Looking Up
上を見ているときの目のボーンの回転Looking Down
下を見ているときの目のボーンの回転Looking Left
左を見ているときの目のボーンの回転Looking Right
右を見ているときの目のボーンの回転
Eyelids
まぶたに関する設定項目です。- Eyelid Type
まぶたを動かす方法を選択できます。
- Eyelid Type
〇 Bones
まぶたの動きにボーンを使った方法です。
Transforms
まぶたのボーンの回転を設定します。Upper Left Eyelid
左上まぶたを動かすボーンです。Upper Right Eyelid
右上まぶたを動かすボーンです。Lower Left Eyelid
左下まぶたを動かすボーンです。Lower Right Eyelid
右下まぶたを動かすボーンです。
Rotation States
LeftとRightがひとつの項目にまとまっており,
Upper EyelidsとLower Eyelidsを設定できます。Default
通常時のまぶたのボーンの回転です。Closed
目を閉じている時のまぶたのボーンの回転です。Looking Up
上を見ている時のまぶたのボーンの回転です。Looking Down
下を見ている時のまぶたのボーンの回転です。
〇 Blend Shapes
まぶたの動きにBlendShape(シェイプキー)を使った方法です。
Eyelids Mesh
目の動きに関するBlendShapeを持つオブジェクトです。
Avatars2.0におけるBodyという名称のオブジェクトに対応するものです。Blendshape States
Blink
両目でまばたきするBlendShapeです。
Avatars2.0におけるvrc.blink_leftとvrc.blink_rightに対応するものです。Looking Up
上を見るときにまぶたを動かすBlendShapeです。
Avatars2.0におけるvrc.lowerlid_leftとvrc.lowerlid_rightに対応するものです。Looking Down 下を見るときにまぶたを動かすBlendShapeです。
Avatars2.0におけるvrc.lowerlid_leftとvrc.lowerlid_rightに対応するものです。
Playable Layers
Avatars2.0におけるAnimatorOverrideController(通称: CustomOverrideEmpty)に代わるものです。
各ボタンを押すと, 自分で用意したAnimatorControllerを設定できるようになります。
Base
Base
Idle, 移動, 落下やジャンプなどの基本となるアニメーション(Humanoidのボーンを操作)
Avatars2.0のCustomOverrideEmptyにおけるIDLEなどを設定します。Additive
呼吸などの付加的なアニメーション(Humanoidのボーンを操作)Gesture
手の動きなどのHumanoidの一部ボーンや耳や尻尾などのHumanoidのボーン以外の操作
Avatars2.0のCustomOverrideEmptyにおけるHANDOPENなどの手の形の変更などを設定します。Action
Emoteなどの他のPlayableLayerでの変更を無視したTransformの操作
Avatars2.0のCustomOverrideEmptyにおけるEMOTEなどを設定します。FX
Transform以外の操作。
表情やゲームオブジェクトのアクティブ化, マテリアルやシェーダープロパティの変更など
Avatars2.0のCustomOverrideEmptyにおけるHANDOPENなどで設定した多くの変更を設定します。
これを最も変更することになると思います。
Special
Sitting
座る位置に関する計算をするときの補正に使う?TPose
視点に関する計算をする時の補正に使う?IKPose
IKの計算をするときの補正に使う?
Lower Body
トラッキングされていない体の部位の動きに関する設定項目 Avatars2.0にはなかった新しい設定項目です。
Use Auto-Footsteps for 3 and 4 point tracking
オフにするとルームスケールの動きに対して, 下半身のアニメーションを無効化します。
3点もしくは4点トラッキングの時に適用されます。Force Locomotion animations for 6 point tracking
オンのとき, Locomoting(ジョイスティックの移動など)はWalking/Runningアニメーションを再生します。
オフのとき, これらを再生しません。
また, オフのときはデフォルトのBaseLayerとAdditiveLayerを使用してはいけない。
6点トラッキング(フルトラッキング)の時に適用されます。
Expressions
Avatars3.0から利用可能になったドーナッツ型のメニュー(アクションメニュー)を拡張するための項目です。
Menu
アクションメニューのボタンの種類と効果を設定するVRCExpressionsMenuです。Parameters
アクションメニューのボタン操作によって変更されるAnimatorParameterを定義するVRCExpressionsParametersです。
さいごに
Avatars2.0からAvatars3.0のアバターへ変換するEditor拡張「VRCAvatarConverterTo3」を作成しました。
こちらもあわせてお使いください。
また、Avatars3.0に関する情報を共有するDiscordチャンネルもあるので、興味がある方は入ってみてください
参考文献
- https://docs.vrchat.com/v2020.3.2/docs/avatars-30
- VRChat公式Discord #open-beta-announcements