仅投射到特定对象

时间:2015-08-10 13:22:23

标签: unity3d

我使用以下内容来检测我的头像前面是否有某些内容:

void Start()
{
    Vector3 fwd = transform.TransformDirection(Vector3.forward);

    if (Physics.Raycast(transform.position, fwd, 10))
        Debug.Log("Something in front");
}

现在,我试图找出是否只有一个特定的对象,例如在层次结构中名为Police的另一个头像:

public class CharAnim : MonoBehaviour
{

  police = GameObject.Find("Police");

  void Start()
  {
      Vector3 fwd = transform.TransformDirection(Vector3.forward);

      if (Physics.Raycast(transform.position, fwd, 10))
          Debug.Log("Something in front");
  }

}

但是,从文档中,我无法看到是否可以使用此police变量通过光线投射检测它,测量它的距离等...

我该如何实现?

2 个答案:

答案 0 :(得分:2)

RaycastHit hit;

if (Physics.Raycast(transform.position, fwd, hit,10) && hit.collider.gameObject.tag == "police" )
{
// do stuff here
}

请注意,您需要从编辑器设置gameObject的标记。你也可以使用gameObject.name。

答案 1 :(得分:2)

最后一个答案没有考虑到事情实际上可以阻止光线投射,甚至到达您想要的对象。

您必须首先提供要检测自定义layer的对象。

然后你必须拍摄一张光线投射,它将穿透忽略所有图层,除了所需的图层,如下所示:

请注意:此示例假定您使用了自定义图层#9

public function __construct($host, $port,
                            $user, $password,
                            $vhost="/",$insist=false,
                            $login_method="AMQPLAIN",
                            $login_response=null,
                            $locale="en_US",
                            $connection_timeout = 3,
                            $read_write_timeout = 3,
                            $context = null)

除非他们已经真正解决了问题,否则你真的不应该将答案标记为已被接受,因为标记为已接受的答案的问题会得到那些本来可能能够为你解决问题的人的关注。