Unity3d 平台上下移动时2D播放器是否会晃动?

Unity3d 平台上下移动时2D播放器是否会晃动?,unity3d,2d,collision,rigid-bodies,Unity3d,2d,Collision,Rigid Bodies,由于某种原因,当平台上下移动时,我的玩家角色会上下晃动,这会阻止玩家跳跃,因为玩家没有被接地。我尝试了几件事,包括在平台上添加一个运动学刚体,以及尝试让玩家在平台上着陆后成为平台的孩子,但到目前为止没有任何效果。任何帮助都将不胜感激。谢谢大家! 这是我的密码: using System.Collections; 使用System.Collections.Generic; 使用UnityEngine 公共类移动平台:MonoBehavior { 私有向量3 posA private Vector

由于某种原因,当平台上下移动时,我的玩家角色会上下晃动,这会阻止玩家跳跃,因为玩家没有被接地。我尝试了几件事,包括在平台上添加一个运动学刚体,以及尝试让玩家在平台上着陆后成为平台的孩子,但到目前为止没有任何效果。任何帮助都将不胜感激。谢谢大家!

这是我的密码:

using System.Collections;
使用System.Collections.Generic; 使用UnityEngine

公共类移动平台:MonoBehavior { 私有向量3 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;
}
private Vector3 posB;
私有向量3 nexPos;
公共游戏对象玩家;
[序列化字段]
私人浮动速度;
[序列化字段]
私有化改造;
[序列化字段]
私有转换b;
void Start()
{
posB=childTransform.localPosition;
posB=transformB.localPosition;
nexPos=posB;
}
//每帧调用一次更新
无效更新()
{
Move();
}
专用空心OnCollisionInter2D(碰撞2D碰撞)
{
if(collision.collider.tag==“Player”)
{
collision.collider.transform.SetParent(transform);
}
}
私有空心OnCollisionExit2D(碰撞2D碰撞)
{
if(collision.collider.tag==“Player”)
{
collision.collider.transform.SetParent(null);
}
}
私人空位移动()
{
childTransform.localPosition=Vector3.moveToward(childTransform.localPosition,nexPos,speed*Time.deltaTime);
if(Vector3.Distance(childTransform.localPosition,nexPos))应该在lateupdate中执行,因为否则您将设置播放器的位置,稍后物理系统将更新它,导致口吃

另一个解决方案是直接向下光线投射,并将游戏对象放置在碰撞点上(加上某种偏移量)

您是否尝试过将玩家“监护”到平台上?