예제 #1
0
        public float _degree;        //角度

        #endregion

        #region override

        public override void OnEnter(BlackBoard blackboard)
        {
            LogEnter();
            EntityFindTargetData data = EventDataFactory.Pop <EntityFindTargetData>();

            data.degree = _degree;
            data.radius = _radius;
            _find_target(blackboard as EntityBlackBoard, data);
            Finish();
        }
예제 #2
0
        public void _find_target(EntityBlackBoard blackboard, EntityFindTargetData data)
        {
            if (data == null || blackboard == null)
            {
                return;
            }

            float      angle  = data.degree / 2;
            BaseEntity entity = blackboard.entity;
            // 1.得到自身的方向和世界坐标
            Vector3 direction     = entity.EntityController.Direction;
            Vector3 worldPosition = entity.EntityController.WroldPosition;

            _targetList = blackboard.GetValue <List <BaseEntity> >(EntityBlackBoardConst.TARGET_LIST);
            int length = EntitesManager.Instance._entites.Count;

            for (int i = 0; i < length; i++)
            {
                BaseEntity tmpEntity = EntitesManager.Instance._entites[i];
                if (tmpEntity == entity)
                {
                    continue;
                }
                // 2.双方之间的距离
                float distance = MathHelper.Distance2D(tmpEntity.EntityController.WroldPosition, worldPosition);
                // 3.距离大于指定长度
                if (distance > data.radius)
                {
                    continue;
                }
                // 4.自己和目标之间的方向
                Vector3 targetDirection = tmpEntity.EntityController.WroldPosition - worldPosition;
                // 5.角度小于指定长度 敌我方向和自身的正前方之间的夹角
                float tmpAngle = MathHelper.GetAngle04(targetDirection, direction);
                if (tmpAngle > angle)
                {
                    continue;
                }
                // 添加到目标
                _targetList.Add(tmpEntity);
                ActionLog.Log("找到目标:{0}", tmpEntity.EntityController.gameObject.name);
            }
        }