1、碰撞检测的条件   

     (1)、碰撞的双方都要有碰撞器组件(比如子弹和敌人都要有碰撞组件)。

    (2)、要撞其他游戏对象的游戏对象本身要有刚体组件(子弹必须有刚体组件,把子弹的使用重力去掉,敌人也要有刚体组件)。

     (3)、碰撞的脚本要挂载在运动的物体上(将脚本挂载子弹上)。

 

2、碰撞检测的方法

       (1)、voidOnCollisionEnter(Collision col)

             参数:col—被碰撞的带有碰撞器的游戏对象

             含义:当碰撞进入时,执行该方法。

       (2)、void OnCollisionStay(Collision col)

               参数:col—被碰撞的带有碰撞器的游戏对象

             含义:当碰撞一直持续时,执行该方法。

        (3)、voidOnCollisionExit(Collision col)

             参数:col—被碰撞的带有碰撞器的游戏对象

             含义:当碰撞退出时,执行该方法。


     1、触发检测的条件

(1)、碰撞的双方都要有碰撞器组件(比如子弹和敌人都要有碰撞组件)。

  (2)、要撞其他游戏对象的游戏对象本身要有刚体组件(子弹必须有刚体组件,把子弹的使用重力去掉,敌人不一定有刚体组件)。

   (3)、碰撞的脚本要挂载在运动的物体上(将脚本挂载子弹上)。

   (4)、必须把运动物体身上的isTrigger属性勾上(将子弹的isTrigger勾上)。

2、触发检测的方法

       (1)、void OnTriggerEnter(Collidercol)

             参数:col—被触发的带有碰撞器的游戏对象

             含义:当触发进入时,执行该方法。

       (2)、void OnTriggerStay(Collider col)

               参数:col—被触发的带有碰撞器的游戏对象

             含义:当触发一直持续时,执行该方法。

        (3)、void OnTriggerExit(Collidercol)

             参数:col—被触发的带有碰撞器的游戏对象

             含义:当触发退出时,执行该方法。

三: 球形检测:

         吃道具,收集金币使用碰撞检测
吸铁石作用效果使用OverLerpSphere方法

using UnityEngine;
 using System.Collections;

 public class Test1 : MonoBehaviour {

     public bool magnetState = false;

     public float time;

     // Use this for initialization
     void Start () {
     
     }
     
     // Update is called once per frame
     void Update () {

         if(magnetState == true)
         {
             time += Time.deltaTime;
             Collider[] cols = Physics.OverlapSphere(this.transform.position, 5);
             for (int i = 0; i < cols.Length ; i ++)
             {
                 Coins temp = cols[i].GetComponent<Coins>();
                 if(temp != null)
                 {
                     temp.startMoveToPlayer = true;
                 }
             }
             if(time > 2f)
             {
                 magnetState = false;
                 time = 0;
             }
         }
     
     }

     void OnTriggerEnter(Collider col)
     {
         if(col.CompareTag("Magnet"))
         {
             Debug.Log("获得吸铁石道具");
             magnetState = true;
         }
     }

 }



四:线性检测:

        线性检测的方法是:

Physics.Raycast(ray,out hit)  
                                            Physics.Raycast(起始位置,射线方向,out hit)


           RaycastHit hit;// 获取从Raycast 函数中得到的信息反馈的结构
             //射线碰撞检测 hit为射线检测到的 带有碰撞器的物体
             if(Physics.Raycast(ray,out hit))
             {
                 //point就是射线撞到的点的位置信息
                   vector3  pos= hit.point;  //      在世界空间中,射线碰到的碰到碰撞器的碰撞点
             }