---@class BP_TrackWidegt_C:AActor ---@field Widget UWidgetComponent ---@field DefaultSceneRoot USceneComponent ---@field TargetPlayerKey int64 --Edit Below-- ---@type BP_TrackWidegt_C local BP_TrackWidegt = { SetVisHandle = nil; bIsVis = false; Dis = -1; LocalPawnPos = {X = 0., Y = 0., Z = 0.}; TickFrequency = 25; }; function BP_TrackWidegt:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); if UGCGameSystem.IsServer() then else -- self:GetWidget():SetVisibility(ESlateVisibility.Collapsed) self:AutoSetVis() self:ClientUpdatePlayerKey(self.TargetPlayerKey) UGCEventSystem.SetTimerLoop(self, self.CustomReceiveTick, 1. / self.TickFrequency) end end --[[ function BP_TrackWidegt:ReceiveEndPlay() self.SuperClass.ReceiveEndPlay(self); end --]] --[[ function BP_TrackWidegt:GetReplicatedProperties() return end --]] --[[ function BP_TrackWidegt:GetAvailableServerRPCs() return end --]] function BP_TrackWidegt:CustomReceiveTick() if self.bIsVis then local LocalPawn = UGCSystemLibrary.GetLocalPlayerPawn() local TrackPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(self.TargetPlayerKey) if UE.IsValid(LocalPawn) then self.LocalPawnPos = LocalPawn:K2_GetActorLocation() end if UE.IsValid(TrackPawn) then self:K2_SetActorLocation(TrackPawn:K2_GetActorLocation()) end self.Dis = VectorHelper.Length(VectorHelper.Sub(self:K2_GetActorLocation(), self.LocalPawnPos)) self:GetWidget():UpdateDis(self.Dis) end end function BP_TrackWidegt:SetTrackPlayerKey(InPlayerKey) UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientUpdatePlayerKey", InPlayerKey) end function BP_TrackWidegt:ClientUpdatePlayerKey(NewPlayerKey) if self.TargetPlayerKey ~= NewPlayerKey then self.TargetPlayerKey = NewPlayerKey -- 刷新显示状态 self:AutoSetVis() if self.TargetPlayerKey == nil or self.TargetPlayerKey < 0 then if self.SetVisHandle == nil then self.SetVisHandle = UGCEventSystem.SetTimerLoop(self, self.AutoSetVis, 0.3) end else if self.SetVisHandle then UGCEventSystem.StopTimer(self.SetVisHandle) self.SetVisHandle = nil end end end end function BP_TrackWidegt:GetWidget() return self.Widget:GetUserWidgetObject() end function BP_TrackWidegt:AutoSetVis() local NewVis = false if self.TargetPlayerKey > 0 then local TrackPlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(self.TargetPlayerKey) local LocalPlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(UGCSystemLibrary.GetLocalPlayerKey()) local TargetPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(self.TargetPlayerKey) if TargetPawn and TrackPlayerTeamID ~= LocalPlayerTeamID then NewVis = true end end if self.bIsVis ~= NewVis then -- 设置UI可视性 self:GetWidget():SetVis(NewVis) self.bIsVis = NewVis end end function BP_TrackWidegt:OnRep_TargetPlayerKey() self:ClientUpdatePlayerKey(self.TargetPlayerKey) end return BP_TrackWidegt;