射击游戏中常见的射线检测是这样:
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 1000,3))
{
Debug.Log(hit.collider.name);
}
}
Physics.Raycast()有很多重载,常用的就是这个:(射线Ray,out 碰撞信息hit,射线距离distance,整型射线检测层级LayerMask)。
需要注意的是层级是用二进制表示的,二进制的每一位对应的就是该层级,层为1则表示受检测,为0则表示不受射线检测,比如:层级5,二进制为101,则表示只有第0和3层级的游戏对象受该射线的检测,其它层均不受检测,如果受射线检测的对象受到不受射线检测对象的遮挡,射线是可以穿透检测的。
用于爆炸的球形射线检测(Physics.OverlapSphere()):
int radius = 3;
Collider[] hits = Physics.OverlapSphere(this.transform.position, radius, LayerMask.NameToLayer("layername"));
if(hits.Length >0)
{
for (int i = 0; i < hits.Length; i++)
{
Debug.Log("检测到物体" + hits[i].name);
}
}
//画出球形检测范围
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(this.transform.position, 3);
}