リリース 3.10.0
概要
SDKバージョン 3.10.0 では、VRChat Dynamics が Worlds に導入されました!これには PhysBones、Contacts、VRC Constraints、およびそれらすべてのUdon統合が含まれます。さらに、ワールドの永続化(World Persistence)において、データ使用状況の情報と制限が公開されました。
情報
このリリースは当初バージョン 3.9.1 でしたが、APIの非互換性によりバージョンが引き上げられました。
新機能
- VRChat Dynamics are now supported in Worlds!
- PhysBones、Contacts、およびVRC Constraintsが
Worldsプロジェクトで利用可能になりました。 - これらのコンポーネントにはすべて、スクリプトで操作するための新しいUdon APIとイベントが用意されています!
- これは
WorldsSDKにおいて最も要望の多かった機能の一つです。皆さんがこれを使ってどのようなものを作り出すのか、とても楽しみにしています!
- PhysBones、Contacts、およびVRC Constraintsが
- ワールドの永続化(Persistence)において、Storage Informationを取得するためのAPIが追加されました。
- これには、
GetPlayerDataStorageUsage、GetPlayerDataStorageLimit、RequestStorageUsageUpdateという3つの新しい関数が含まれます。 Request関数は、新しいOnPersistenceUsageUpdatedイベントと対になっています。- また、
PlayerDataの使用状況に関する2つの新しいイベント、OnPlayerDataStorageWarningとOnPlayerDataStorageExceededも追加されました。
- これには、
修正と変更
- ワールドプロジェクトにおいて、スポーン地点がそのワールドのリスポーン高さを下回っている場合に、検証警告が表示されるようになりました。
- ワールドプロジェクトにおけるスポーン地点が見つからない場合の処理が改善されました。
- プロジェクトの読み込み時およびアセンブリのリロード時の内部ログ出力を削減しました。
- アバターおよびワールド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プロパティからアクセス可能であるためです。
- これは混乱を招く原因となっており、いずれにせよ
- コンタクトレシーバーにおいて、「Allow Self」および「Allow Others」オプションは、受信側の送信元がアバターの一部である場合にのみ適用されるようになりました。つまり、ワールド内のコンタクト送信元を扱う場合、これらの設定は使用されません。
- アバター上のレシーバーがワールドのコンタクト送信元を検知したくない場合は、「Content Types」で「World」を無効にできることを覚えておいてください。
- PhysBones、Contacts、およびVRC Constraintsが、
VRCPlayerObject上で使用された際に正しく動作するようになりました。 Object.Instantiate()を使用してワールド内でインスタンス化されたPhysBonesが、固まったままにならず正しくシミュレーションされるようになりました。- インスタンス化されたオブジェクト上のUdonビヘイビアが同期されないのと同様に、この方法でインスタンス化されたPhysBonesの掴み(Grabs)やポーズ(poses)もクライアント間で同期されません。
- Udon Class Exposure Treeにおいて、実際には公開されているにもかかわらず「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に変更されました。
- 引数を取らないデフォルトコンストラクタを含む、新しいコンストラクタが追加されました。これらのコンストラクタは
- WorldsプロジェクトでClientSimを使用している際、
OnPhysBoneGrabbed()がグラブを開始したプレイヤーを正しく取得できない問題を修正しました。 - サムネイルが添付されていないアバターをアップロードできてしまうケースを修正しました。
既知の問題
- ビルド中に「All pipe instances are busy」というエラーが表示されることがまれにあります。これはUnity側の問題です。エディターを再起動してから再度試してください。
