--进度条 ProgressBarComponent = ProgressBarComponent or BaseClass(BaseComponent) function ProgressBarComponent:__init(parent, max_value, curr_value, width, height, ab_name, bg_img_name, front_img_name, rect_off, font_size, show_ani) self:InitData(max_value, curr_value, width, height, ab_name, bg_img_name, front_img_name, rect_off, font_size, show_ani) self:CreateGameObject(UIType.ProgressBar2) end function ProgressBarComponent:InitData(max_value, curr_value, width, height, ab_name, bg_img_name, front_img_name, rect_off, font_size, show_ani) self.max_value = max_value or 100 --最大值 self.curr_value = curr_value or 1 --当前值 self.width = width or 64 --背景图片宽度 self.height = height or 10 --背景图片高度 self.ab_name = ab_name or "uiComponent_asset" self.bg_img_name = bg_img_name --背景图片名字 统一放在uicomponent里 self.front_img_name = front_img_name --前景图片名字 self.rect_off = rect_off or {x = 2, y = 2}--前景与背景的偏移量 self.font_size = font_size --字体大小 默认不显示 self.show_ani = show_ani --是否显示动画 end function ProgressBarComponent:LoadSuccess() self.bg_img = self.gameObject:GetComponent("Image") self.front_bg = self:GetChild("front_img") self.front_bg_img = self:GetChild("front_img"):GetComponent(typeof(UnityEngine.UI.Image)) self.middle_bg_obj = self:GetChild("middle_img").gameObject self.middle_bg_img = self.middle_bg_obj:GetComponent(typeof(UnityEngine.UI.Image)) if self.bg_img_name then lua_resM:setImageSprite(self, self.bg_img, self.ab_name, self.bg_img_name) lua_resM:setImageSprite(self, self.front_bg:GetComponent("Image"), self.ab_name, self.front_img_name) end SetSizeDelta(self.transform, self.width, self.height) self.front_bg.sizeDelta = Vector2(self.width - 2 * self.rect_off.x, self.height - self.rect_off.y * 2) -- self.front_bg.localPosition = Vector3(self.rect_off.x - self.width / 2, -self.rect_off.y + self.height / 2, 0) self.front_bg.anchoredPosition = Vector3(self.rect_off.x, -self.rect_off.y, 0) self.transform.localPosition = Vector3(3, 0, 0) self:SetValue() end function ProgressBarComponent:SetValue(value, max_value, show_ani) self.curr_value = value or self.curr_value or 0 self.max_value = max_value or self.max_value or 100 self.curr_value = math.min(self.curr_value, self.max_value) local rate = self.curr_value / self.max_value self.front_bg_img.fillAmount = rate if self.effectCon then local x = (self.front_bg.sizeDelta.x - 16) * rate + 8 self.effectCon.localPosition = Vector2(x, 0) end if self.roleEmptyCon then self.roleEmptyCon.localPosition = Vector2(self.front_bg.sizeDelta.x * rate, 0) end if self.imageCon then self.imageCon.anchoredPosition = Vector2(self.front_bg.sizeDelta.x * rate + 59, -38) end local can_show_anim = show_ani or false if self.middle_bg_obj and self.middle_bg_obj.activeSelf ~= can_show_anim then self.middle_bg_obj:SetActive(can_show_anim) end if can_show_anim then if self.tween_hp_id then TweenLite.Stop(self.tween_hp_id) self.tween_hp_id = nil end self.tween_hp_id = TweenLite.to(self, self.middle_bg_img, TweenLite.UiAnimationType.FILLAMOUNT, rate, 0.45) end end function ProgressBarComponent:SetFrontImageStyle(front_img_name) self.front_img_name = front_img_name lua_resM:setImageSprite(self, self.front_bg:GetComponent("Image"), self.ab_name, self.front_img_name) end function ProgressBarComponent:__delete() --destroy(self.gameObject) end function ProgressBarComponent:GetImageCon() if not self.imageCon then self.imageCon = UiFactory.createChild(self.front_bg, UIType.Image3, "imageCon").transform self.imageCon.pivot = Vector2(1, 0) self.imageCon.anchorMin = Vector2(0, 1) self.imageCon.anchorMax = Vector2(0, 1) self.imageCon.anchoredPosition = Vector2(59, -38) end return self.imageCon end