源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

238 lines
8.0 KiB

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