

目前编写了两个类型的区域:
CylinderArea:圆柱形区域ConvexArea:多边形区域

Radius:圆柱的半径Height:圆柱的高度在Hierarchy层级窗口新建空节点,作为凸边形区域的顶点:

将以上顶点添加到Vertex Points顶点数组中:

Height:凸边形区域的高度

每个顶点的Position Handle可以拖动编辑。
抽象接口IsInArea,用于判断目标点是否在区域中,各类型区域都有各自的实现。
public abstract bool IsInArea(Vector3 targetPos);
AreaListener用于模拟Trigger的OnEnter、OnStay、OnExit事件监听。
例如监听物体target是否进入、停留、退出该区域:
public class Example : MonoBehaviour
{
public Transform target;
void Start()
{
GetComponent<ConvexArea>().Listen(target)
.OnEnter(() => Debug.Log("进入区域"))
.OnStay(() => Debug.Log("停留在该区域"))
.OnExit(() => Debug.Log("退出区域"));
}
}
target停留在区域中时
OnStay函数一直调用。