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

210 lines
7.0 KiB

  1. --ui挂接模型处理, 单一模型展示,比如只显示武器,不显示人物模型
  2. UIPartModelClass = UIPartModelClass or BaseClass()
  3. local UIPartModelClass = UIPartModelClass
  4. --当前正在使用的rendertexture列表
  5. function UIPartModelClass:__init(go, parent, res_id, texture_id, modelPartPos,type,raycastParent,texture_size,model_scale)
  6. self.gameObject = go
  7. self.parent = parent
  8. self.particle_list = {}
  9. self.pos_x = 0
  10. self.curr_index = UIModelClassByRT.GetRenderTextureIndex()
  11. self.gameObject.transform.position = Vector3(self.curr_index * 100,0,0)
  12. self.raycastParent = raycastParent
  13. self:SetData(parent, res_id, texture_id, modelPartPos, type,texture_size,model_scale)
  14. self:AddEvents()
  15. end
  16. function UIPartModelClass:__delete()
  17. UIModelClassByRT.using_render_texture_list[self.curr_index] = nil
  18. if self.clothe then
  19. self.clothe:DeleteMe()
  20. self.clothe = nil
  21. end
  22. destroy(self.gameObject)
  23. if self.raycastGo then
  24. destroy(self.raycastGo)
  25. end
  26. if self.rt then
  27. self.rt:Release()
  28. destroy(self.rt)
  29. self.rt = nil
  30. end
  31. end
  32. --UIPartModelConfig 模型位置,大小等的配置,由策划自己去调整
  33. function UIPartModelClass:SetData(parent, res_id, texture_id, modelPartPos, role_type, texture_size,model_scale)
  34. local cfg = UIPartModelConfig[res_id]
  35. local size = nil
  36. local rotate = nil
  37. local can_rotate = nil
  38. local position = nil
  39. local scale = nil
  40. if cfg then
  41. size = cfg.size
  42. rotate = cfg.rotate
  43. can_rotate = cfg.can_rotate
  44. position = cfg.position
  45. scale = cfg.scale
  46. end
  47. self.res_id = res_id
  48. self.texture_id = texture_id
  49. self.type = role_type or nil
  50. self.size = texture_size or size or Vector2(600,360)
  51. self.rotate = 0
  52. self.can_rotate = can_rotate == nil or can_rotate == true
  53. self.scale = model_scale or scale
  54. self.position = position
  55. self.camera = self.gameObject.transform:Find("Camera"):GetComponent("Camera")
  56. local role_con = self.gameObject.transform:Find("role")
  57. role_con.localPosition = Vector3(0, 0, 500)
  58. local anName = ModelPartName[role_type] .. res_id
  59. local resName = ModelPartName[role_type] .. res_id
  60. if modelPartPos == FashionPartPos.Weapon then
  61. anName = "model_wepon_" .. res_id
  62. resName = ModelPartName[role_type] .. res_id
  63. else
  64. end
  65. local function loadRoleCallback(objs)
  66. if self._use_delete_method then
  67. return
  68. end
  69. if not objs or not objs[0] then
  70. return
  71. end
  72. if self.role then
  73. destroy(self.role)
  74. end
  75. self.role = newObject(objs[0])
  76. local custom_speed = Config.ConfigModelSpeed.ModelActionSpeed[tonumber(res_id)]
  77. if custom_speed then
  78. local animator = self.role:GetComponent("Animator")
  79. if animator then
  80. animator.speed = custom_speed
  81. end
  82. end
  83. self.role:GetComponent("Animator").cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
  84. self.role.transform:SetParent(role_con)
  85. self.role.transform.localRotation = Quaternion.identity
  86. if position then
  87. -- self.role.transform.localPosition = position
  88. SetLocalPosition(self.role.transform, position.x, position.y, position.z)
  89. else
  90. SetLocalPosition(self.role.transform, 0)
  91. -- self.role.transform.localPosition = Vector3(0,0,0)
  92. end
  93. if self.scale then
  94. self.role.transform.localScale = Vector3(self.scale,self.scale,self.scale)
  95. else
  96. self.role.transform.localScale = Vector3(100,100,100)
  97. end
  98. local rotate_type = type(rotate)
  99. if rotate_type == "number" then
  100. self.role.transform:Rotate(Vector3(0, 180 + (rotate), 0))
  101. self.rotate = rotate
  102. elseif rotate_type == "table" then
  103. self.role.transform:Rotate(rotate)
  104. self.rotate = rotate.y
  105. else
  106. self.role.transform:Rotate(Vector3(0, 180, 0))
  107. self.rotate = 0
  108. end
  109. -- self.role.transform:Rotate(Vector3(0, 180 + (self.rotate), 0))
  110. local animator = self.role:GetComponent("Animator")
  111. if animator then
  112. animator:CrossFade( "idle2",0, 0.0 )
  113. end
  114. if texture_id then
  115. self:CreateClothTexture(res_id, texture_id)
  116. end
  117. end
  118. local renderSize = {x = 1500, y = 900}
  119. self.rt = UnityEngine.RenderTexture.New(renderSize.x, renderSize.y, 24)
  120. self.camera.targetTexture = self.rt
  121. parent:GetComponent("RawImage").texture = self.rt
  122. --size = size or Vector2(600,360)
  123. parent.sizeDelta = Vector2(self.size.x, self.size.y)
  124. LuaResManager:getInstance():loadPrefab(self,anName,resName, loadRoleCallback, true)
  125. end
  126. --贴图
  127. function UIPartModelClass:CreateClothTexture(fashion_model_id, texture_id)
  128. self.fashion_model_id = fashion_model_id
  129. self.texture_id = texture_id
  130. if fashion_model_id and texture_id and tonumber(texture_id) ~= 0 and self.gameObject then --使用贴图
  131. if self.clothe then
  132. self.clothe:DeleteMe()
  133. self.clothe = nil
  134. end
  135. local texture_res = fashion_model_id .. "_" .. texture_id
  136. self.skin_mesh_renderer = self.gameObject:GetComponentInChildren(typeof(UnityEngine.SkinnedMeshRenderer))
  137. if self.skin_mesh_renderer and self.skin_mesh_renderer.material and texture_res then
  138. self.clothe = Clothe.New(self.skin_mesh_renderer.material,texture_res)
  139. end
  140. end
  141. end
  142. function UIPartModelClass:AddEvents()
  143. if self.can_rotate then
  144. local function touch_begin(target,pos_x, pos_y)
  145. self.pos_x = pos_x
  146. end
  147. local function draging(target,pos_x, pos_y)
  148. self:OnDragging(pos_x, pos_y)
  149. end
  150. local function touch_end(target,pos_x, pos_y)
  151. end
  152. local rtGo = self.parent.gameObject
  153. -- AddDownEvent(self.parent.gameObject, touch_begin)
  154. if self.raycastParent then
  155. self.parent:GetComponent("RawImage").raycastTarget = false
  156. self.raycastGo = GameObject.New("raycast_"..self.parent.gameObject.name)
  157. self.raycastGo.transform:SetParent(self.raycastParent.transform)
  158. local eImage = self.raycastGo:AddComponent(typeof(LuaFramework.EmptyRaycast))
  159. self.raycastGo.transform.position = self.parent.position
  160. self.raycastGo.transform.sizeDelta = Vector2(self.size.x, self.size.y)
  161. self.raycastGo.transform.localScale = Vector3.one
  162. eImage.raycastTarget = true
  163. if type(self.raycastParent) ~= "userdata" and self.raycastParent.use_background then
  164. self.raycastGo.transform:SetSiblingIndex(1)
  165. else
  166. self.raycastGo.transform:SetSiblingIndex(0)
  167. end
  168. rtGo = self.raycastGo
  169. else
  170. self.parent:GetComponent("RawImage").raycastTarget = true
  171. end
  172. AddDragBeginEvent(rtGo, touch_begin)
  173. AddDragEvent(rtGo, draging)
  174. AddDragEndEvent(rtGo, touch_end)
  175. -- AddUpEvent(self.parent.gameObject, touch_end)
  176. else
  177. self.parent:GetComponent("RawImage").raycastTarget = false
  178. end
  179. end
  180. function UIPartModelClass:OnDragging(pos_x, pos_y)
  181. if pos_x and self.pos_x then
  182. local delta_x = pos_x - self.pos_x
  183. if self.role then
  184. if delta_x > 0 then
  185. self.rotate = self.rotate - 10
  186. -- self.role.transform:Rotate(Vector3(0, -10, 0))
  187. self.role.transform:Rotate(Vector3.up, -10, UnityEngine.Space.World)
  188. else
  189. self.rotate = self.rotate + 10
  190. -- self.role.transform:Rotate(Vector3(0, 10, 0))
  191. self.role.transform:Rotate(Vector3.up, 10, UnityEngine.Space.World)
  192. end
  193. self.pos_x = pos_x
  194. end
  195. else
  196. print("---UIPartModelClass--OnDragging-pos_x-:", pos_x)
  197. print("---UIPartModelClass--OnDragging-pos_y-:", pos_y)
  198. end
  199. end