unity3d - 使用 PUN2 和 Unity3D 更新 VR 场景中可抓取游戏对象位置的问题
问题描述
我正在尝试将 PUN2 支持添加到一个简单的 Oculus 入门场景(桌子上的立方体)。我能够在基本的 Photon2 设置之上运行官方Avatar 同步。
这是当前的序列:
玩家 1(P1 - 使用 Quest 的人)创建房间并加入它
玩家 2(P2 - 使用 Unity Player 的玩家)加入房间
玩家 1 抓住一个立方体并移动它
如果 P1 只是水平拖动立方体,P2 会看到立方体正常移动,但如果他试图将它从桌子上抬起,从 P2 的角度来看,立方体看起来很疯狂。
看起来立方体与重力作斗争,但我不完全确定发生了什么。您可以在此视频中看到一个示例,其中水平拖动和从桌子上抬起之间存在交替:https ://gofile.io/?c=A9PN41
如果我在立方体上禁用重力,它似乎工作正常(尽管与 P1 移动对象的方式相比,插值有点慢):https ://gofile.io/?c=jM4qEE
关键是我不能让立方体在场景中飞来飞去:)
使用 Unity 2019.1 / PUN2 / Oculus Quest
解决方案
对于记录,我发现了问题所在,但仍在研究完整的解决方案。当P1操作一个对象(使用 保持客户端之间的同步Photon Transform View
)时,P2看到立方体在与重力作斗争时试图同步其位置/旋转(产生奇怪的跳跃行为)。
经过广泛的研究,我发现了一种可以解决问题的可能方法:
- 添加一个
Photon Rigid Body View
(同步速度和角速度) - 添加一个RPC(在操作期间激活),它:
- 禁用重力
- 启用
isKinematic
- 将所有权转移给正在操作该对象的玩家。
这需要在两个客户端(Master/Normal)上进行全面测试,但到目前为止,结果似乎很有希望。
推荐阅读
- javascript - 从 useRef() 获取输入值时获取 useState 是滞后的
- php - PHP-FPM 与 PHP 中的不同语言环境
- python - 为什么在子级上使用打印时调用父类的__str__函数
- scala - 使用 Scala Spark 在不同组中计算复杂统计数据的困难
- java - 使用 spring boot / thymyleaf 重定向到 HTML 页面
- go - 是自定义命名类型的转换函数还是语言构造
- android - 启动阻塞 GC Alloc / 等待阻塞 GC Alloc
- reactjs - React 功能组件,如何通过 onChange 事件动态地将属性传递给输入元素
- android - 将 Recycler View 边缘效果剪辑到 Recycler View Background Drawable
- javascript - 如何从 Prisma 1 迁移到 Prisma 2