protected override bool TestTrigger(AbstractTrigger absTtrigger) { //如果当前类型不是视觉直接返回false看不到 if (absTtrigger.triggerType != TriggerType.Sight) { return(false); } var tempTrigger = absTtrigger as SightTrigger; var dir = tempTrigger.recivePos.position - sendPos.position; bool result = dir.magnitude < sightDistance; //角度检测 if (enableAngle) { bool b1 = Vector3.Angle(transform.forward, dir) < sightAngle / 2; result = result && b1; } //遮挡检测 RaycastHit hit; if (enableRay) { //判断射中的物体是不是触发器物体 bool b2 = Physics.Raycast(sendPos.position, dir, out hit, sightDistance) && hit.collider.gameObject == tempTrigger.gameObject; result = result && b2; } return(result); }
/// <summary> /// 添加触发器 /// </summary> /// <param name="absTrigger"></param> public void AddTrigger(AbstractTrigger absTrigger) { listTrigger.Add(absTrigger); }
/// <summary> /// 检测触发器是否被感知 /// </summary> /// <param name="absTtrigger"></param> abstract protected bool TestTrigger(AbstractTrigger absTtrigger);