|
|
- --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
|