使用 Physics.CheckSphere 函数通过检测指定点周围是否有碰撞体,可以传入一个位置向量和一个半径值,如果需要对指定层级进行检测可以传入LayerMask 表示需要检测的碰撞体的层。结果会返回一个bool值,表示该位置是否有碰撞体与之重叠。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CheckRange : MonoBehaviour
{
public float rangeRadius;
public LayerMask layerMask;
void Update()
{
if (CheckPlayerInTargetRange(transform))
{
Debug.Log("在范围内");
}
}
/// <summary>
/// 检查角色是否在目标范围内
/// </summary>
/// <returns>目标点</returns>
bool CheckPlayerInTargetRange(Transform targetPoint)
{
return Physics.CheckSphere(targetPoint.position, rangeRadius,layerMask);
}
void OnDrawGizmos()
{
// 绘制范围,使用绿色半透明线框
Gizmos.color = new Color(0f, 1f, 0.5f, 0.5f);
Gizmos.DrawWireSphere(transform.position, rangeRadius);
}
}
运行效果