VRChat SDKには、ワールドやアバターのビルドプロセスを拡張するために利用できる一連のインターフェースとメソッドが用意されています。
Public SDK APIフォルダは、両方のSDKの以下の場所にあります。
- ワールド用: Packages/VRChat SDK - Worlds/Editor/VRCSDK/SDK3/Public SDK API
- アバター用: Packages/VRChat SDK - Avatars/Editor/VRCSDK/SDK3A/Public SDK API
ただし、イベントやメソッドの大部分はワールドSDKとアバターSDKの両方で共有されており、Base SDK Packageである Packages/VRChat SDK - Base > Editor/VRCSDK/Dependencies/VRChat/Public SDK API 内で定義されています。
[PublicAPI] とマークされたその他のメソッドも、Public SDK APIの一部となります。例えば、コンテンツの説明を更新するための "Packages/VRChat SDK - Base/Editor/VRCSDK/Dependencies/VRChat/API/VRCApi.cs" などが該当します。
これらの型は自動的に参照されるアセンブリ定義に含まれています。自身のプロジェクト内でコードを書く場合、通常これらの型はデフォルトで利用可能です。再配布可能なパッケージを作成しており、独自のアセンブリ定義を使用している場合は、適切なアセンブリ定義の参照を追加する必要があります。
アバター用: VRC.SDK3A.Editor
ワールド用: VRC.SDK3.Editor
両方用: VRC.SDKBase.Editor
利用可能な機能
イベントやメソッドの最新リストについては、前述のファイルを直接確認することを推奨します。
利用可能な機能の概要は以下の通りです。
- メインSDKパネルの
OnEnable/OnDisableイベント - ビルド開始 / 終了イベント
- アップロード成功 / エラーイベント
Build、Build and Test、Build and Uploadメソッド
ビルドプロセス中に例外が発生した場合は、インターフェース定義(Interface definitions)で想定される例外のリストを確認してください。
例
ビルダーのインスタンスを取得する
OnSdkPanelEnable に接続することで、SDKウィンドウが開かれ、ビルダーが登録されたことを確実にします。その後、TryGetBuilder を使用して、必要なビルダーのインスタンスを取得できます。
VRCSdkControlPanel.TryGetBuilderはいつでも呼び出すことができますが、SDKウィンドウが開いていない場合や、アクセスしようとしているビルダーが利用できない場合は false が返されます。
[InitializeOnLoadMethod]
public static void RegisterSDKCallback()
{
VRCSdkControlPanel.OnSdkPanelEnable += AddBuildHook;
}
private IVRCSdkAvatarBuilderApi _builder;
private static void AddBuildHook(object sender, EventArgs e)
{
VRCSdkControlPanel.TryGetBuilder<IVRCSdkAvatarBuilderApi>(out _builder);
}
ビルド前にコードを実行する
OnSdkBuildStart は、検証および Build Request Callbacks が完了した後、SDKがビルドプロセスを開始する直前に実行されます。
[InitializeOnLoadMethod]
public static void RegisterSDKCallback()
{
VRCSdkControlPanel.OnSdkPanelEnable += AddBuildHook;
}
private static void AddBuildHook(object sender, EventArgs e)
{
if (VRCSdkControlPanel.TryGetBuilder<IVRCSdkAvatarBuilderApi>(out var builder))
{
builder.OnSdkBuildStart += OnBuildStarted;
}
}
private static void OnBuildStarted(object sender, object target)
{
Debug.Log("Building " + ((GameObject) target).name);
}
スクリプトからビルドする
[MenuItem("My Tools/Build Selected Avatar")]
public static async void BuildSelectedAvatar()
{
var avatar = Selection.activeGameObject;
if (!VRCSdkControlPanel.TryGetBuilder<IVRCSdkAvatarBuilderApi>(out var builder)) return;
try {
await builder.BuildAndTest(avatar);
} catch (Exception e) {
Debug.LogError(e.Message);
}
}
注意事項
現在、リフレクションを使用してSDK内部にアクセスしている場合は、早急にパブリックAPIへの移行を推奨します。
私たちは可能な限り安定したAPIを提供できるよう努めますが、将来的に変更される可能性があります。ツールがどのバージョンのSDKと互換性があるかを定義するために、セマンティックバージョニング(semver)を活用することを推奨します。詳細はこちらをご覧ください。
最終更新: