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; // 在世界空间中,射线碰到的碰到碰撞器的碰撞点
}
















