【问题标题】:(Unity) moving platform moves player weirdly(统一)移动平台奇怪地移动玩家
【发布时间】:2021-06-23 19:59:48
【问题描述】:

每当玩家进入移动平台的触发器以移动玩家时,我都会使用此代码移动玩家:

private void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Moving Platform"))
    {
        previousPosition = other.transform.position;
    }
}
private void OnTriggerStay(Collider other)
{
    if (other.CompareTag("Moving Platform"))
    {
        Vector3 distanceVector = other.transform.position - previousPosition;
        rb.MovePosition(rb.position + distanceVector);

        previousPosition = other.transform.position;
    }
}

由于某种原因,玩家会被缓慢地推向平台移动的方向。当将父母从玩家设置到平台时,它也会发生,我需要将玩家设置为运动学,以便他移动,这会产生移动问题。为玩家提供粘性物理材料也会产生问题。

玩家通过增加力移动,平台与rigidbody.MovePosition()一起使用。

有人知道怎么了?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    Rigidbody.MovePosition 将运动学刚体移向位置时,“玩家被缓慢地推向平台移动的方向”是有意义的。因此,您不会像使用变换那样直接设置位置。您可能想看看Rigidbody.position,它具有与直接设置转换相同的“传送”效果。

    要将平台的移动应用于播放器,就像我想你想做的那样,我会让播放器成为平台的孩子,就像当父母被移动时,所有的孩子都被移动。您可以相应地在OnTriggerEnterOnTriggerExit 中操作场景游戏对象的层次结构,以便使用Transform.SetParent 进行感兴趣的移动应用。

    【讨论】:

    • 首先感谢您的想法!不幸的是,让玩家成为平台的孩子并没有为我做这件事,因为为了让玩家移动,我需要改变它的阻力,这再次给移动带来了问题。但是我发现问题在于平台是用 RigidBody.MovePosition() 移动的。正如您所提到的,使用 RigidBody.position 修复了移动问题,但现在当玩家站在它上面时它会显得抖动。知道如何解决这个问题吗?
    猜你喜欢
    • 2023-01-02
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多