使用 MRTK 坐在封闭式 VR 中玩时如何调整角色高度?

How to adjust character height when playing seated in closed VR with MRTK?

我正在使用 mrtk 2.1 创建一个 VR 应用程序,并希望让用户在坐着或站着玩游戏时处于相同的高度。 坐着玩的时候镜头太低

我可以调整包含 MainCamera 的 MixedRealityPlayspace 的高度,但在使用传送功能后会重置。 此外,从这个 GitHub Post 中了解到,MainCamera 和 MixedRealityPlayspace 之间存在偏移量,无法通过 mrtk 访问该偏移量,因此计算正确的高度将很困难。 这似乎不是正确的方法。

如何确保用户在游戏中始终处于正确的头部高度,即使是坐着玩?

我已经提交了以下功能请求: https://github.com/microsoft/MixedRealityToolkit-Unity/issues/6786

未经测试的解决方法可能如下:

  1. 创建在运行时实例化新游戏对象的逻辑。
  2. 将新 GameObject 的父级设置为 MixedRealityPlayspace。
  3. 将新的游戏对象设置为主相机的父对象
  4. 将您想要的偏移量作为变换应用到这个新游戏对象。

与不同的 MRTK 贡献者交谈,感觉您可能需要在运行时进行此转换配置。尝试在 editor/in 场景层次结构中执行此操作可能会遇到问题,因为无论主摄像机是否是 MixedRealityPlayspace 的孙子,人们都不确定主摄像机的父级是否被设置为 MixedRealityPlayspace。

好的,我找到了适合我的解决方案。 我使用以下代码向上或向下移动 mixedRealityPlayspace 以获得所需的玩家高度。(如果你想使用它,请确保将你的 mixedRealityPlayspace GameObject 标记为“Player”)

var mixedRealityPlayspace = GameObject.FindGameObjectsWithTag("Player")[0].transform;
var camHeight = mainCamera.transform.position.y;
var adjustement =wantedPlayerHeight-camHeight ;
mixedRealityPlayspace.position= new Vector3(mixedRealityPlayspace.position.x,mixedRealityPlayspace.position.y+adjustement, mixedRealityPlayspace.position.z);

我在我的场景开始时和在 MRTK Teleport system

文档中描述的 OnTeleportCompleted 事件中调用它