local SimpleSkillSelector = require("Script.SimpleSkill.Selector.SimpleSkillSelector") local SimpleSkillSelector_CircleRange = LuaClass("SimpleSkillSelector_CircleRange", SimpleSkillSelector) function SimpleSkillSelector_CircleRange:ctor() SimpleSkillSelector_CircleRange.super.ctor(self) end function SimpleSkillSelector_CircleRange:InitSelectorFromData(SelectorData, CasterPawn) SimpleSkillSelector.InitSelectorFromData(self, SelectorData, CasterPawn) end --- 子类实现 function SimpleSkillSelector_CircleRange:ActivateSelector() SimpleSkillSelector.ActivateSelector(self) UE.Log("[SimpleSkillSelector_CircleRange] activated") self:GetPawnsInCircleRange() end function SimpleSkillSelector_CircleRange:GetPawnsInCircleRange() local Radius = self.Param_Float local Forward = self.CasterPawn:GetActorForwardVector() local SphereLoc = VectorHelper.Add(self.CasterPawn:K2_GetActorLocation(), VectorHelper.MulNumber(KismetMathLibrary.Normal(Forward), self.ForwardOffset)) --减去人物半高才能贴到地面 SphereLoc.Z = SphereLoc.Z - 88.0 local ObjectTypes = {} local ActorClassFilter = UE.LoadClass(BPClassPath.MonsterBase) local ActorsToIgnore = self:GetIgnoredActors() local RetVal, OutActors = KismetSystemLibrary.SphereOverlapActors(self.CasterPawn, SphereLoc, Radius, ObjectTypes, ActorClassFilter, ActorsToIgnore) if GlobalConfigs.OpenDebug then UnrealNetwork.CallUnrealRPC_Multicast(self.CasterPawn, "DrawDebugSphere", VectorHelper.ToLuaTable(SphereLoc), {1,0,0,1}, Radius) end if RetVal then local RetLimitNum = self.LimitNum > 0 and (self.LimitNum > #OutActors and #OutActors or self.LimitNum) or #OutActors for i = 1, RetLimitNum, 1 do table.insert(self.TargetPawns, OutActors[i]) end end end return SimpleSkillSelector_CircleRange;