问题

  • 如何判定玩家在怪物可见角度位置
  • 如何判定玩家在怪物可见距离
  • 当有障碍物遮挡时如何解决

解决思路

  1. 角度位置用怪物的前方向与看向玩家的角度大小判断
  2. 可见距离可以用Vector3.Distance方法解决,或者用射线检测解决
  3. 障碍物判定可以用射线检测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下,添加角度和距离参数即可。