源战役客户端
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.

237 regels
8.0 KiB

1 maand geleden
  1. --ui挂接模型处理
  2. UIModelClassByRT = UIModelClassByRT or BaseClass(UIModelCommon)
  3. --当前正在使用的rendertexture列表
  4. UIModelClassByRT.using_render_texture_list = {}
  5. UIModelClassByRT.RT_Material =
  6. {
  7. none = false,
  8. gray = ShaderTools.gray_mat,
  9. render_texture = ShaderTools.render_texture_mat
  10. }
  11. UIModelClassByRT.Role_Position_Offset =
  12. {
  13. --key为职业 value 为偏移
  14. [1] = Vector3(0, 0 , 0),
  15. [2] = Vector3(0, 0 , 0),
  16. [3] = Vector3(0, 0 , 25),
  17. [4] = Vector3(0, 0 , 0),
  18. }
  19. function UIModelClassByRT:__init(go,parent,model_data)
  20. self.model_type = UIModelCommon.ModelType.RT
  21. self.curr_index = UIModelClassByRT.GetRenderTextureIndex()
  22. self.pos_x = 0
  23. self.gameObject.transform.position = Vector3(self.curr_index * 200,0, 10000)
  24. self.model_data = model_data
  25. self.show_shadow = model_data.show_shadow
  26. self.part_bloom = false
  27. self.bg_sprite = false
  28. self:SetData(parent,model_data)
  29. self:AddEvents()
  30. end
  31. function UIModelClassByRT.GetRenderTextureIndex()
  32. local index = 1
  33. while (UIModelClassByRT.using_render_texture_list[index]) do
  34. index = index + 1
  35. end
  36. UIModelClassByRT.using_render_texture_list[index] = true
  37. return index
  38. end
  39. function UIModelClassByRT:__delete()
  40. UIModelClassByRT.using_render_texture_list[self.curr_index] = nil
  41. ------------------- 部分泛光新增
  42. if self.part_bloom then
  43. self.part_bloom:ReleaseTempRes()
  44. self.part_bloom = nil
  45. end
  46. if self.part_bloom_rt then
  47. self.part_bloom_rt:Release()
  48. destroy(self.part_bloom_rt)
  49. self.part_bloom_rt = nil
  50. end
  51. ------------------
  52. if self.rt then
  53. UnityEngine.RenderTexture.ReleaseTemporary(self.rt)
  54. -- self.rt:Release()
  55. -- destroy(self.rt)
  56. self.rt = nil
  57. end
  58. if self.bg_sprite then
  59. destroy(self.bg_sprite)
  60. self.bg_sprite = false
  61. end
  62. end
  63. function UIModelClassByRT:SetData(parent,model_data)
  64. self.camera = self.gameObject.transform:Find("Camera"):GetComponent("Camera")
  65. local role_con = self.gameObject.transform:Find("role")
  66. UIModelCommon.LoadRole(self, model_data, role_con)
  67. self.using_sprite_bg = model_data.using_sprite_bg
  68. if self.using_sprite_bg then
  69. local ab_name = self.using_sprite_bg.ab_name
  70. local asset_name = self.using_sprite_bg.asset_name
  71. local position = self.using_sprite_bg.position
  72. local scale = self.using_sprite_bg.scale
  73. local rotation = self.using_sprite_bg.rotation
  74. if ab_name and asset_name and position and scale and rotation and self.gameObject then
  75. if not self.bg_sprite then
  76. self.bg_sprite = UiFactory.createChild(self.gameObject.transform:Find("role"), UIType.SpriteRenderer, "bg_sprite")
  77. end
  78. self.bg_sprite.transform.localPosition = position
  79. self.bg_sprite.transform.localScale = scale
  80. self.bg_sprite.transform.localRotation = Quaternion.Euler(rotation)
  81. lua_resM:loadSprite(self, ab_name, asset_name, function(objs)
  82. if self._use_delete_method then
  83. return
  84. end
  85. if objs[0] then
  86. self.bg_sprite:GetComponent("SpriteRenderer").sprite = objs[0]
  87. end
  88. end)
  89. end
  90. end
  91. self.size = self.size or Vector2(600,360)
  92. if not self.renderSize then
  93. self.renderSize = self.size
  94. end
  95. --高配机优化rt质量
  96. local temp_x, temp_y = self.size.x, self.size.y
  97. if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
  98. local is_x_longer = true
  99. local max_size = self.size.x
  100. if self.size.x < self.size.y then
  101. is_x_longer = false
  102. max_size = self.size.y
  103. end
  104. if max_size > 1024 then
  105. --max_size = 2048 内存占用太大了
  106. max_size = max_size
  107. elseif max_size > 512 then
  108. max_size = 1024
  109. else
  110. max_size = 512
  111. end
  112. if self.model_data and self.model_data.use_hight_quality then
  113. max_size = max_size > 1024 and max_size or 1024
  114. end
  115. temp_x = is_x_longer and max_size or max_size/self.size.y*self.size.x
  116. temp_y = not is_x_longer and max_size or max_size/self.size.x*self.size.y
  117. end
  118. if not self.rt then
  119. self.rt = UnityEngine.RenderTexture.GetTemporary(temp_x, temp_y, 24)
  120. end
  121. self.camera.targetTexture = self.rt
  122. local raw_image = parent:GetComponent("RawImage")
  123. raw_image.texture = self.rt
  124. parent.transform.sizeDelta = self.size
  125. if not self.using_material or not UIModelClassByRT.RT_Material[self.using_material] then
  126. raw_image.material = nil
  127. else
  128. raw_image.material = UIModelClassByRT.RT_Material[self.using_material]
  129. end
  130. -- local function callBack2(texs)
  131. -- if not texs or not texs[0] or self._use_delete_method then return end
  132. -- camera.targetTexture = texs[0]
  133. -- if renderSize then
  134. -- if renderSize.x ~= texs[0].width or renderSize.y ~= texs[0].height then
  135. -- texs[0].width = renderSize.x
  136. -- texs[0].height = renderSize.y
  137. -- camera:Render()
  138. -- end
  139. -- end
  140. -- parent:GetComponent("RawImage").texture = texs[0]
  141. -- size = size or Vector2(600,360)
  142. -- parent.sizeDelta = size
  143. -- -- parent:GetComponent("RawImage"):SetNativeSize()
  144. -- end
  145. -- LuaResManager:getInstance():LoadRenderTexture(self, "common_asset", "roleModeRenderTexture"..self.curr_index, callBack2)
  146. end
  147. function UIModelClassByRT:AddEvents()
  148. UIModelCommon.AddEvents(self)
  149. end
  150. --模型摄像机默认的一些参数
  151. UIModelClassByRT.CAMERA_DEFAULT_ARGS =
  152. {
  153. Rotate = 10,
  154. Height = 210,
  155. }
  156. function UIModelClassByRT:SetCameraArgs(use_default)
  157. local camera_args =
  158. {
  159. orthographic = true,
  160. fieldOfView = 25,
  161. orthographicSize = 1.6,
  162. localPosition = Vector3(0,UIModelClassByRT.CAMERA_DEFAULT_ARGS.Height,0),
  163. localRotation = Vector3(UIModelClassByRT.CAMERA_DEFAULT_ARGS.Rotate,0,0),
  164. }
  165. if self.position and self.show_shadow and not use_default then
  166. camera_args.localPosition = self.position
  167. end
  168. if self.camera_args and not use_default then
  169. if self.camera_args.orthographic and self.camera_args.orthographicSize then
  170. camera_args.orthographic = self.camera_args.orthographic
  171. camera_args.orthographicSize = self.camera_args.orthographicSize
  172. else
  173. camera_args.orthographic = self.camera_args.orthographic or false
  174. camera_args.fieldOfView = self.camera_args.fieldOfView or camera_args.fieldOfView
  175. end
  176. camera_args.localPosition = self.camera_args.localPosition or camera_args.localPosition
  177. camera_args.localRotation = self.camera_args.localRotation or camera_args.localRotation
  178. end
  179. if self.camera then
  180. self.camera.orthographic = camera_args.orthographic
  181. if camera_args.orthographic then
  182. self.camera.orthographicSize = camera_args.orthographicSize
  183. else
  184. self.camera.fieldOfView = camera_args.fieldOfView
  185. end
  186. self.camera.farClipPlane = 250
  187. self.camera.gameObject.transform.localPosition = camera_args.localPosition
  188. self.camera.gameObject.transform.localRotation = Quaternion.Euler(camera_args.localRotation)
  189. end
  190. -- 泛光摄像机的位置要与父节点保持一致
  191. -- if self.bloom_camera then
  192. -- self.bloom_camera.orthographic = camera_args.orthographic
  193. -- self.bloom_camera.fieldOfView = camera_args.fieldOfView
  194. -- end
  195. end
  196. -- 创建角色摄像机部分泛光效果
  197. function UIModelClassByRT:CreateRoleBloomEffect(camera, bloom_camera)
  198. -- camera = camera or self.camera
  199. -- bloom_camera = bloom_camera or self.bloom_camera
  200. -- if not camera or not bloom_camera then return end
  201. -- if self.part_bloom then return end
  202. -- self.part_bloom = camera.gameObject:AddComponent(typeof(RoleCameraBloom))
  203. -- self.change_render_shader = bloom_camera.gameObject:AddComponent(typeof(ChangeShaderRender))
  204. -- self.part_bloom_rt = UnityEngine.RenderTexture.New(self.renderSize.x, self.renderSize.y, 25)
  205. -- if self.part_bloom and self.change_render_shader then
  206. -- -- 生成模糊shader材质
  207. -- self.part_bloom.bloomMaterial = ShaderTools.GetBloomEffectNewMaterial()
  208. -- -- 添加替换渲染的shader
  209. -- self.change_render_shader.target_shader = ShaderTools.GetBloomClipShader()
  210. -- -- 添加一些阈值相关的参数
  211. -- self.part_bloom.iterations = 4
  212. -- self.part_bloom.threshold = 0.2
  213. -- -- C#:public void SetBloomCameraData(Camera camera, RenderTexture rt, ChangeShaderRender change_shader_render)
  214. -- self.part_bloom:SetBloomCameraData(bloom_camera, self.part_bloom_rt, self.change_render_shader)
  215. -- print("Saber:UIModelClassByRT [start:832] ------------------------------------------")
  216. -- end
  217. end