平台上下移动时2D播放器会晃动吗?

问题描述

由于某种原因,当平台上下移动时,我的玩家角色会上下波动,这会阻止玩家因为未接地而跳动。我尝试了几件事,包括在平台上添加了运动刚体,并尝试使玩家在降落到平台上后成为平台的孩子,但到目前为止没有任何效果。任何帮助,将不胜感激。谢谢!

这是我的代码

using System.Collections;

using System.Collections.Generic; 使用UnityEngine;

公共类MovingPlatform:MonoBehavIoUr { 私有Vector3 posA;

private Vector3 posB;

private Vector3 nexPos;

public GameObject Player;

[Serializefield]
private float speed;

[Serializefield]
private Transform childTransform;

[Serializefield]
private Transform transformB;

void Start()
{
    posB = childTransform.localPosition;
    posB = transformB.localPosition;
    nexPos = posB;
}

// Update is called once per frame
void Update()
{
    Move();
}

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.tag == "Player")
    {
        collision.collider.transform.SetParent(transform);
    }
}

private void OnCollisionExit2D(Collision2D collision)
{
    if (collision.collider.tag == "Player")
    {
        collision.collider.transform.SetParent(null);
    }
}

private void Move()
{
    childTransform.localPosition = Vector3.Movetowards(childTransform.localPosition,nexPos,speed * Time.deltaTime);

    if (Vector3.distance(childTransform.localPosition,nexPos) <= 0.1)
    {
        ChangeDestination();
    }
}

private void ChangeDestination()
{
    nexPos = nexPos != posA ? posA : posB;
}

}

解决方法

Move();应该在lateupdate中执行,因为否则,您将设置播放器的位置,然后物理系统将对其进行更新,从而导致结结。

另一种解决方案是直接向下光线投射并将您的GameObject放置在碰撞点上(加上某种偏移)