VRC公式api アバターアップロード編

# ?
- VRChatには[公式API](https://creators.vrchat.com/sdk/public-sdk-api)がある
- we recommend looking at the files directly mentioned above.（細かいことはソースみてね！）」とのことなのでソースをみた
- Geminiで翻訳

## Packages\com.vrchat.avatars\Editor\VRCSDK\SDK3A\Public SDK API\IVRCSdkAvatarBuilderApi.cs

```
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
using VRC.SDKBase.Editor;
using VRC.SDKBase.Editor.Api;

namespace VRC.SDK3A.Editor
{
    /// <summary>
    /// これは、Avatars SDK Builderと相互作用するために使用できる公開インターフェースです。
    /// </summary>
    public interface IVRCSdkAvatarBuilderApi : IVRCSdkBuilderApi
    {
        /// <summary>
        /// 指定されたアバターGameObjectをビルドし、ビルドされたアバターバンドルへのパスを返します。
        /// アバターには、有効なAvatarDescriptorコンポーネントとPipelineManagerコンポーネントがアタッチされている必要があります。
        /// </summary>
        /// <param name="target">ビルドするアバターGameObject</param>
        /// <returns>バンドルへのパス</returns>
        /// <exception cref="BuilderException">ビルドプロセスでエラーが発生しました。</exception>
        /// <exception cref="BuildBlockedException">ビルドはSDKコールバックによってブロックされました。</exception>
        /// <exception cref="ValidationException">コンテンツに検証エラーがあります。</exception>
        Task<string> Build(GameObject target);

        /// <summary>
        /// 指定されたVRCAvatarに対して、指定されたアバターGameObjectをビルドしてアップロードします。
        /// アバターには、有効なAvatarDescriptorコンポーネントとPipelineManagerコンポーネントがアタッチされている必要があります。
        /// </summary>
        /// <param name="target">ビルドするアバターGameObject</param>
        /// <param name="avatar">アバター情報を持つVRCAvatarオブジェクト。アバター作成にはNameが必要です。</param>
        /// <param name="thumbnailPath">ディスク上のサムネイル画像へのパス。最初のアバター作成時に指定する必要があります。</param>
        /// <param name="cancellationToken">キャンセル要求を通知するトークン。</param>
        /// <exception cref="BuilderException">ビルドプロセスでエラーが発生しました。</exception>
        /// <exception cref="BuildBlockedException">ビルドはSDKコールバックによってブロックされました。</exception>
        /// <exception cref="ValidationException">コンテンツに検証エラーがあります。</exception>
        /// <exception cref="OwnershipException">現在のユーザーはターゲットコンテンツを所有していません。</exception>
        /// <exception cref="UploadException">コンテンツのアップロードに失敗しました。</exception>
        Task BuildAndUpload(GameObject target, VRCAvatar avatar, string thumbnailPath = null, CancellationToken cancellationToken = default);

        /// <summary>
        /// 指定されたアバターGameObjectをビルドし、テストアバターリストに追加します。
        /// </summary>
        /// <param name="target">ビルドするアバターGameObject</param>
        /// <exception cref="BuilderException">ビルドプロセスでエラーが発生しました。</exception>
        /// <exception cref="BuildBlockedException">ビルドはSDKコールバックによってブロックされました。</exception>
        /// <exception cref="ValidationException">コンテンツに検証エラーがあります。</exception>
        Task BuildAndTest(GameObject target);
    }
}
```

## Packages\com.vrchat.base\Editor\VRCSDK\Dependencies\VRChat\Public SDK API\IVRCSdkBuilderApi.cs

```
using System;
using System.Threading.Tasks;

namespace VRC.SDKBase.Editor
{
    /// <summary>
    /// これは、SDKのユーザーとして、SDK Builderと相互作用するために使用できる公開インターフェースです。
    /// </summary>
    public interface IVRCSdkBuilderApi : IVRCSdkControlPanelBuilder
    {
        // ビルドイベント
        event EventHandler<object> OnSdkBuildStart; // SDKビルド開始時に発生
        event EventHandler<string> OnSdkBuildProgress; // SDKビルドの進捗状況が変化したときに発生 (stringは進捗に関する情報)
        event EventHandler<string> OnSdkBuildFinish; // SDKビルド終了時に発生
        event EventHandler<string> OnSdkBuildSuccess; // SDKビルド成功時に発生
        event EventHandler<string> OnSdkBuildError; // SDKビルド失敗時に発生

        event EventHandler<SdkBuildState> OnSdkBuildStateChange; // SDKビルド状態が変化したときに発生
        SdkBuildState BuildState { get; } // 現在のSDKビルド状態

        // アップロードイベント
        event EventHandler OnSdkUploadStart; // SDKアップロード開始時に発生
        event EventHandler<(string status, float percentage)> OnSdkUploadProgress; // SDKアップロードの進捗状況が変化したときに発生 (status: 状態を表す文字列, percentage: 進捗率)
        event EventHandler<string> OnSdkUploadFinish; // SDKアップロード終了時に発生
        event EventHandler<string> OnSdkUploadSuccess; // SDKアップロード成功時に発生
        event EventHandler<string> OnSdkUploadError; // SDKアップロード失敗時に発生

        event EventHandler<SdkUploadState> OnSdkUploadStateChange; // SDKアップロード状態が変化したときに発生
        SdkUploadState UploadState { get; } // 現在のSDKアップロード状態

        // 短縮メソッド
        // 短縮ビルドおよびアップロードメソッドについては、それぞれAvatars SDKとWorlds SDKを確認してください。
        void CancelUpload(); // 現在のアップロード処理をキャンセルします。
    }

    /// <summary>
    /// SDKビルドの状態を表す列挙型
    /// </summary>
    public enum SdkBuildState
    {
        Idle,       // アイドル状態 (ビルドしていない)
        Building,    // ビルド中
        Success,    // ビルド成功
        Failure     // ビルド失敗
    }

    /// <summary>
    /// SDKアップロードの状態を表す列挙型
    /// </summary>
    public enum SdkUploadState
    {
        Idle,        // アイドル状態 (アップロードしていない)
        Uploading,   // アップロード中
        Success,    // アップロード成功
        Failure     // アップロード失敗
    }
}
```
## Packages\com.vrchat.base\Editor\VRCSDK\Dependencies\VRChat\Public SDK API\IVRCSdkPanelApi.cs

```
using System;
using System.Threading.Tasks;
using UnityEngine.UIElements;

namespace VRC.SDKBase.Editor
{
    /// <summary>
    /// これは、SDKのユーザーとして、SDKパネルと相互作用するために使用できる公開インターフェースです。
    /// </summary>
    public interface IVRCSdkPanelApi
    {
        // 残念ながら、C# 7.3ではインターフェースに静的メンバーを含めることができないため、これらは純粋な参照としてここに残されています。
        // SDKパネルイベント
        // event EventHandler OnSdkPanelEnable; // SDKパネルが有効になったときに発生
        // event EventHandler OnSdkPanelDisable; // SDKパネルが無効になったときに発生

        // event EventHandler<SdkPanelState> OnSdkPanelStateChange; // SDKパネルの状態が変化したときに発生
        // SdkPanelState PanelState { get; } // 現在のSDKパネルの状態

        // SDKパネルメソッド

        /// <summary>
        /// ビルダーパネルの下部に、閉じることができる通知を表示します。
        /// </summary>
        /// <param name="title">通知のタイトル</param>
        /// <param name="content">通知の内容 (VisualElement)</param>
        /// <param name="titleColor">タイトルの色 (例: `green`などのカラークラス)</param>
        /// <param name="timeout">タイムアウト (秒)。0より大きい場合、指定された時間後に通知は自動的に閉じられます。</param>
        /// <returns>Task</returns>
        Task ShowBuilderNotification(string title, VisualElement content, string titleColor, int timeout = 0);
        Task DismissNotification(); // 現在表示されている通知を閉じます。

        // ReSharper disable once InvalidXmlDocComment
        /// <summary>
        /// 特定のインターフェース型 (例: IVRCSdkAvatarBuilderApi) のビルダーへの参照を取得します。
        ///
        /// C# 7.3の時点では、インターフェースに静的メンバーを定義することはできませんが、このメソッドはクラスに存在します。
        /// </summary>
        /// <param name="builder">目的のビルダー。見つからない場合はnull。</param>
        /// <typeparam name="T">検索するビルダーの型 (例: IVRCSdkAvatarBuilderApi)</typeparam>
        /// <returns>ビルダーが見つかったかどうか</returns>
        // static bool TryGetBuilder<T>(out T builder) where T : IVRCSdkBuilderApi;
    }

    /// <summary>
    /// SDKパネルの状態を表す列挙型
    /// </summary>
    public enum SdkPanelState
    {
        Idle,       // アイドル状態
        Building,    // ビルド中
        Uploading    // アップロード中
    }
}
```