weishibajun 2024-07-16 02:05 采纳率: 0%
浏览 42

unity2d移动居然只能能上下穿墙,左右移动会被挡住?

tilemap设置了碰撞器和static刚体,玩家也设置了碰撞器和动态刚体。
运行时玩家左右移动正常会被墙挡住,
上下移动居然能穿墙,虽然碰到墙时会停住,但继续按住移动就能穿墙。这是为什么?
移动代码如下:

void Update()
{
    KeyBoardMove();
}
public void KeyBoardMove()
{
    transform.Translate(Vector3.up * Input.GetAxis("Vertical") * playerSpeed * Time.deltaTime);
    transform.Translate(Vector3.right * Input.GetAxis("Horizontal") * playerSpeed * Time.deltaTime);
}

tilemap设置

img


player设置

img

更奇怪的是玩家中的capsule collider2d中direction换成vertical后,嘿,不能穿墙了。
初学者有许多疑惑,求解答。谢谢 !

后续把移动代码使用velocity控制后能解决问题,但这是为什么啊?我去

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-16 02:05
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在Unity2D中,你遇到的问题可能由几个因素导致:

    1. 穿墙现象的原因

      • 穿墙问题可能是因为transform.Translate方法在处理碰撞时不够精确。当使用transform.Translate时,Unity会在每一帧移动物体,但不会考虑物体在移动过程中的碰撞状态。如果物体在移动过程中与另一个碰撞器相交,它可能会被卡住,但如果继续移动,物体可能会穿过碰撞器。
      • 另一个可能的原因是Rigidbody2DCollision Detection设置为Discrete,这意味着碰撞检测只在每帧的开始进行,而不是连续进行。这可能导致物体在某些情况下穿过碰撞器。
    2. Capsule Collider 2D的Direction设置

      • 当你将Capsule Collider 2D的Direction设置为Vertical时,Capsule的碰撞检测变为一维,只在垂直方向上检测碰撞。这可能解决了穿墙问题,因为Capsule不再在水平方向上检测碰撞,从而避免了水平方向上的穿墙现象。
    3. 使用Rigidbody2D.velocity控制移动

      • 使用Rigidbody2D.velocity来控制移动可以解决穿墙问题,因为这种方法利用了Unity的物理引擎来处理碰撞。物理引擎会在移动物体时考虑碰撞,并在物体与碰撞器相交时正确地阻止或响应碰撞。这种方法提供了更精确的碰撞检测和响应。
    4. 使用Rigidbody2D.velocity的优点

      • 当使用Rigidbody2D.velocity时,Unity的物理系统会处理物体的移动和碰撞。这意味着物体在移动过程中如果遇到碰撞器,物理系统会根据物体的质量和碰撞器的属性来计算碰撞结果,从而避免穿墙现象。
      • 此外,如果你设置了Continuous碰撞检测,物理系统会在物体移动过程中连续检测碰撞,进一步提高碰撞检测的准确性。

    总之,使用Rigidbody2D.velocity并结合适当的碰撞检测设置(如Continuous)可以提供更可靠的碰撞响应,从而解决穿墙问题。同时,确保你的碰撞器和刚体设置正确,没有遗漏或错误,也是避免这类问题的关键。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月16日