unity3d - 如何使用 Oculus Locomotion Controller 禁用方向?
问题描述
我是 Unity 和 VR 的新手。我正在使用 Oculus Quest 开发 VR 应用程序。我已经根据 Valem 的以下教程视频设置了一个传送系统: https: //www.youtube.com/watch? v=r1kF0PhwQ8E - 但发现当我在传送过程中转过头或使用拇指杆进行定向时,之后着陆时我可能会面向侧面,并且使用拇指操纵杆的任何进一步移动似乎都没有正确对齐 - 所以当您尝试向前移动时,您会向侧面移动等。
我认为我的相机设备(它是 OVRPlayerController 的子设备)正朝着错误的方向。这得到了以下事实的支持:我放置在钻机前面的一些文本似乎已经移到了一边,而不是直接放在前面。
我只想要一个简单的传送系统,这样你就可以移动到新位置但不要定向——而是保持与开始时相同的方向。
是否可以禁用方向?或者有没有推荐的用于传送系统的替代解决方案?
解决方案
我使用此解决方法来删除传送方向:
打开 TeleportDestination 预制件
删除方向游戏对象
点击播放,然后修复那些引用它的脚本
您还将最终进入 LocomotionTeleport.cs DoTeleport(),它似乎设置了传送旋转(如果在此处修改代码可能就足够了)
public void DoTeleport() { var character = LocomotionController.CharacterController; var characterTransform = character.transform; // removed orientation //var destTransform = _teleportDestination.OrientationIndicator; var destTransform = _teleportDestination.transform; Vector3 destPosition = destTransform.position; destPosition.y += character.height * 0.5f; // removed orientation //Quaternion destRotation = _teleportDestination.LandingRotation;// destTransform.rotation; #if false Quaternion destRotation = destTransform.rotation; //Debug.Log("Rots: " + destRotation + " " + destTransform.rotation * Quaternion.Euler(0, -LocomotionController.CameraRig.trackingSpace.localEulerAngles.y, 0)); destRotation = destRotation * Quaternion.Euler(0, -LocomotionController.CameraRig.trackingSpace.localEulerAngles.y, 0); #endif if (Teleported != null) { //Teleported(characterTransform, destPosition, destRotation); Teleported(characterTransform, destPosition, characterTransform.rotation); } characterTransform.position = destPosition; //characterTransform.rotation = destRotation; }
推荐阅读
- html - 如何在不重新编译的情况下更改 Vue 模板?
- java - 如何等待主线程直到 AWS S3 文件上传完成
- node.js - SVG作为SVG的图像标签在使用sharp时不起作用
- r - 在R中对矩阵的行进行排序
- actions-on-google - 应用操作测试工具 v3.0.0:找不到带有操作文件参考的 Android 模块
- java - 单击另一个按钮后如何启用/禁用按钮?
- python - 向量化 numpy 多维数组。操作数组明智而不是元素明智
- c# - 使用在云中使用水平扩展的选项来实施 dotnet core web api 的最佳实践
- mysql - 选择表格中的最低日期
- python - 条件循环的问题