Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 添加触发器
 /// </summary>
 /// <param name="absTrigger"></param>
 public void AddTrigger(AbstractTrigger absTrigger)
 {
     listTrigger.Add(absTrigger);
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 检测触发器是否被感知
 /// </summary>
 /// <param name="absTtrigger"></param>
 abstract protected bool TestTrigger(AbstractTrigger absTtrigger);