local PlayerHeadView = {} function PlayerHeadView:New(gameObject) local b = {} b.gameObject = gameObject b.transform = gameObject.transform setmetatable(b, { __index = PlayerHeadView }) return b end --初始化组件(用于子类重写) function PlayerHeadView:InitComponent() self.spLoader = SpriteLoader.New() self.icon = Util.GetGameObject(self.gameObject, "icon") self.frame = Util.GetGameObject(self.gameObject, "frame") self.lvRoot = Util.GetGameObject(self.gameObject, "lvRoot") self.lv = Util.GetGameObject(self.gameObject, "lvRoot/lv") self.orderLayer = 0 self.effectScale = 1 self.effectScaleFix = 1 end --绑定事件(用于子类重写) function PlayerHeadView:BindEvent() end --添加事件监听(用于子类重写) function PlayerHeadView:AddListener() end --移除事件监听(用于子类重写) function PlayerHeadView:RemoveListener() end --界面打开时调用(用于子类重写) function PlayerHeadView:OnOpen(...) self:Reset() end --界面打开或者重新打开后,界面刷新时调用(用于子类重写) function PlayerHeadView:OnShow() end --界面关闭时调用(用于子类重写) function PlayerHeadView:OnClose() self:Reset() self.spLoader:Destroy() end -- 设置头像 function PlayerHeadView:SetHead(headId) self.icon:SetActive(true) self.icon:GetComponent("Image").sprite = GetPlayerHeadSprite(self.spLoader, headId) end -- 设置头像框 function PlayerHeadView:SetFrame(frameId) self.frame:SetActive(true) self.frame:GetComponent("Image").sprite = GetPlayerHeadFrameSprite(self.spLoader, frameId) -- 检测特效 self:UnLoadFrameEffect() self:LoadFrameEffect(frameId) end -- 设置等级 function PlayerHeadView:SetLevel(level) self.lvRoot:SetActive(true) self.lv:GetComponent("Text").text = level end -- 设置等级 function PlayerHeadView:SetGray(isGray) Util.SetGray(self.gameObject, isGray) if self.frameEffect then self.frameEffect:SetActive(not isGray) end end function PlayerHeadView:Reset() Util.SetGray(self.gameObject, false) self.icon:SetActive(false) self.frame:SetActive(false) self.lvRoot:SetActive(false) -- 卸载头像框特效 self:UnLoadFrameEffect() -- end -- 设置节点父节点 function PlayerHeadView:SetParent(parent) if self.transform then self.transform:SetParent(parent.transform) self.parent = parent.transform end end -- 设置节点位置 function PlayerHeadView:SetPosition(v3) if not v3 then return end if self.transform then self.transform.localPosition = v3 end end -- 设置节点缩放值 function PlayerHeadView:SetScale(v3) if type(v3) == "number" then v3 = Vector3.one * v3 end if not v3 then return end if self.transform then self.transform.localScale = v3 end end function PlayerHeadView:SetEffectScale(scale) if self.frameEffect then local targetScale = scale / self.effectScale self.effectScale = scale Util.SetParticleScale(self.frameEffect, targetScale) end end -- 头像框特效相关 function PlayerHeadView:LoadFrameEffect(frameId) local name, scale, pos = GetPlayerHeadFrameEffect(frameId) if name then self.frameEffectName = name self.frameEffect = poolManager:LoadAsset(self.frameEffectName, PoolManager.AssetType.GameObject) self.frameEffect.transform:SetParent(self.frame.transform) self.frameEffect.transform.localPosition = pos self.frameEffect.transform.localScale = Vector3.one self.effectScaleFix = scale Util.SetParticleScale(self.frameEffect, self.effectScaleFix) -- 设置修正大小 end end function PlayerHeadView:UnLoadFrameEffect() if self.frameEffectName and self.frameEffect then self:SetLayer(0) self:SetEffectScale(1) Util.SetParticleScale(self.frameEffect, 1/self.effectScaleFix) -- 还原修正大小 poolManager:UnLoadAsset(self.frameEffectName, self.frameEffect, PoolManager.AssetType.GameObject) self.frameEffectName = nil self.frameEffect = nil end end function PlayerHeadView:SetLayer(orderLayer) if self.frameEffect then Util.AddParticleSortLayer(self.frameEffect, orderLayer - self.orderLayer) self.orderLayer = orderLayer end end function PlayerHeadView:Recycle() SubUIManager.Close(self) end return PlayerHeadView