VRoidSDK.Decorator → Pixiv.VroidSdk.DecoratorVRoidSDK.IO → Pixiv.VroidSdk.IOVRoidSDK.Localize→ Pixiv.VroidSdk.LocalizeVRoidSDK.Networking → Pixiv.VroidSdk.Networking Pixiv.VroidSdk.Networking.UnityVRoidSDK.OAuth → Pixiv.VroidSdk.Oauth Pixiv.VroidSdk.Oauth.DataModel Pixiv.VroidSdk.Unity.Oauth.LegacyVRoidSDK → Pixiv.VroidSdk Pixiv.VroidSdk.Api Pixiv.VroidSdk.Api.DataModel Pixiv.VroidSdk.Api.Legacy Pixiv.VroidSdk.Cache Pixiv.VroidSdk.Unity.Cacheusing Pixiv.VroidSdk.Api.Legacy;
using Pixiv.VroidSdk.Api.DataModel;
private void LoadModel(CharacterModel characterModel, string password)
{
HubModelDeserializer.Instance.LoadCharacterAsync(
characterModel: characterModel,
encryptPassword: password, // モデルの暗号化に使うパスワードを設定
onLoadComplete: (GameObject characterObj) => onSuccess(characterObject),
onDownloadProgress: (float progress) => onProgress(progress),
onError: (Exception error) => onError(error)
);
// optionを使いキャッシュ数など細かい設定が可能
// ただし、パスワードは設定必須になります
var option = new HubModelDeserializerOption {
MaxCacheCount = 20,
CacheEncryptPassword = password, // モデルの暗号化に使うパスワードを設定
};
HubModelDeserializer.Instance.LoadCharacterAsync(
characterModel: characterModel,
option: option,
onLoadComplete: (GameObject characterObj) => onSuccess(characterObject),
onDownloadProgress: (float progress) => onProgress(progress),
onError: (Exception error) => onError(error)
);
}
using Pixiv.VroidSdk.Api.DataModel;
public class Model : ApplicationModel
{
// クラス宣言が参照型になったのでNull許容型で宣言することはできない
- public Account? CurrentUser { get; set; }
+ public Account CurrentUser { get; set; }
public Model()
{
CurrentUser = null;
}
}
VRoidSDK.LocalStorage が廃止されました。
Pixiv.VroidSdk.Cache.ModelDataCache#Fetch Pixiv.VroidSdk.Cache.ModelDataCache#FetchAsync の利用)でマイグレーション処理が自動で実行されますVRoidSDK.LocalStorage をVRoid SDKが意図した使い方以外に利用している場合は正常に読み込めず削除されます。GetCharacterModelsProperty PostCharacterModelsPropertiesBatch などで返されるレスポンスの一部 GltfMaterial#extensions のレスポンスが従来まで Dictionary<string, object> だったのが GltfMaterialExtensions 型に変更されましたpublic override void Init(GltfMaterial baseData)
{
if (baseData.extensions != null)
{
stringBuilder.Append("\\n");
// v0.0.xはDictionaryを返す
foreach (var x in baseData.extensions)
{
stringBuilder.AppendLine("\\t" + x.Key + ":" + x.Value);
}
}
}
public override void Init(GltfMaterial baseData)
{
if (baseData.extensions != null)
{
stringBuilder.Append("\\n");
// v0.1.0以降はGltfMaterialExtensions型を返し、KHR_materials_unlitがあるかないかが判定できる
if (baseData.extensions.KHR_materials_unlit != null)
{
stringBuilder.AppendLine("\\t KHR_materials_unlit:{}");
}
}
}
HubApi HubModelDeserializer などのUtilityクラスを従来通り使用するのに初期化が必要になりました
HubModelDeserializer は HubApi の初期化のタイミングで同時に初期化が行われるclass Hoge : MonoBehaviour
{
void Start()
{
HubApi.GetAccountCharacterModels(
count: 10,
onSuccess: (List<CharacterModel> characterModels) => {
HubModelDeserializer.Instance.LoadCharacterAsync(
characterModel: characterModels[0],
onDownloadProgress: (float progress) => {
},
onLoadComplete: (GameObject characterObj) => {
characterObj.transform.parent = this.transform;
},
onError: (Exception error) => {
}
);
},
onError: (ApiErrorFormat errorFormat) => { /* 通信エラーなどのエラーが発生した時の処理 */ }
);
}
}
class Hoge : MonoBehaviour
{
void Start()
{
// 通信Driver設定 (ない場合はデフォルトでUnityWebRequestを利用)
var driver = new HttpClientDriver(SynchronizationContext.Current);
Authentication.Instance.Init(_sdkConfiguration.AuthenticateMetaData, driver);
// HubApiの初期化
// 内部で自動的に `HubModelDesiriazer.Instance` の初期化も行われる
HubApi.Initialize(Authentication.Instance.Client, _sdkConfiguration.GetConfig());
// 認可
Authentication.Instance.AuthorizeWithExistAccount(...);
HubApi.GetAccountCharacterModels(
count: 10,
onSuccess: (List<CharacterModel> characterModels) => {
HubModelDeserializer.Instance.LoadCharacterAsync(
characterModel: characterModels[0],
onDownloadProgress: (float progress) => {
},
onLoadComplete: (GameObject characterObj) => {
characterObj.transform.parent = this.transform;
},
onError: (Exception error) => {
}
);
},
onError: (ApiErrorFormat errorFormat) => { /* 通信エラーなどのエラーが発生した時の処理 */ }
);
}
}
以下のクラスがDeprecatedになります。それぞれ代替手段があるのでそちらへの移行を検討してください
VRoidSDK.Authentication → Pixiv.VroidSdk.OauthProvider Pixiv.VroidSdk.Oauth.ClientBrowserAuthorizer → Pixiv.VroidSdk.BrowserProvider Pixiv.VroidSdk.Browser.*VRoidSDK.SDKConfiguration → Pixiv.VroidSdk.Oauth.DataModel Pixiv.VroidSdk.Environments.*VRoidSDK.HubApi → Pixiv.VroidSdk.Api.DefaultApi Pixiv.VroidSdk.Api.HeartApiVRoidSDK.HubModelDeserializer → Pixiv.VroidSdk.ModelLoader従来のSDKではSDKConfigurationにアプリケーションIDやシークレットを入力して設定してもらってましたが、0.1.0以降では非推奨となります。
代わりにアプリケーション管理画面から credential.json.bytes をダウンロードしていただきそれを利用してください。
Pixiv.VroidSdk.OauthProvider Pixiv.VroidSdk.Oauth.ClientPixiv.VroidSdk.Api.DefaultApi Pixiv.VroidSdk.Api.HeartApiPixiv.VroidSdk.ModelLoaderTask<T> を返すメソッドも追加されました。
await 実行後はスレッドコンテキストが変わるため、UnityのAPIを利用する場合は SynchronizationContext.Current を使ってスレッドコンテキストを指定して実行してください。UnityWebRequest か HttpClient 経由で行えるように変えることができますPixiv.VroidSdk.Unity.Networking.Drivers.UnityWebRequestDriver Pixiv.VroidSdk.Networking.Drivers.HttpClientDriver をご利用くださいAuthentication を使った認可フローではサポートしていないためこの機能を利用する際は「3.1 認可・API実行・モデル読み込みのインターフェースを実装」をもとに新しい実装でお試しくださいASWebAuthenticationSession にURLスキームを渡す処理でエラーになるバグを修正しました