--ui挂接模型处理, 单一模型展示,比如只显示武器,不显示人物模型 UIPartModelClass = UIPartModelClass or BaseClass() local UIPartModelClass = UIPartModelClass --当前正在使用的rendertexture列表 function UIPartModelClass:__init(go, parent, res_id, texture_id, modelPartPos,type,raycastParent,texture_size,model_scale) self.gameObject = go self.parent = parent self.particle_list = {} self.pos_x = 0 self.curr_index = UIModelClassByRT.GetRenderTextureIndex() self.gameObject.transform.position = Vector3(self.curr_index * 100,0,0) self.raycastParent = raycastParent self:SetData(parent, res_id, texture_id, modelPartPos, type,texture_size,model_scale) self:AddEvents() end function UIPartModelClass:__delete() UIModelClassByRT.using_render_texture_list[self.curr_index] = nil if self.clothe then self.clothe:DeleteMe() self.clothe = nil end destroy(self.gameObject) if self.raycastGo then destroy(self.raycastGo) end if self.rt then self.rt:Release() destroy(self.rt) self.rt = nil end end --UIPartModelConfig 模型位置,大小等的配置,由策划自己去调整 function UIPartModelClass:SetData(parent, res_id, texture_id, modelPartPos, role_type, texture_size,model_scale) local cfg = UIPartModelConfig[res_id] local size = nil local rotate = nil local can_rotate = nil local position = nil local scale = nil if cfg then size = cfg.size rotate = cfg.rotate can_rotate = cfg.can_rotate position = cfg.position scale = cfg.scale end self.res_id = res_id self.texture_id = texture_id self.type = role_type or nil self.size = texture_size or size or Vector2(600,360) self.rotate = 0 self.can_rotate = can_rotate == nil or can_rotate == true self.scale = model_scale or scale self.position = position self.camera = self.gameObject.transform:Find("Camera"):GetComponent("Camera") local role_con = self.gameObject.transform:Find("role") role_con.localPosition = Vector3(0, 0, 500) local anName = ModelPartName[role_type] .. res_id local resName = ModelPartName[role_type] .. res_id if modelPartPos == FashionPartPos.Weapon then anName = "model_wepon_" .. res_id resName = ModelPartName[role_type] .. res_id else end local function loadRoleCallback(objs) if self._use_delete_method then return end if not objs or not objs[0] then return end if self.role then destroy(self.role) end self.role = newObject(objs[0]) local custom_speed = Config.ConfigModelSpeed.ModelActionSpeed[tonumber(res_id)] if custom_speed then local animator = self.role:GetComponent("Animator") if animator then animator.speed = custom_speed end end self.role:GetComponent("Animator").cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate self.role.transform:SetParent(role_con) self.role.transform.localRotation = Quaternion.identity if position then -- self.role.transform.localPosition = position SetLocalPosition(self.role.transform, position.x, position.y, position.z) else SetLocalPosition(self.role.transform, 0) -- self.role.transform.localPosition = Vector3(0,0,0) end if self.scale then self.role.transform.localScale = Vector3(self.scale,self.scale,self.scale) else self.role.transform.localScale = Vector3(100,100,100) end local rotate_type = type(rotate) if rotate_type == "number" then self.role.transform:Rotate(Vector3(0, 180 + (rotate), 0)) self.rotate = rotate elseif rotate_type == "table" then self.role.transform:Rotate(rotate) self.rotate = rotate.y else self.role.transform:Rotate(Vector3(0, 180, 0)) self.rotate = 0 end -- self.role.transform:Rotate(Vector3(0, 180 + (self.rotate), 0)) local animator = self.role:GetComponent("Animator") if animator then animator:CrossFade( "idle2",0, 0.0 ) end if texture_id then self:CreateClothTexture(res_id, texture_id) end end local renderSize = {x = 1500, y = 900} self.rt = UnityEngine.RenderTexture.New(renderSize.x, renderSize.y, 24) self.camera.targetTexture = self.rt parent:GetComponent("RawImage").texture = self.rt --size = size or Vector2(600,360) parent.sizeDelta = Vector2(self.size.x, self.size.y) LuaResManager:getInstance():loadPrefab(self,anName,resName, loadRoleCallback, true) end --贴图 function UIPartModelClass:CreateClothTexture(fashion_model_id, texture_id) self.fashion_model_id = fashion_model_id self.texture_id = texture_id if fashion_model_id and texture_id and tonumber(texture_id) ~= 0 and self.gameObject then --使用贴图 if self.clothe then self.clothe:DeleteMe() self.clothe = nil end local texture_res = fashion_model_id .. "_" .. texture_id self.skin_mesh_renderer = self.gameObject:GetComponentInChildren(typeof(UnityEngine.SkinnedMeshRenderer)) if self.skin_mesh_renderer and self.skin_mesh_renderer.material and texture_res then self.clothe = Clothe.New(self.skin_mesh_renderer.material,texture_res) end end end function UIPartModelClass:AddEvents() if self.can_rotate then local function touch_begin(target,pos_x, pos_y) self.pos_x = pos_x end local function draging(target,pos_x, pos_y) self:OnDragging(pos_x, pos_y) end local function touch_end(target,pos_x, pos_y) end local rtGo = self.parent.gameObject -- AddDownEvent(self.parent.gameObject, touch_begin) if self.raycastParent then self.parent:GetComponent("RawImage").raycastTarget = false self.raycastGo = GameObject.New("raycast_"..self.parent.gameObject.name) self.raycastGo.transform:SetParent(self.raycastParent.transform) local eImage = self.raycastGo:AddComponent(typeof(LuaFramework.EmptyRaycast)) self.raycastGo.transform.position = self.parent.position self.raycastGo.transform.sizeDelta = Vector2(self.size.x, self.size.y) self.raycastGo.transform.localScale = Vector3.one eImage.raycastTarget = true if type(self.raycastParent) ~= "userdata" and self.raycastParent.use_background then self.raycastGo.transform:SetSiblingIndex(1) else self.raycastGo.transform:SetSiblingIndex(0) end rtGo = self.raycastGo else self.parent:GetComponent("RawImage").raycastTarget = true end AddDragBeginEvent(rtGo, touch_begin) AddDragEvent(rtGo, draging) AddDragEndEvent(rtGo, touch_end) -- AddUpEvent(self.parent.gameObject, touch_end) else self.parent:GetComponent("RawImage").raycastTarget = false end end function UIPartModelClass:OnDragging(pos_x, pos_y) if pos_x and self.pos_x then local delta_x = pos_x - self.pos_x if self.role then if delta_x > 0 then self.rotate = self.rotate - 10 -- self.role.transform:Rotate(Vector3(0, -10, 0)) self.role.transform:Rotate(Vector3.up, -10, UnityEngine.Space.World) else self.rotate = self.rotate + 10 -- self.role.transform:Rotate(Vector3(0, 10, 0)) self.role.transform:Rotate(Vector3.up, 10, UnityEngine.Space.World) end self.pos_x = pos_x end else print("---UIPartModelClass--OnDragging-pos_x-:", pos_x) print("---UIPartModelClass--OnDragging-pos_y-:", pos_y) end end