unity 范围检测,以自身为中心画个圆,将范围内的对象添加进列表,执行逻辑(扣除血量,改变颜色等)后,将其从列表删除
时间: 2024-04-29 14:24:32 浏览: 13
。可以通过以下代码实现:
```
using UnityEngine;
using System.Collections.Generic;
public class RangeDetection : MonoBehaviour
{
public float radius = 5f;
public LayerMask layerMask;
public List<GameObject> targets = new List<GameObject>();
private void Update()
{
// 检测范围内的对象
Collider[] colliders = Physics.OverlapSphere(transform.position, radius, layerMask);
// 将对象添加到列表
foreach (Collider collider in colliders)
{
if (!targets.Contains(collider.gameObject))
{
targets.Add(collider.gameObject);
}
}
// 处理列表中的对象
foreach (GameObject target in targets)
{
// 执行逻辑
// 从列表删除对象
targets.Remove(target);
}
}
private void OnDrawGizmosSelected()
{
// 绘制检测范围
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(transform.position, radius);
}
}
```
在该脚本中,首先通过 `Physics.OverlapSphere()` 检测范围内的对象,并将其添加到 `targets` 列表中。然后遍历列表,执行逻辑后将对象从列表中删除。在 `OnDrawGizmosSelected()` 方法中,绘制范围检测的圆形区域以便调试。注意,在遍历列表时不能直接使用 `targets.ForEach()`,因为在执行逻辑时可能会改变列表中的元素,导致遍历出错。