SetComponentActiveを使いたい
freeze
VRC_Triggerでコンポーネントの有効無効を切り替えるSetComponentActiveですが、Udonでは全てのコンポーネントにアクセスすることが難しく、Trigger2to3で汎用的に実装することができていません。
ただ、コンポーネント種類を限定して、部分的に実装することはできます。
Trigger2to3では、SetComponentActiveで特に需要のある、次の2種類を実装しています。
br
- SetColliderActive:Collider(全種類)の有効無効を切り替える
- SetAnimatorActive:Animatorの有効無効を切り替える
br
さて、それ以外のコンポーネントの有効無効を切り替えたい場合、この2つのモジュールをカスタムして、新しいモジュールを作ることで実現することになります。
これまで、まったくC#を触れたことがない人に向けて、その方法を説明したいと思います。
br
SetComponentActiveモジュールを作る
SetColliderActiveからSetAnimatorActiveを作る過程を例とします。
1.Scriptを複製する
まず、SetColliderActiveのC#スクリプトをCtrl+「D」で複製します。
ref
br
新しいスクリプトを開きます。ダブルクリックするとVisualStudioでコードが開くと思います。
エラーがたくさん出てきますが、無視しておきます。
まず、今回追加したいコンポーネントのクラス名が指定できるかを探りましょう。通常、Inspectorに表示されるコンポーネントのタイトルがクラス名と考えることができます。
ref
そのタイトルを、スクリプト内のどこでも、例えば23行目あたりに打ち込んでみます。
ref
すると、大抵の場合はこのようにポップアップでクラス名の項目が出てくるし、打ち込んだときに色が変化するはずです。
それを確認したところで、打ち込んだものを一旦消して、ソース上の「Collider」を、そのクラス名(今回の場合は「Animator」)に一括置換します。
Ctrl+「H」で一括置換できます。
ref
↓↓↓
ref
これで今までColliderで設定されていた部分が全てAnimatorに置き換わり、新しいクラス「T23_SetAnimatorActive」が出来上がりました。これを保存します。
br
スクリプトのファイル名をクラス名と一致させる必要があります。スクリプトのファイル名をクラス名に合わせて「T23_SetAnimatorActive」に変更します。
ref
br
次に、ProgramAssetも複製します。
「T23_SetColliderActive Udon C# Program Asset」をCtrl+「D」で複製します。
「T23_SetColliderActive Udon C# Program Asset 1」というファイル名になるので、名前を変更して「T23_SetAnimatorActive Udon C# Program Asset」にします。後ろの「 1」も取っておきましょう。(残っていてもいいですが)
ref
br
次に、ProgramAssetに紐づいているスクリプトを変更します。InspectorのSouce Scriptを、今回作ったスクリプトに変更してください。元のスクリプトを外すときに警告が出ますが、OKで問題ありません。
ref
br
これで新しいモジュールの完成です。Actionとして使用できるようになります。(ただ、使用する前に一度Unityを開きなおした方がいいかもしれません。)
ref
br
ただし、どんなコンポーネントでもうまくいくわけではありません。Udonでは取り扱えないコンポーネントもあり、その場合はこのようにエラー表示されます。
ref
これはもう、どうしようもないですね……。代替手段を考えるしかありません。
GameObjectを分離してSetGameObjectActiveで対応するとか、Animatorで対応するとか、そんなところでしょうか。