--ui挂接模型处理 UIModelClassByRT = UIModelClassByRT or BaseClass(UIModelCommon) --当前正在使用的rendertexture列表 UIModelClassByRT.using_render_texture_list = {} UIModelClassByRT.RT_Material = { none = false, gray = ShaderTools.gray_mat, render_texture = ShaderTools.render_texture_mat } UIModelClassByRT.Role_Position_Offset = { --key为职业 value 为偏移 [1] = Vector3(0, 0 , 0), [2] = Vector3(0, 0 , 0), [3] = Vector3(0, 0 , 25), [4] = Vector3(0, 0 , 0), } function UIModelClassByRT:__init(go,parent,model_data) self.model_type = UIModelCommon.ModelType.RT self.curr_index = UIModelClassByRT.GetRenderTextureIndex() self.pos_x = 0 self.gameObject.transform.position = Vector3(self.curr_index * 200,0, 10000) self.model_data = model_data self.show_shadow = model_data.show_shadow self.part_bloom = false self.bg_sprite = false self:SetData(parent,model_data) self:AddEvents() end function UIModelClassByRT.GetRenderTextureIndex() local index = 1 while (UIModelClassByRT.using_render_texture_list[index]) do index = index + 1 end UIModelClassByRT.using_render_texture_list[index] = true return index end function UIModelClassByRT:__delete() UIModelClassByRT.using_render_texture_list[self.curr_index] = nil ------------------- 部分泛光新增 if self.part_bloom then self.part_bloom:ReleaseTempRes() self.part_bloom = nil end if self.part_bloom_rt then self.part_bloom_rt:Release() destroy(self.part_bloom_rt) self.part_bloom_rt = nil end ------------------ if self.rt then UnityEngine.RenderTexture.ReleaseTemporary(self.rt) -- self.rt:Release() -- destroy(self.rt) self.rt = nil end if self.bg_sprite then destroy(self.bg_sprite) self.bg_sprite = false end end function UIModelClassByRT:SetData(parent,model_data) self.camera = self.gameObject.transform:Find("Camera"):GetComponent("Camera") local role_con = self.gameObject.transform:Find("role") UIModelCommon.LoadRole(self, model_data, role_con) self.using_sprite_bg = model_data.using_sprite_bg if self.using_sprite_bg then local ab_name = self.using_sprite_bg.ab_name local asset_name = self.using_sprite_bg.asset_name local position = self.using_sprite_bg.position local scale = self.using_sprite_bg.scale local rotation = self.using_sprite_bg.rotation if ab_name and asset_name and position and scale and rotation and self.gameObject then if not self.bg_sprite then self.bg_sprite = UiFactory.createChild(self.gameObject.transform:Find("role"), UIType.SpriteRenderer, "bg_sprite") end self.bg_sprite.transform.localPosition = position self.bg_sprite.transform.localScale = scale self.bg_sprite.transform.localRotation = Quaternion.Euler(rotation) lua_resM:loadSprite(self, ab_name, asset_name, function(objs) if self._use_delete_method then return end if objs[0] then self.bg_sprite:GetComponent("SpriteRenderer").sprite = objs[0] end end) end end self.size = self.size or Vector2(600,360) if not self.renderSize then self.renderSize = self.size end --高配机优化rt质量 local temp_x, temp_y = self.size.x, self.size.y if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then local is_x_longer = true local max_size = self.size.x if self.size.x < self.size.y then is_x_longer = false max_size = self.size.y end if max_size > 1024 then --max_size = 2048 内存占用太大了 max_size = max_size elseif max_size > 512 then max_size = 1024 else max_size = 512 end if self.model_data and self.model_data.use_hight_quality then max_size = max_size > 1024 and max_size or 1024 end temp_x = is_x_longer and max_size or max_size/self.size.y*self.size.x temp_y = not is_x_longer and max_size or max_size/self.size.x*self.size.y end if not self.rt then self.rt = UnityEngine.RenderTexture.GetTemporary(temp_x, temp_y, 24) end self.camera.targetTexture = self.rt local raw_image = parent:GetComponent("RawImage") raw_image.texture = self.rt parent.transform.sizeDelta = self.size if not self.using_material or not UIModelClassByRT.RT_Material[self.using_material] then raw_image.material = nil else raw_image.material = UIModelClassByRT.RT_Material[self.using_material] end -- local function callBack2(texs) -- if not texs or not texs[0] or self._use_delete_method then return end -- camera.targetTexture = texs[0] -- if renderSize then -- if renderSize.x ~= texs[0].width or renderSize.y ~= texs[0].height then -- texs[0].width = renderSize.x -- texs[0].height = renderSize.y -- camera:Render() -- end -- end -- parent:GetComponent("RawImage").texture = texs[0] -- size = size or Vector2(600,360) -- parent.sizeDelta = size -- -- parent:GetComponent("RawImage"):SetNativeSize() -- end -- LuaResManager:getInstance():LoadRenderTexture(self, "common_asset", "roleModeRenderTexture"..self.curr_index, callBack2) end function UIModelClassByRT:AddEvents() UIModelCommon.AddEvents(self) end --模型摄像机默认的一些参数 UIModelClassByRT.CAMERA_DEFAULT_ARGS = { Rotate = 10, Height = 210, } function UIModelClassByRT:SetCameraArgs(use_default) local camera_args = { orthographic = true, fieldOfView = 25, orthographicSize = 1.6, localPosition = Vector3(0,UIModelClassByRT.CAMERA_DEFAULT_ARGS.Height,0), localRotation = Vector3(UIModelClassByRT.CAMERA_DEFAULT_ARGS.Rotate,0,0), } if self.position and self.show_shadow and not use_default then camera_args.localPosition = self.position end if self.camera_args and not use_default then if self.camera_args.orthographic and self.camera_args.orthographicSize then camera_args.orthographic = self.camera_args.orthographic camera_args.orthographicSize = self.camera_args.orthographicSize else camera_args.orthographic = self.camera_args.orthographic or false camera_args.fieldOfView = self.camera_args.fieldOfView or camera_args.fieldOfView end camera_args.localPosition = self.camera_args.localPosition or camera_args.localPosition camera_args.localRotation = self.camera_args.localRotation or camera_args.localRotation end if self.camera then self.camera.orthographic = camera_args.orthographic if camera_args.orthographic then self.camera.orthographicSize = camera_args.orthographicSize else self.camera.fieldOfView = camera_args.fieldOfView end self.camera.farClipPlane = 250 self.camera.gameObject.transform.localPosition = camera_args.localPosition self.camera.gameObject.transform.localRotation = Quaternion.Euler(camera_args.localRotation) end -- 泛光摄像机的位置要与父节点保持一致 -- if self.bloom_camera then -- self.bloom_camera.orthographic = camera_args.orthographic -- self.bloom_camera.fieldOfView = camera_args.fieldOfView -- end end -- 创建角色摄像机部分泛光效果 function UIModelClassByRT:CreateRoleBloomEffect(camera, bloom_camera) -- camera = camera or self.camera -- bloom_camera = bloom_camera or self.bloom_camera -- if not camera or not bloom_camera then return end -- if self.part_bloom then return end -- self.part_bloom = camera.gameObject:AddComponent(typeof(RoleCameraBloom)) -- self.change_render_shader = bloom_camera.gameObject:AddComponent(typeof(ChangeShaderRender)) -- self.part_bloom_rt = UnityEngine.RenderTexture.New(self.renderSize.x, self.renderSize.y, 25) -- if self.part_bloom and self.change_render_shader then -- -- 生成模糊shader材质 -- self.part_bloom.bloomMaterial = ShaderTools.GetBloomEffectNewMaterial() -- -- 添加替换渲染的shader -- self.change_render_shader.target_shader = ShaderTools.GetBloomClipShader() -- -- 添加一些阈值相关的参数 -- self.part_bloom.iterations = 4 -- self.part_bloom.threshold = 0.2 -- -- C#:public void SetBloomCameraData(Camera camera, RenderTexture rt, ChangeShaderRender change_shader_render) -- self.part_bloom:SetBloomCameraData(bloom_camera, self.part_bloom_rt, self.change_render_shader) -- print("Saber:UIModelClassByRT [start:832] ------------------------------------------") -- end end