Raycast无法检测到对撞机

时间:2016-03-29 22:47:38

标签: c# unity3d raycasting

我的子弹无法检测到对撞机,而光线投射无法检测到碰撞。这很奇怪,因为在我的地形范围内(无论是在上面还是在上面)拍摄子弹时,在控制台上获取信息的唯一方法是,我立即在我的控制台上打印“Terrain”,但是光线投射无法检测到任何其他对象和打印任何东西,如果我走出范围并射击球体,则不会打印任何内容。除了子弹外,我游戏中的所有东西都有一个对撞机。

谢谢!

这是我的游戏game的图片。

void Update () {
    if (Input.GetKey(KeyCode.KeypadEnter) && counter > delayTime)
    {
        Instantiate(bullet, transform.position, transform.rotation);
        counter = 0;
        RaycastHit hit;

         if (Physics.Raycast(transform.position, -Vector3.up, out hit))
        {
               Debug.Log(hit.collider.gameObject.name); 
        }
    }

    counter += Time.deltaTime;
}

1 个答案:

答案 0 :(得分:0)

在您的子弹预制件上添加对撞机。您应该在敌人或其他可破坏物体上贴上标签。使用OnCollisionEnter或OnTriggerEnter。对于敌人,我更喜欢在大多数情况下使用OnCollisionEnter。

 void OnCollisionEnter(Collision collision){//Assuming bullet touches enemy

   if(collision.tag=="Bullet"){

    // insert your code here for damage
  }
  }

就您的RayCast而言,我会做这样的事情:

   Vector3 fwd = transform.TransformDirection(Vector3.forward) * 3; // length of ray 
   //forward-facing. ( * 3 is equal to 3 units/Meters )
    Debug.DrawRay(transform.position, fwd, Color.red); // Can Make any color 

        if (Physics.Raycast(transform.position, fwd, out hit))
        {


            print(hit.collider.gameObject.name);

        }

看,我使用碰撞检测的原因是,只要标记了敌人,您就可以进行接触。否则,您的射线广播应该会检测到接触,并且您仍然可以设置碰撞伤害或其他任何原因。