【问题标题】:2D Player Shaking When Platforms Move Up and Down?平台上下移动时 2D 播放器抖动?
【发布时间】:2020-11-12 22:01:46
【问题描述】:

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

这是我的代码:

using System.Collections;

使用 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;
}

}

【问题讨论】:

  • 您是否尝试过将玩家“养育”到平台?

标签: unity3d 2d collision rigid-bodies


【解决方案1】:

移动();应该在lateupdate中执行,否则你会设置玩家的位置,稍后物理系统会更新它,导致卡顿。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多