概要
この記事では、VRChatのSDK3/Udonワールド向けにUnity拡張エディタを作成したい方のための「UdonSharpBehaviour継承クラス(つまりは自作のU#;UdonSharp)をスクリプトでUdonBehaviourクラスに変換する」方法をまとめています。
結論
こういう.csファイルを作って
#if VRC_SDK_VRCSDK3 #if UNITY_EDITOR using UnityEngine; using VRC.Udon; using UdonSharp; using UdonSharpEditor; public class UdonMaker : MonoBehaviour { //UdonSharpBehaviour継承クラスのコンポーネントを //Udon Behaviourコンポーネントに変換する //GUIの"Convert to UdonBehaviour"ボタンと同じ効果 public static UdonBehaviour ConvertToUdonBehaviour (UdonSharpBehaviour component) { UdonSharpBehaviour[] args = new UdonSharpBehaviour[] { component }; UdonBehaviour[] returned_list = UdonSharpEditorUtility.ConvertToUdonBehaviours(args); return returned_list[0]; } } #endif #endif
こんなふうに使う
~~~ //コントロール機能追加 //PageSenderは自作のUdonSharpBehaviour継承クラスです PageSender a_c = a.AddComponent<PageSender>(); PageSender b_c = b.AddComponent<PageSender>(); //いろいろ設定する a_c.screenController = screen_con_udon; b_c.screenController = screen_con_udon; a_c.forward = false; //戻るボタン b_c.forward = true; //進むボタン //UdonBehaviourへコンバート UdonBehaviour a_c_u = UdonMaker.ConvertToUdonBehaviour(a_c); UdonBehaviour b_c_u = UdonMaker.ConvertToUdonBehaviour(b_c); //Interaction Text変更 a_c_u.interactText = "戻る"; b_c_u.interactText = "進む"; ~~~
このとき、UdonMaker.ConvertToUdonBehaviourを使用するコードについて「#if UNITY_EDITOR」と「#endif」で挟むことを忘れないでください。
挟まないと、中で呼び出しているVRCSDK3の関数がエディタ専用なので、ワールドとしてビルドするときにエラーになります。
「#if UNITY_EDITOR」を記述することによって、「この中に挟んでいるコードはUnityエディタでだけビルドしてください」という意味になります。
ちなみに「#if VRC_SDK_VRCSDK3」は「VRCSDK3を使っている場合にだけビルドしてください」です。
UdonBehaviourにコンバートが済んだら、Interaction Textなどもスクリプトから編集できるようになります。
以上