Release 3.10.0
概要
SDKバージョン 3.10.0 では、VRChat Dynamics が Worlds に導入されました!これには PhysBones、Contacts、VRC Constraints、およびそれらすべてに対する Udon 統合が含まれます。さらに、world persistence においてデータ使用状況の情報と制限が公開されるようになりました。
info
このリリースは当初 3.9.1 としてバージョン管理されていましたが、互換性のないAPIが存在したため、現在のバージョンに変更されました。
新機能
- ワールドで VRChat Dynamics がサポートされました!
- PhysBones、Contacts、VRC Constraints がワールドプロジェクトで使用できるようになりました。
- これらのコンポーネントすべてに新しい Udon API とイベントが追加され、スクリプトから操作できるようになっています!
- これは Worlds SDK において最も要望が多かった機能の一つです。これを使って皆さんがどのようなものを作り出すのか、非常に楽しみにしています!
- ワールドの永続化(World persistence)機能に、Storage Information を取得するための API が追加されました。
- これには、
GetPlayerDataStorageUsage、GetPlayerDataStorageLimit、RequestStorageUsageUpdateという3つの新しい関数が含まれます。 Request関数は、新しいOnPersistenceUsageUpdatedイベントと対になっています。- また、
PlayerDataの使用に関連して、OnPlayerDataStorageWarningとOnPlayerDataStorageExceededという2つの新しいイベントも追加されました。
- これには、
修正と変更
- ワールド内のリスポーン地点より低い位置にスポーン地点が設置されている場合、ワールドプロジェクトで検証警告が表示されるようになりました。
- ワールドプロジェクトにおけるスポーン地点の欠落への対応を改善しました。
- プロジェクトの読み込み時やアセンブリの再読み込み時における内部ログ出力を削減しました。
- アバターおよびワールドのIDに含まれる前後の空白が削除されるようになりました。
- VRChatのコンストレイントコンポーネントがインスペクターに表示されている状態で、そのコンストレイントのソースとなるTransformを削除した際にSDKがクラッシュする問題を修正しました。
- 検証ウィンドウを更新するたびに、シーン内のアバターに適用されたカスタムポーズやアニメーションが意図せずリセットされてしまう問題を修正しました。
3.9.1-beta.1 から 3.9.1-beta.2 までの修正と変更
VRCContactReceiver.UpdateContentTypes()を変更し、IEnumerableの代わりに文字列の配列を受け取るようにしました。これにより、このメソッドを含む Udon グラフが正しくコンパイルされない問題が解決されます。- 以前 U# でこのメソッドを使用し、
string[]以外のものを渡していた場合は、文字列配列を渡すようにスクリプトを更新する必要があります。
- 以前 U# でこのメソッドを使用し、
- コミュニティ製のツールとの間で意図しない互換性の破壊が発生していた問題を解決しました。
- 具体的には、
PhysBoneGrabHelperクラスを元の場所へ戻しました。
- 具体的には、
- ワールド内の PhysBones、Contacts、および VRC Constraints において、Udon に公開されていたシンボルのリストから
nameを削除しました。- これは混乱を招く原因となっており、いずれにせよ
.gameObjectプロパティからアクセス可能であるためです。
- これは混乱を招く原因となっており、いずれにせよ
- Contact Receiver において、「Allow Self」および「Allow Others」オプションは、受信側の送信元がアバターの一部である場合にのみ適用されるようになりました。つまり、ワールド内の Contact Sender を扱う場合、これらの設定は使用されません。
- アバター上のレシーバーがワールド内の Contact Sender を検知したくない場合は、「Content Types」で「World」を無効にできることを忘れないでください。
- PhysBones、Contacts、および VRC Constraints が、
VRCPlayerObject上で使用された際に適切に動作するようになりました。 Object.Instantiate()を使用してワールド内にインスタンス化された PhysBones が、硬直したままにならず適切にシミュレーションされるようになりました。- この方法でインスタンス化された PhysBones の「つかみ(Grabs)」や「ポーズ(poses)」はクライアント間で同期されません。これは、インスタンス化されたオブジェクト上の Udon Behavior が同期されないのと同様です。
- Udon クラス公開ツリーにおいて、実際には公開されているにもかかわらず「not exposed(公開されていない)」と表示されていた項目をいくつか修正しました。これは主に、最近追加されたダイナミクスコンポーネントに影響していました。
- アバターのアップロード処理が途中で中断された場合に、誤って「missing thumbnail(サムネイルが見つからない)」エラーが発生し、アップロードが失敗する問題を修正しました。
3.9.1-beta.2 から 3.10.0-beta.1 および 3.10.0 への修正と変更
- PhysBonesで使用される
PermissionFilter構造体に関連する互換性の変更。- パラメータなしのデフォルトコンストラクタを含む、新しいコンストラクタが追加されました。これらのコンストラクタは
contentTypesプロパティをEverythingに設定します。これにより、既存の一部のコミュニティパッケージとの非互換性が解消されます。 - 十分に解決できなかった互換性の問題が残っているため、予定されていたSDKリリースバージョンを
3.9.1から3.10.0に変更しました。
- パラメータなしのデフォルトコンストラクタを含む、新しいコンストラクタが追加されました。これらのコンストラクタは
- ワールドプロジェクトでClientSimを使用する際、グラブを開始したプレイヤーが
OnPhysBoneGrabbed()で受信されない問題を修正しました。 - サムネイルが添付されていないアバターをアップロードできてしまうケースを解決しました。
既知の不具合
- まれに、ビルド中に "All pipe instances are busy" というエラーが表示されることがあります。これは Unity の問題です。エディタを再起動して再度試すことで解決するはずです。
最終更新: