Exemple #1
0
        /// <summary>
        /// aoe类型的buff需要检测更新生效的actor
        /// </summary>
        public void UpdateEffectActorList()
        {
            if (mBuffCfg.mEffectRangeType != EffectRangeType.Aoe)
            {
                return;
            }
            //检查上一次的受击者是否离开范围,并且移除
            foreach (var actor in mEfxActors)
            {
                if (!IsInEfxRange(actor.CacheTransform.position))
                {
                    actor.GetBuffCmpt().RemoveBuff(this);
                }
            }

            ActorSide ownActorSide = OwnActor.GetActorSide();

            //todo 包围盒子配置
            var halfSize   = new Vector3(mBuffCfg.mEffectRange, 1, mBuffCfg.mEffectRange);
            var overlapBox = Physics.OverlapBox(OwnActor.CacheTransform.position, halfSize, Quaternion.identity, SystemPreset.layer_actor);

            foreach (var collider in overlapBox)
            {
                var targetActor  = collider.GetComponent <GameActor>();
                var sideRelation = Toolkit.GetSideRelation(ownActorSide, targetActor.GetActorSide());

                if (mBuffCfg.IsInEffectRelation(sideRelation))
                {
                    if (!mEfxActors.Contains(targetActor))
                    {
                        AddBuffEffect(targetActor);
                        mEfxActors.Add(targetActor);
                    }
                }
            }
        }