光线投射表现不如预期?

时间:2015-05-26 22:24:24

标签: unity3d game-physics raycasting

在我的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);
}

唯一的问题是,当我按下我的按钮时,玩家会被摧毁,而不是下面的阻挡。这不是我预期的行为,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:3)

了解您正在使用的物理引擎非常重要。如果光线投射在对撞机内开始,一些光线投射系统会忽略对撞机,有些则不会。

引自Physics2D.Raycast的手册条目:

  

这也将检测射线开始时的碰撞器。

你的光线投射在玩家的对手内部开始,所以它总是击中它。

可能的解决方法,大致按照我建议尝试的顺序:

  • 使用图层蒙版以忽略玩家的对手
  • 在玩家的对手下方(使用collider.bounds
  • 下方启动光线投射
  • 使用Physics2D.RaycastAll等电话查找所有匹配的对手,然后检查它们是什么

图层蒙版很容易设置。您需要使用标签&注册新图层。图层面板,然后使用检查器窗口将该图层应用于场景中的对象。当您在不同图层上拥有对象时,可以使用它们来控制渲染,碰撞,光线投射等。

我经常为玩家,敌人,地形等提供图层。