问题
- 如何判定玩家在怪物可见角度位置
- 如何判定玩家在怪物可见距离
- 当有障碍物遮挡时如何解决
解决思路
- 角度位置用怪物的前方向与看向玩家的角度大小判断
- 可见距离可以用Vector3.Distance方法解决,或者用射线检测解决
- 障碍物判定可以用射线检测tag解决
代码部分
//angle可视角度(二倍) distance 观测距离
protected virtual void Vision(int angle,int distance) //视觉模块
{
RaycastHit hit;
if (Vector3.Angle(Player.instance.transform.position - transform.position, transform.forward) <= angle)
{
Debug.DrawRay(transform.position + Vector3.up, Player.instance.transform.position - transform.position, Color.green, distance);
if (Physics.Raycast(transform.position + Vector3.up, Player.instance.transform.position - transform.position, out hit, distance))
{
if (hit.collider.tag == "Player" && Vector3.Distance(transform.position, Player.instance.transform.position) < distance)
{
//观测到玩家后的行为
}
}
}
使用方法
放在Update下,添加角度和距离参数即可。