unity3d 相交球OverlapSphere

前言

相交球和射线差不多,但是相交球可以对在相交球范围内的所有碰撞器都发生触碰方法。因此可以用来制作群攻,范围类型的技能判断,也可以配合帧事件来使用

相交球

相交球用Physics.调用,是Physics的一个静态方法,返回碰撞器数组,即当物体碰撞到相交球,以数组碰撞器的形式返回

public static Collider[] OverlapSphere (Vector3 position, float radius, int layerMask);

代码例子

这里写一个脚本放在控制的物体上,当将这个物体碰撞到设置的层级的物体上时,调用方法
第一个参数是相交球初始位置,
第二个是以该位置为球心设置半径范围,
第二个参数是设置层级LayerMask,这里的层级需要自己添加,然后在检视面板上手动设置,这样则只会对是该层级的碰撞器物体产生方法。

并且因为该方法是返回碰撞器数组,因此配合foreach来遍历这个容器,来对他们做具体的实现。

using UnityEngine;
using System.Collections;

public class MyHero : MonoBehaviour {

    //设置层级 : 和当前层级物体进行碰撞检测
    public LayerMask _layerMask;
    void Update(){
        //检测在当前位置发射0.5半径大小的球内是否有物体相交
        //检测LayerMask层级上的物体(相同层级)
        Collider[] cs =  Physics.OverlapSphere (transform.position, 0.5f, _layerMask);

        if (cs.Length != 0) {
            foreach (Collider csCell in cs) {
                Debug.Log (csCell.gameObject.name);
            }
        }
    }

    void OnDrawGizmos(){
        Gizmos.color = Color.red;
        Gizmos.DrawSphere (transform.position, 0.5f);
    }
}

可以使用OnDrawGizemos()函数(Gizmos测试制作工具),把相交球画出来

样例图

unity3d 相交球OverlapSphere_第1张图片
这里的蓝色cube里面有一球状物即是相交球的范围

你可能感兴趣的:(unity)