当角色对撞机与立方体对撞机发生碰撞时,ThirdPersonController 会移动卡顿吗?

ThirdPersonController moving stuttering when the character collider colliding with a cube collider?

我正在尝试将玩家移动到他面对的玩家方向 1.5 距离。 立方体的比例是 1,1,1 所以我猜在逻辑上玩家应该落在立方体之间,这是另一个要解决的问题我可以让立方体在 Y 上的比例为 0.1。

但现在的问题是,玩家开始向前移动,然后卡在空中卡住了。

private void MovePlayer(float speed)
    {
        player.position += player.forward * Time.deltaTime * speed;
    }

    private void Update()
    {
        Vector3 newPos = new Vector3(player.position.x + 1.5f, player.position.y, player.position.z);
        MovePlayer(1f);
    }

当游戏 运行 时,玩家一直口吃,因为他试图继续移动但被碰撞器卡住了。

另一个相关的问题是在很多情况下玩家在空中并且看起来像是坐在立方体上而不是站在立方体上。只有当我用他站立的钥匙稍微移动播放器时。

有两个可能的问题。

1。您没有禁用 ThirdPersonUserControl 脚本。请注意,ThirdPersonUserControl 脚本附加到 ThirdPersonController 游戏对象。您必须禁用它,否则您将同时从两个脚本移动播放器。

2.ThirdPersonController 使用 Rigidbody。不要使用变换 (player.position) 移动 Rigidbody 对象。您必须使用 MovePositionAddForce post.

中描述的刚体函数之一

因为这是 ThirdPersonController,您不应该直接修改 Rigidbody。使用在那里声明的 Move 函数来移动它。您可以将新位置传递给第一个参数,然后将 crush 和 jump 值分别传递给第二个和第三个参数。这必须在 FixedUpdate 更新中完成。

正确移动 ThirdPersonCharacter 对象的示例:

ThirdPersonCharacter tpsScript;

void Start()
{
    GameObject tpsObj = GameObject.Find("ThirdPersonController");
    tpsScript = tpsObj.GetComponent<ThirdPersonCharacter>();
}

void FixedUpdate()
{

    float h = CrossPlatformInputManager.GetAxis("Horizontal");
    float v = CrossPlatformInputManager.GetAxis("Vertical");

    Transform m_Cam = Camera.main.transform;
    Vector3 m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized;
    Vector3 m_Move = v * m_CamForward + h * m_Cam.right;

    tpsScript.Move(m_Move, false, false);
}