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