忽略某些游戏对象的Raycast

时间:2016-07-20 14:28:58

标签: c# unity3d

PlayerController班级

public LayerMask groundLayer;

    void LookRotation()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hitInfo;
    if (Physics.Raycast(ray, out hitInfo, groundLayer))
    {
        destination = new Vector3(hitInfo.point.x, transform.position.y, hitInfo.point.z);
        //Look at mouse position
        transform.LookAt(destination);
    }
}

我遇到一个问题,让我的Raycast要么忽略我的播放器,要么只检测地面。在实际的统一检查器中,我已将LayerMask设置为我的Ground Layer,并且使用我当前的代码,它只会在Ground Layer中检测到地面,尽管玩家仍会干扰Raycast即使它不在Ground Layer中。我需要Raycast完全忽略播放器,即使通过将播放器添加到Ignore Raycast层来实现这一点,我也无法做到这一点,因为播放器需要被不同的Raycast检测到。所有这些代码都出现在我的PlayerController脚本中,因为它用于确定我的玩家轮换,我不确定这可能是玩家干扰Raycast的原因。提前干杯!

1 个答案:

答案 0 :(得分:2)

(1)您是否正确使用图层MASK?

它更像是......

int layerMaskYourHero = 1 << LayerMask.NameToLayer("YourHero");

然后

    RaycastHit2D hit = Physics2D.Raycast(
        laserEmittingPoint.position, Vector2.left,
        castLength,
        layerMaskYourHero);

(2)说,你正在使用物理矩阵吗?

enter image description here

转到编辑 - &gt;项目设置 - &gt;物理