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; }