unity3d - 在更新其“中心”以匹配游戏空间中的 VR 玩家头部时,CharacterController 的移动非常错误
问题描述
public override void UpdateLocomotion()
{
GetInput();
characterController.center = new Vector3(player.HeadGeneric.transform.localPosition.x,0.85f, player.HeadGeneric.transform.localPosition.z);
if ((Mathf.Abs(inputAxis.x) < 0.4 && Mathf.Abs(inputAxis.x) > -0.4) && (Mathf.Abs(inputAxis.y) < 0.4 && Mathf.Abs(inputAxis.y) > -0.4)) return;
ApplyGravity();
Vector3 MovementForward = (transform.forward * -inputAxis.y) * Time.deltaTime;
Vector3 MovementSidewards = (-transform.right * -inputAxis.x) * Time.deltaTime;
MovementForward.y += gravityEffect;
characterController.Move(MovementForward + MovementSidewards);
}
void GetInput()
{
inputAxis.x = Input.GetAxis(XRAxisNames.RightThumbX);
inputAxis.y = Input.GetAxis(XRAxisNames.RightThumbY);
}
基本上,我使用 Unitys 通用 XR Rig,并编写了一些运动逻辑来与 CharacterController 一起使用。一切正常,但是当我有
characterController.center = new Vector3(player.HeadGeneric.transform.localPosition.x,0.85f, player.HeadGeneric.transform.localPosition.z);
运动开始到处跳跃,尽管在场景中,CharacterController 现在完美地跟随头部位置。如果没有调整中心以匹配头部的逻辑,如果您走到游戏空间的角落,然后走上台阶,您现在与实际控制器主体的位置发生物理偏移,从而导致不良运动。
还有一个奇怪的事情,这只会在另一个控制器打开时破坏运动逻辑,在另一个控制器被禁用时干扰中心工作,但是当我把它重新打开时,同样的奇怪运动开始发生。
我唯一注意到的是删除调整中心的逻辑以编程方式完全解决了它。
解决方案
好的,所以我没有意识到 CharacterController 处理了物理碰撞。
发生的事情很简单,我的左控制器在其世界空间 UI 周围有盒子碰撞器。导致我“跳来跳去”。
我基本上总是站在碰撞中,所以当我的右控制器剪裁角色控制器时,它会不断地自行解决。
推荐阅读
- app-inventor - 如何在应用发明者2中的特定时间触发短信?
- linux - 如何从证书文件(.crt 扩展名)生成证书请求和私钥文件(.pem 扩展名)
- karma-jasmine - Karma 没有运行测试。执行 0 of 0 错误
- cassandra - 无法启动 DSE-5.1.7,在未启动 Cassandra 的情况下显示 GC 统计信息的日志
- c - #define xxxxxx BIT(0) 链接器错误
- git - 将 Bitbucket 中的 repo 重置为空状态
- javascript - 如何在 Node.js 中将文件下载到缓冲区中?
- angular - Angular 5 AsyncValidator 控制状态为:PENDING
- valgrind - Valgrind 输出与 MacOS High Sierra 中的程序错误消息无关
- python - request.GET.get('page', '1') 在这里是什么意思?