首页 > 解决方案 > 在更新其“中心”以匹配游戏空间中的 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 现在完美地跟随头部位置。如果没有调整中心以匹配头部的逻辑,如果您走到游戏空间的角落,然后走上台阶,您现在与实际控制器主体的位置发生物理偏移,从而导致不良运动。

还有一个奇怪的事情,这只会在另一个控制器打开时破坏运动逻辑,在另一个控制器被禁用时干扰中心工作,但是当我把它重新打开时,同样的奇怪运动开始发生。

我唯一注意到的是删除调整中心的逻辑以编程方式完全解决了它。

标签: unity3d

解决方案


好的,所以我没有意识到 CharacterController 处理了物理碰撞。

发生的事情很简单,我的左控制器在其世界空间 UI 周围有盒子碰撞器。导致我“跳来跳去”。

我基本上总是站在碰撞中,所以当我的右控制器剪裁角色控制器时,它会不断地自行解决。


推荐阅读