出于某种原因,我的玩家没有与有碰撞的瓷砖地图墙发生碰撞......这是我的玩家移动代码
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 的碰撞,并且它们正在碰撞,问题是我的播放器仍然直接穿过墙壁。我不知道为什么对撞机不能阻止这种情况发生。
答案 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。