プラベのVRChatブログ

VRChatで楽しく過ごすためのTipsをまとめてます。

【U#;UdonSharp】UdonSharpBehaviour継承クラスをスクリプトでUdonBehaviourクラスに変換する

概要

この記事では、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などもスクリプトから編集できるようになります。

以上