Bug Reports

  • No off-topic posts
  • Don't report more than 1 issue at once
  • For isolated issues or customer support visit help.vrchat.com
Thanks for your bug report!
[1862]ContactEnterInfo.contactPoint returns the avatar root position when Contact Sender Height is 0
Contact SenderのHeightが0のとき、ContactEnterInfo.contactPointがSenderではなくアバターのルート位置を返す 【概要】 ワールドのBOXタイプのVRCContactReceiverでOnContactEnterを受け取ったとき、ContactEnterInfo.contactPointが接触位置を返さない場合があります。 条件はContact Sender側のコライダーのHeightが0(スフィア形状)であること。このときcontactPointはSenderの位置を無視し、アバターのルート位置(VRCPlayerApi.GetPosition())をReceiverの形状内にクランプした値を返します。 Heightが0以外のSender(カプセル形状)では、contactPointは正しく接触位置を返します。 【環境】 正式版[1862]、ベータ版[1882]共に発生します。 【再現手順】 再現用のワールドをアップロードしました。こちらでご確認ください。 https://vrchat.com/home/world/wrld_f429d7d0-0626-4b31-b922-8081c3d031fe/info このワールドにはVRCContactReceiver(Shape: Box、Content Types: Avatar、Collision Tags: Head HandL HandR FootL FootR)を設置した鏡を置いてあり、OnContactEnterで触れた場所を中心に鏡にヒビがはいり、以下のログを出力します。 Debug.Log($"[ContactPointCheck] contactPoint={info.contactPoint} " + $"senderPos={sender.position} " + $"AvatarRoot={player.GetPosition()} tags={tags}"); ※tagsはHead / HandL / HandR / FootL / FootRのいずれかが出ます。 【手順】 アバターのAvatar Descriptor → Colliders で、Hand LのみHeightを0に設定してアップロードする(Hand Rは既定のまま) 上記ワールドに入り、左右それぞれの手で鏡に触れる ログのcontactPointをsenderPosおよびAvatarRootと比較する 頭・足については、既定のAvatar DescriptorがそのままHeight=0のため、設定を変更せずに再現します。 【期待される結果】 左右どちらの手でも、contactPointが実際の接触位置を返す。 【実際の結果】 Hand R(Height ≠ 0)— 正常。senderPosに追従している [ContactPointCheck] contactPoint=(-1.92, 1.18, -0.03) senderPos=(-1.92, 1.17, -0.09) AvatarRoot=(-2.04, -0.01, -0.46) tags=HandR [ContactPointCheck] contactPoint=(-1.88, 1.09, -0.03) senderPos=(-1.88, 1.08, -0.09) AvatarRoot=(-2.03, -0.01, -0.45) tags=HandR Hand L(Height = 0)— 異常。AvatarRootに一致している [ContactPointCheck] contactPoint=(-2.02, 0.00, -0.03) senderPos=(-2.25, 1.25, -0.07) AvatarRoot=(-2.02, -0.01, -0.36) tags=HandL [ContactPointCheck] contactPoint=(-2.00, 0.00, -0.03) senderPos=(-2.25, 1.13, -0.08) AvatarRoot=(-2.00, -0.01, -0.39) tags=HandL XがAvatarRootと完全に一致しています。YもAvatarRootの値(-0.01)がReceiverの下端(0.00)へクランプされた値です。ZはAvatarRoot(-0.36 / -0.39)ではなくReceiverの面(±0.03)にクランプされており、ルート位置をReceiverの形状内へ収めた結果であることが分かります。 【備考】 既定設定のHead / Foot(いずれもHeight = 0)も同様に異常 [ContactPointCheck] contactPoint=(-1.51, 0.00, 0.03) senderPos=(-1.51, 1.17, 0.07) AvatarRoot=(-1.51, -0.01, 0.07) tags=Head [ContactPointCheck] contactPoint=(-1.51, 0.00, 0.03) senderPos=(-1.59, 0.05, -0.06) AvatarRoot=(-1.51, -0.01, 0.07) tags=FootL [ContactPointCheck] contactPoint=(-1.51, 0.00, 0.03) senderPos=(-1.47, 0.12, 0.07) AvatarRoot=(-1.51, -0.01, 0.07) tags=FootR この3行は同じ瞬間に3つのSenderが触れたもので、Head・FootL・FootRがすべて同一の座標を返しています。 【影響】 既定のAvatar DescriptorではHeadとFootのHeightが0のため、設定を変更していない多くのアバターがこの条件に該当します 体の部位が触れた位置に応じて演出を出すワールドギミックにおいて、既定のアバターでは頭・足の接触位置が取得できません。 【参考動画】 https://x.com/onotchi_/status/2086932129343250461
2
·
tracked
Manual sync does not work reliably for late joiners
Every now and then, late joiners do not receive data for manual synced variables on UdonSharpBehaviours. This can be severly breaking for some worlds! Just imagine a locked private room suddenly being accessible for a late joiner. I found one way to trigger it relatively often: put a few manual synced objects into an otherwise empty world (for example the attached InteractionCounter script). Do a Build & Test, interact with some objects to change and serialize their state Start a second client, the client receives data normally. Don't interact with anything Quit the first client without interacting with anything Start a third client. Often, this one already doesn't get any data on any of the objects. If sync still works, just repeat the process by closing the second client and starting a fourth and so on and try interacting with something again with the client that you are about to close. Or have another regular game client running in the background in a heavy world. For some reason that does seem to have a big influence, too. It is still a bit random, but that way the bug usually happens pretty fast. Note that after it happens, the player can still call RequestSerialization to properly send the data to late joiners, they just don't receive it automatically on join. Also note that it usually affects successive late joiner after it happened once. Also note that doing a RequestSerialization in OnOwnershipTransferred usually avoids that bug. Which is interesting, because it suggests that another RequestSerialization helps even before the new player joins. However, this would only take care of the cases where the actual owner leaves. From observations, I'm almost sure there are more scenarios that can trigger late join sync issues. This issue is similar to: https://feedback.vrchat.com/bug-reports/p/1553-ondeserialization-not-guaranteed-to-fire-for-late-joiners But different in the way that it is not just OnDeserialization not being called: The values of the variables do not change either.
1
·
tracked
World image resolution is being rendered too low in all contexts (800x600 instead of 1200x900)
Currently in the VRChat SDK when uploading a world, it recommends an image resolution of 1200x900px. However as far as I can tell in practice, VRChat only seems to use 800x600px images, which is 2/3rds the recommended size, resulting in aliasing. So far in my testing this seems to apply to: 1) The website 2) The world image returned by the API 3) The world image as seen in the game client UI (all platforms) 4) Portals dropped in-game (all platforms) While often subtle, it becomes quite noticeable when an image has pixel art, which renders as blurry. The discrepancy between the stated and actual ideal resolutions results in world images looking less sharp than they otherwise could, and without clarification makes it uncertain which resolution to target for design and upload. Attached to this post are 5 images from my world VRCanvas to show the effect of the issue, in the following order (pay particular attention to the sharpness of the text): 1) Uploaded 1200x900 image 2) 1200x900 image as downscaled to 800x600 and displayed by VRChat 3) Uploaded 800x600 image (VRChat displays as-is) 4) Image #1/2 as it appears in a portal 5) Image #3 as it appears in a portal The ideal solution I'm requesting would be to fix the API/client to display in the native recommended resolution of 1200x900, since this is higher quality, and most worlds are already uploaded in this resolution per the VRCSDK's recommendation. If for whatever reason this is undesirable to VRChat (perhaps texture memory or bandwidth reasons?), then the VRCSDK recommendation should be changed to 800x600 to match what's actually the ideal resolution. If this is a texture memory concern, then a third option could be move to a new resolution of 1024x768, since this would still fall within the same power of 2 as 800x600 while still 4:3 aspect ratio and higher resolution.
2
·
tracked
Load More