AltSetComponentActive の変更点

Top > AltSetComponentActive

TITLE:SetComponentActiveを使いたい

 VRC_Triggerでコンポーネントの有効無効を切り替える[[SetComponentActive>https://docs.vrchat.com/docs/setcomponentactive]]ですが、Udonでは全てのコンポーネントにアクセスすることが難しく、Trigger2to3で汎用的に実装することができていません。

 ただ、コンポーネント種類を限定して、部分的に実装することはできます。

 Trigger2to3では、SetComponentActiveで特に需要のある、次の2種類を実装しています。
#br
-SetColliderActive:Collider(全種類)の有効無効を切り替える
-SetAnimatorActive:Animatorの有効無効を切り替える

#br
 さて、それ以外のコンポーネントの有効無効を切り替えたい場合、この2つのモジュールをカスタムして、新しいモジュールを作ることで実現することになります。

 これまで、まったくC#を触れたことがない人に向けて、その方法を説明したいと思います。
#br
**SetComponentActiveモジュールを作る [#dc2c0561]

 SetColliderActiveからSetAnimatorActiveを作る過程を例とします。

***1.Scriptを複製する [#gc036a56]

 まず、SetColliderActiveのC#スクリプトをCtrl+「D」で複製します。
#ref(altsetcomponentactive_1.png)
#br
 新しいスクリプトを開きます。ダブルクリックするとVisualStudioでコードが開くと思います。

 エラーがたくさん出てきますが、無視しておきます。

 まず、今回追加したいコンポーネントのクラス名が指定できるかを探りましょう。通常、Inspectorに表示されるコンポーネントのタイトルがクラス名と考えることができます。
#ref(altsetcomponentactive_3.png)

 そのタイトルを、スクリプト内のどこでも、例えば23行目あたりに打ち込んでみます。
#ref(altsetcomponentactive_4.png)

 すると、大抵の場合はこのようにポップアップでクラス名の項目が出てくるし、打ち込んだときに色が変化するはずです。

 それを確認したところで、打ち込んだものを一旦消して、ソース上の「Collider」を、そのクラス名(今回の場合は「Animator」)に一括置換します。

 Ctrl+「H」で一括置換できます。
#ref(altsetcomponentactive_5.png)

 ↓↓↓
#ref(altsetcomponentactive_6.png)

 これで今までColliderで設定されていた部分が全てAnimatorに置き換わり、新しいクラス「T23_SetAnimatorActive」が出来上がりました。これを保存します。
#br
 スクリプトのファイル名をクラス名と一致させる必要があります。スクリプトのファイル名をクラス名に合わせて&size(16){「T23_SetAnimatorActive」に};&size(16){変更します。};
#ref(altsetcomponentactive_2.png)
#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(altsetcomponentactive_7.png)
#br
 次に、ProgramAssetに紐づいているスクリプトを変更します。InspectorのSouce Scriptを、今回作ったスクリプトに変更してください。元のスクリプトを外すときに警告が出ますが、OKで問題ありません。
#ref(altsetcomponentactive_8.png)
#br
 これで新しいモジュールの完成です。Actionとして使用できるようになります。(ただ、使用する前に一度Unityを開きなおした方がいいかもしれません。)
#ref(altsetcomponentactive_9.png)
#br
 ただし、どんなコンポーネントでもうまくいくわけではありません。Udonでは取り扱えないコンポーネントもあり、その場合はこのようにエラー表示されます。
#ref(altsetcomponentactive_10.png)

 これはもう、どうしようもないですね……。代替手段を考えるしかありません。
 これはもう、どうしようもないですね……。&size(16){代替手段を考えるしかありません。};

&size(16){ GameObjectを分離してSetGameObjectActiveで対応するとか、Animatorで対応するとか、そんなところでしょうか。};