玩家不与 Tilemap 2d collider 发生碰撞

时间:2021-02-17 04:48:15

标签: c# unity3d

出于某种原因,我的玩家没有与有碰撞的瓷砖地图墙发生碰撞......这是我的玩家移动代码

 void Update()
    {
        hInput = Input.GetAxisRaw("Horizontal");
        vInput = Input.GetAxisRaw("Vertical");
        
        if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.RightArrow))
        {
            transform.Translate(hInput, 0, 0);
        }
        else if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.DownArrow))
        {
            transform.Translate(0, vInput, 0);
        }
        
        
    }

当我移动我的播放器时,它们会直接穿过碰撞器。它们在同一层上,并且都有碰撞器。有谁知道为什么会这样?谢谢!

编辑:所以我已经按照建议测试了与 OnCollisionEnter2d 的碰撞,并且它们正在碰撞,问题是我的播放器仍然直接穿过墙壁。我不知道为什么对撞机不能阻止这种情况发生。

3 个答案:

答案 0 :(得分:0)

Update() 方法中不会发生碰撞体的检测。要检测碰撞,您需要拥有 OnCollisionEnter()。当另一个带有碰撞器和刚体的对象进入时,将调用此方法。请参阅官方示例 here

void OnCollisionEnter(Collision collision)
{
    Debug.Log(collision.collider.name);
}

答案 1 :(得分:0)

确保 Z 轴 值相同。

为了检查碰撞是否真的发生,请执行以下操作:

OSM

并确保对撞机不是触发器

这些是唯一可能的问题及其修复方法。

答案 2 :(得分:0)

Collider 实际上并不像碰撞后那样执行物理学,它只是在物体接触时计算出来。为了使用物理,你需要一个刚体或刚体 2D,它实际上会对碰撞器检测到的碰撞做一些事情。然后,您需要设置 rb.velocity,而不是设置 position。