Unity3D判断角色对敌人是否可见

 

在编写敌人AI的状态机时

经常需要判断角色对敌人来说是不是可见的

如果是可见的,则做出追击或者攻击动作

如果是不可见的,则保持idle或者巡逻状态

 

判断是否可见

包括两个步骤

1.地方角色的视见向量和规范化向量之间的夹角

以此确定两者间的可见性。

如果该夹角小于敌军角色的视域角

则玩家位于地方角色前方

且二者间处于可见状态

2.检测两者之间是否存在障碍物

如:玩家角色虽然在敌人前方,但两人如果之间隔了一面墙

这种情况也不能算作两者可见

 

public float FieldOfView;

private bool HaveLineSightToPlayer(Transform Player) {
    float Angle = Mathf.Abs(Vector3.Angle(transform.forward,(Player.position-transform.position).normalized));
    if (Angle > FieldOfView) return false;
    if (Physics.Linecast(transform.position, Player.position, SightMask)) return false;
    return true;
    }

posted on 2017-09-15 16:09  Lumious  阅读(1277)  评论(0编辑  收藏  举报

导航