在我的2D游戏中,世界被布置成块(就像2d minecraft),当我按下我的按钮时,我试图让玩家打破他下方的障碍物。这是我的代码:
if(Input.GetButtonDown("MineDown"))
{
Transform other = Physics2D.Raycast(new Vector2(gameObject.transform.position.x, gameObject.transform.position.y), new Vector2(Vector3.down.x, Vector3.down.y), Mathf.Infinity).transform;
Destroy(other.gameObject);
}
唯一的问题是,当我按下我的按钮时,玩家会被摧毁,而不是下面的阻挡。这不是我预期的行为,但我不知道如何解决它。
答案 0 :(得分:3)
了解您正在使用的物理引擎非常重要。如果光线投射在对撞机内开始,一些光线投射系统会忽略对撞机,有些则不会。
引自Physics2D.Raycast
的手册条目:
这也将检测射线开始时的碰撞器。
你的光线投射在玩家的对手内部开始,所以它总是击中它。
可能的解决方法,大致按照我建议尝试的顺序:
collider.bounds
)Physics2D.RaycastAll
等电话查找所有匹配的对手,然后检查它们是什么图层蒙版很容易设置。您需要使用标签&注册新图层。图层面板,然后使用检查器窗口将该图层应用于场景中的对象。当您在不同图层上拥有对象时,可以使用它们来控制渲染,碰撞,光线投射等。
我经常为玩家,敌人,地形等提供图层。