|
|
- --ui挂接模型处理
- UIModelCommon = UIModelCommon or BaseClass(UIPartical)
- UIModelCommon.ModelType =
- {
- RT = 1,
- BackModel = 2,
- Model = 3,
- }
-
- local UIModelCommon = UIModelCommon
- local ModelPartName = ModelPartName
-
- function UIModelCommon:__init(go,parent,model_data)
- self.particle_mgr = ParticleManager:getInstance()
- self.model_type = UIModelCommon.ModelType.RT
- self.gameObject = go
- self.parent = parent
- self.model_data = model_data
- self.particle_list = {}
- self.load_res_target = {}
- self.show_shadow = model_data.show_shadow
- self.raycastParent = model_data.raycastParent
- self.layer_name = model_data.layer_name or "UI"
- self.delay_play_action_timer_list = {}
- self.pearl_list = {}
- self.pearl_parent = {}
- end
-
- function UIModelCommon:__delete()
- self.cache_bones = {}
- self:ClearActionTimerList()
- self:RemoveAllParticle()
- if self.cache_effect_list then
- for obj_type, list in pairs(self.cache_effect_list) do
- for k,v in pairs(list) do
- destroy(v.go)
- end
- end
- end
-
- if self.light_go then
- destroy(self.light_go)
- end
-
- if self.clothe then
- self.clothe:DeleteMe()
- self.clothe = nil
- end
-
- if self.head_wear then
- self.head_wear:DeleteMe()
- self.head_wear = nil
- end
- if self.weapon_clothe_obj then
- self.weapon_clothe_obj:DeleteMe()
- self.weapon_clothe_obj = nil
- self.weapon_clothe_id = nil
- end
-
- if self.role then
- destroy(self.role)
- self.role = nil
- end
- if self.horse_gameObject then
- destroy(self.horse_gameObject)
- self.horse_gameObject = nil
- end
- if self.gameObject then
- destroy(self.gameObject)
- end
- if self.weapon_hand_list then
- for k,v in pairs(self.weapon_hand_list) do
- destroy(v)
- self.weapon_hand_list[k] = nil
- end
- end
- if self.head_wear_animator then
- self.head_wear_animator = nil
- end
- if self.deay_show_warSoul then
- GlobalTimerQuest:CancelQuest(self.deay_show_warSoul)
- self.deay_show_warSoul = nil
- end
-
- if self.deay_show_light then
- GlobalTimerQuest:CancelQuest(self.deay_show_light)
- self.deay_show_light = nil
- end
-
- if self.weapon_event_id then
- GlobalEventSystem:UnBind(self.weapon_event_id)
- self.weapon_event_id = nil
- end
- if self.fahion_event_id then
- GlobalEventSystem:UnBind(self.fahion_event_id)
- self.fahion_event_id = nil
- end
- if self.cloth_event_id then
- GlobalEventSystem:UnBind(self.cloth_event_id)
- self.cloth_event_id = nil
- end
-
- if self.args_fun_event_id then
- GlobalEventSystem:UnBind(self.args_fun_event_id)
- self.args_fun_event_id = nil
- end
-
- if self.viseble_change_id then
- GlobalEventSystem:UnBind(self.viseble_change_id)
- self.viseble_change_id = nil
- end
-
- for k,v in pairs(self.pearl_list) do
- v:DeleteMe()
- end
- self.pearl_list = {}
-
- for k,v in pairs(self.pearl_parent) do
- if self.pearl_parent[k] then
- destroy(self.pearl_parent[k])
- self.pearl_parent[k] = nil
- end
- end
- self.pearl_parent = {}
-
- if self.raycastGo then
- destroy(self.raycastGo)
- end
-
- lua_resM:clearReference(self.load_res_target)
-
- self:StopSkillPreViewTimer()
-
-
- end
-
- function UIModelCommon: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
- if self.model_data.raycast_size then
- self.parent:GetComponent("RawImage").raycastTarget = false
- self.raycastGo = GameObject.New("raycast_"..self.parent.gameObject.name)
- self.raycastGo.transform:SetParent(self.parent.transform)
- local eImage = self.raycastGo:AddComponent(typeof(LuaFramework.EmptyRaycast))
- self.raycastGo.transform.localPosition = Vector3.zero
- self.raycastGo.transform.sizeDelta = Vector2(self.model_data.raycast_size.x, self.model_data.raycast_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)
- elseif self.skill_preview and self.skill_id then
- local function on_click()
- self:PlaySkillEffect(self.role, self.skill_id)
- end
- local rtGo = self.parent.gameObject
- if self.model_data.raycast_size then
- self.parent:GetComponent("RawImage").raycastTarget = false
- self.raycastGo = GameObject.New("raycast_"..self.parent.gameObject.name)
- self.raycastGo.transform:SetParent(self.parent.transform)
- local eImage = self.raycastGo:AddComponent(typeof(LuaFramework.EmptyRaycast))
- self.raycastGo.transform.localPosition = Vector3.zero
- self.raycastGo.transform.sizeDelta = Vector2(self.model_data.raycast_size.x, self.model_data.raycast_size.y)
- self.raycastGo.transform.localScale = Vector3.one
- eImage.raycastTarget = true
- self.raycastGo.transform:SetSiblingIndex(1)
- rtGo = self.raycastGo
- else
- self.parent:GetComponent("RawImage").raycastTarget = true
- end
- AddClickEvent(rtGo,on_click)
-
- else
- self.parent:GetComponent("RawImage").raycastTarget = false
- end
-
- if self.type and self.type == SceneBaseType.MainRole then
- --武器变化
- local weapon_fun = function (_type, weapon_id, career, weapon_clothe)
- if self.do_not_main_role_cloth_res_change then return end
- if not IsNull(self.role) then
- self:CreateWeapon(_type, weapon_id, career, weapon_clothe)
- end
- end
- self.weapon_event_id = GlobalEventSystem:Bind(SceneEventType.MAIN_ROLE_WEAPON_RES_CHANGE, weapon_fun)
-
- --时装变化(暂不包括武器时装)
- local fashion_fun = function (_type, fashion_model_id, texture_id)
- if self.do_not_main_role_cloth_res_change then return end
- if not IsNull(self.role) then
- if self.clothe_res_id then
- if self.clothe_res_id == fashion_model_id then
- self:CreateClothTexture(fashion_model_id, texture_id)
- else
- self:SetData(self.parent, self.model_data)
- end
- end
- end
- end
- self.fahion_event_id = GlobalEventSystem:Bind(SceneEventType.MAIN_ROLE_FASHION_RES_CHANGE, fashion_fun)
-
- --衣服改变
- local cloth_fun = function (_type, clothe_res_id)
- if self.do_not_main_role_cloth_res_change then return end
- if not IsNull(self.role) then
- self:SetData(self.parent, self.model_data)
- end
- end
- self.cloth_event_id = GlobalEventSystem:Bind(SceneEventType.MAIN_ROLE_CLOTH_RES_CHANGE, cloth_fun)
-
- --默认摄像机参数改变
- local on_args_fun = function ()
- self:SetCameraArgs(true)
- end
- self.args_fun_event_id = GlobalEventSystem:Bind(EventName.UPDATE_UIMODEL_CAMERA_DEFAULT_ARGS, on_args_fun)
- end
-
- --visible改变时重新播动作
- local action_fun = function()
- if not IsNull(self.role) and self.replay_action_name then
- local is_show = self.role and self.role.activeInHierarchy
- if not is_show then
- self._has_set_hide = true
- end
-
- --从隐藏到显示
- if is_show == true and self._has_set_hide then
- self._has_set_hide = false
- local last_action = self.replay_action_name or "show"
- local action_list = {last_action}
- self:DelayPlayNextAction(nil, action_list, 0)
- end
- end
- end
- self.viseble_change_id = GlobalEventSystem:Bind(BaseView.ChangeVisible, action_fun)
- end
-
- function UIModelCommon:OnDragging(pos_x, pos_y)
- if pos_x and self.pos_x then
- local delta_x = pos_x - self.pos_x
- local speed = 6
- if self.role then
- if delta_x > 0 then
- self.rotate = self.rotate - speed
- -- self.role.transform:Rotate(Vector3(0, -speed, 0))
- if self.horse_transform and (self.type == SceneBaseType.Include_Horse
- or self.type == SceneBaseType.Baby_Include_Horse) then
- --如果人物身上有马,要旋转马,因为self.role被丢进马里去当子物体了
- self.horse_transform:Rotate(Vector3.up, -speed, UnityEngine.Space.World)
- else
- self.role.transform:Rotate(Vector3.up, -speed, UnityEngine.Space.World)
- end
- else
- self.rotate = self.rotate + speed
- -- self.role.transform:Rotate(Vector3(0, speed, 0))
- if self.horse_transform and (self.type == SceneBaseType.Include_Horse
- or self.type == SceneBaseType.Baby_Include_Horse) then
- --如果人物身上有马,要旋转马,因为self.role被丢进马里去当子物体了
- self.horse_transform:Rotate(Vector3.up, speed, UnityEngine.Space.World)
- else
- self.role.transform:Rotate(Vector3.up, speed, UnityEngine.Space.World)
- end
- end
- self.pos_x = pos_x
- end
- else
- print("---UIModelClassByRT--OnDragging-pos_x-:", pos_x)
- print("---UIModelClassByRT--OnDragging-pos_y-:", pos_y)
- end
- end
-
-
- function UIModelCommon:ClearActionTimerList()
- if self.delay_play_action_timer_list then
- for i, id in ipairs(self.delay_play_action_timer_list) do
- GlobalTimerQuest:CancelQuest(id)
- end
- self.delay_play_action_timer_list = {}
- end
- end
-
- function UIModelCommon:PlayActions(action_name_list,action_delta,animator)
- if IsNull(self.role) then return end
- animator = animator or self.role:GetComponent("Animator")
- if not IsTableEmpty(action_name_list) then
- local action_name = action_delta and action_name_list[1] or table.remove(action_name_list, 1)
- if action_name then
- local animator = self.role:GetComponent("Animator")
- animator:CrossFade( action_name,0, 0.0 )
- if not IsTableEmpty(action_name_list) then
- self.delay_play_action_timer_list = self.delay_play_action_timer_list or {}
- if action_delta then
- self:DelayPlayNextActionLoop(animator, action_name_list, action_delta)
- else
- self:DelayPlayNextAction(animator, action_name_list)
- end
- end
- end
- end
- end
-
- --随机循环动作列表 暂时不添加音效
- --action_name_list.idle_name 默认待机动作
- function UIModelCommon:DelayPlayNextActionLoop(animator, action_name_list, action_delta)
- if animator == nil then return end
- if IsTableEmpty(action_name_list) then return end
- animator:Update(0)
- local cur_state = animator:GetCurrentAnimatorStateInfo(0)
- local action_time = 0
- if not cur_state then return end
- action_time = cur_state.length
- local idle_action = action_name_list.idle_name or "idle"
- local delay_play = function ()
- local action_name = action_name_list[ math.random(1,#action_name_list)]
- animator:CrossFade(action_name, 0.0, 0.0)
- self:DelayPlayNextActionLoop(animator, action_name_list, action_delta)
- end
- local play_idle = function ()
- animator:CrossFade(idle_action, 0.3, 0.0 )
- end
- --清理计时器列表
- if #self.delay_play_action_timer_list >= 20 then
- self:ClearActionTimerList()
- end
- action_delta = action_delta < action_time and action_time + 1 or action_delta
- table.insert(self.delay_play_action_timer_list, GlobalTimerQuest:AddDelayQuest(play_idle,action_time))
- table.insert(self.delay_play_action_timer_list, GlobalTimerQuest:AddDelayQuest(delay_play,action_delta))
- end
-
- --延迟播放下一个动作
- function UIModelCommon:DelayPlayNextAction(animator, action_name_list, force_delay_action_time)
-
- if not IsTableEmpty(action_name_list) then
- animator = animator or self.role:GetComponent("Animator")
- local cur_state = 0
- local action_time = 0
- if force_delay_action_time and force_delay_action_time > 0 then
- action_time = force_delay_action_time
- else
- animator:Update(0)
- cur_state = animator:GetCurrentAnimatorStateInfo(0)
- action_time = cur_state.length
- end
- if animator and action_time and action_time > 0 then
- local delay_play = function ()
- if IsNull(animator) or self._use_delete_method then
- return
- end
- local action_name = table.remove(action_name_list, 1)
- if animator and action_name then
- animator:CrossFade(action_name, 0.1, 0.0 )
- if not IsNull(self.head_wear_animator) then
- self.head_wear_animator:CrossFade(action_name, 0.2, 0.0 )
- end
- self:CreateEffect(self.type, self.clothe_res_id, self.role, action_name)
- if not IsTableEmpty(action_name_list) then
- self:DelayPlayNextAction(animator, action_name_list)
- else
- --播完动作再重置一下相机灯光参数
- if self.use_light_data then
- self:ApplyCameraLightData()
- end
- end
- else
- return
- end
- end
- table.insert(self.delay_play_action_timer_list, GlobalTimerQuest:AddDelayQuest(delay_play,action_time))
- else
- return
- end
- end
- return
- end
-
- --创建武器
- function UIModelCommon:CreateWeapon(_type, weapon_res_id, career, weapon_clothe)
- if _type and _type == SceneBaseType.Monster then
- return
- end
- self.weapon_res_id = weapon_res_id
- if _type and weapon_res_id then
- local abName,weapon_attach_list,weapon_res_list = GameResPath.GetWeaponRes(_type,weapon_res_id,career)
- local function localWeaponCallback(objs, is_gameObject)
- if not self._use_delete_method then
- if weapon_attach_list and objs then
- if self.weapon_container then
- for k,v in pairs(self.weapon_container) do
- destroy(v.go)
- end
- end
-
- if self.weapon_clothe_obj then
- self.weapon_clothe_obj:DeleteMe()
- self.weapon_clothe_obj = nil
- end
-
- local bone_go = nil
- self.weapon_container = {}
- for k,boneName in ipairs(weapon_attach_list) do
- bone_go = FindBone(self.role.transform,boneName)
- if bone_go then
- local go = is_gameObject and objs[k] or newObject(objs[k-1])
- if go then
- go.transform.parent = bone_go.transform
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.Euler(Vector3.zero)
- go.transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- self:CheckShadow(go, weapon_attach_list[i])
- self.weapon_container[boneName] = {go = go, abName = abName, resName = weapon_res_list[k], index = k}
- go:SetActive(true)
- -- if weapon_clothe and weapon_clothe ~= "" and tonumber(weapon_clothe) ~= 0 then
- -- local mesh = go:GetComponentInChildren(typeof(UnityEngine.MeshRenderer))
- -- if mesh and mesh.material then
- -- local res = weapon_res_id .. "_" .. weapon_clothe
- -- self.weapon_clothe_obj = Weapon.New( mesh.material, res)
- -- end
- -- end
- end
- end
- end
- --部件特效,参数为部件类型与id
- self:CreateEffect(SceneBaseType.FWeapon, self.weapon_res_id)
- end
- end
- end
- if self.role and self.role.transform and abName and weapon_res_list then
- LuaResManager:getInstance():loadPrefabs(self,abName,weapon_res_list, localWeaponCallback)
- end
- end
- end
-
- --时装衣服贴图
- function UIModelCommon: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 UIModelCommon:CreateWing(_type, wing_id)
- if _type and wing_id then
- if self.role_type == SceneBaseType.Pet then--巫女+翅膀
- _type = SceneBaseType.FCloud
- end
- local abName, resName = GameResPath.GetModelClotheRes(_type, wing_id)
- local function localWingCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find wing res = "..self.wing_id)
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- local bone = FindBone(self.role.transform, AttachNode.Wing)
- if bone == nil then
- return
- end
- go.transform:SetParent(bone)
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- -- 修改翅膀节点下的面片渲染的sortingOrder与带Canvas组件的父节点同级,保证不会被UI背景盖住
- local shinned_meshRender_com_list = go:GetComponentsInChildren(typeof(UnityEngine.SkinnedMeshRenderer),true)
- if shinned_meshRender_com_list.Length > 0 then
- for i=1,shinned_meshRender_com_list.Length do
- shinned_meshRender_com_list[i-1].sortingOrder = self:GetCurrLayerDepth(self.layer_name)
- end
- end
- -- 修改翅膀节点下的渲染队列
- self:SetUILayer(self.parent.transform)
- end
- local animator = go:GetComponent("Animator")
- if not IsNull(animator) then
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- animator:CrossFade( "idle",0, 0.0 )
- end
-
- --部件特效,参数为部件类型与id
- self:CreateEffect(SceneBaseType.FWing, self.wing_id, go)
- end
- if self.role.transform and abName and resName then
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localWingCallback)
- end
- end
- end
-
- --创建活跃度形象
- function UIModelCommon:CreateLivenessImage(_type, image_id)
- if _type and image_id and image_id ~= 0 then
- local prefixStr = image_id < 10 and "00" or "0"
- local effect_name = "effect_huoyuedu_" .. prefixStr .. image_id
- self.particle_mgr:AddUIModelEffect(effect_name,self,true,nil,7,nil,nil,nil,nil,nil,false)
- end
- end
-
- --创建头发
- function UIModelCommon:CreateHeadWear(_type, head_wear_id, head_clothe_id)
- --self.head_wear_id = head_wear_id
- --self.head_clothe_id = head_clothe_id
- if _type and head_wear_id then
- local abName, resName = GameResPath.GetHeadRes(_type, head_wear_id)
- local function localHeadWearCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find headwear res = "..head_wear_id)
- return
- end
- if self.default_headWear_go and self.default_headWear_abName then
- lua_resM:AddObjToPool(self, self.default_headWear_abName, self.default_headWear_abName, self.default_headWear_go)
- self.default_headWear_go = nil
- self.default_headWear_abName = nil
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- local bone = FindBone(self.role.transform, AttachNode.Head)
- if bone == nil then
- return
- end
- go.transform:SetParent(bone)
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
- --头发动作
- local animator = go:GetComponent("Animator")
- if IsNull(animator) then
- return
- end
- -- if self.curr_body_action_name then
- -- animator:CrossFade(self.curr_body_action_name, 0, 0.0)
- -- end
- self.head_wear_animator = animator
-
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- self:CheckShadow(go, resName)
- -- local mesh = go:GetComponentInChildren(typeof(UnityEngine.MeshRenderer))
- -- if mesh and mesh.material then
- -- if head_clothe_id and tonumber(head_clothe_id) ~= 0 then
- -- if self.head_clothe then
- -- self.head_clothe:DeleteMe()
- -- self.head_clothe = nil
- -- end
- -- local texture_res = head_wear_id .. "_" .. head_clothe_id
- -- self.head_clothe = Clothe.New(mesh.material, texture_res)
- -- end
- -- end
- end
- if self.role.transform and abName and resName then
- if not resMgr:GetAssetBundle(abName) and self.career then--没有当前头发 需要异步加载 就先创建默认头饰
- if self.default_headWear_go and self.default_headWear_abName then
- --self:SetUILayer(self.default_headWear_go.transform, UIPartical.RenderingOther_List.DEFAULT)
- lua_resM:AddObjToPool(self, self.default_headWear_abName, self.default_headWear_abName, self.default_headWear_go)
- self.default_headWear_go = nil
- self.default_headWear_abName = nil
- end
- local local_default_headWear_abName = ModelPartName[6] .. string.format("10%d000", self.career)
- local local_default_headWear_go = lua_resM:GetObjFormPool(self, local_default_headWear_abName, local_default_headWear_abName)
- if local_default_headWear_go then
- local bone = FindBone(self.role.transform, AttachNode.Head)
- if bone == nil then
- return
- end
-
- local_default_headWear_go.transform:SetParent(bone)
- local_default_headWear_go.transform.localPosition = Vector3.zero
- local_default_headWear_go.transform.localRotation = Quaternion.identity
- local_default_headWear_go.transform.localScale = Vector3.one
- self.default_headWear_go = local_default_headWear_go
- self.default_headWear_abName = local_default_headWear_abName
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- end
-
- self:CheckShadow(self.default_headWear_go, resName)
- end
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localHeadWearCallback)
- end
- end
- end
-
- --创建真·头饰,上面的那个应该叫头发
- function UIModelCommon:CreateHatWear(hat_wear_id)
- if hat_wear_id then
- local abName, resName = GameResPath.GetHatRes(hat_wear_id)
- local function localHeadWearCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find headwear res = "..hat_wear_id)
- return
- end
- if self.default_hat_go and self.default_hat_abName then
- lua_resM:AddObjToPool(self, self.default_hat_abName, self.default_hat_abName, self.default_hat_go)
- self.default_hat_go = nil
- self.default_hat_abName = nil
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- local bone = FindBone(self.role.transform, AttachNode.Head)
- if bone == nil then
- return
- end
- go.transform:SetParent(bone)
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- self:CheckShadow(go, resName)
- -- local mesh = go:GetComponentInChildren(typeof(UnityEngine.MeshRenderer))
- -- if mesh and mesh.material then
- -- if head_clothe_id and tonumber(head_clothe_id) ~= 0 then
- -- if self.head_clothe then
- -- self.head_clothe:DeleteMe()
- -- self.head_clothe = nil
- -- end
- -- local texture_res = hat_wear_id .. "_" .. head_clothe_id
- -- self.head_clothe = Clothe.New(mesh.material, texture_res)
- -- end
- -- end
- end
- if self.role.transform and abName and resName then
- if not resMgr:GetAssetBundle(abName) and self.career then--没有当前头发 需要异步加载 就先创建默认头饰
- if self.default_hat_go and self.default_hat_abName then
- --self:SetUILayer(self.default_hat_go.transform, UIPartical.RenderingOther_List.DEFAULT)
- lua_resM:AddObjToPool(self, self.default_hat_abName, self.default_hat_abName, self.default_hat_go)
- self.default_hat_go = nil
- self.default_hat_abName = nil
- end
- local local_default_hat_abName = ModelPartName[6] .. string.format("10%d000", self.career)
- local local_default_hat_go = lua_resM:GetObjFormPool(self, local_default_hat_abName, local_default_hat_abName)
- if local_default_hat_go then
- local bone = FindBone(self.role.transform, AttachNode.Head)
- if bone == nil then
- return
- end
-
- local_default_hat_go.transform:SetParent(bone)
- local_default_hat_go.transform.localPosition = Vector3.zero
- local_default_hat_go.transform.localRotation = Quaternion.identity
- local_default_hat_go.transform.localScale = Vector3.one
- self.default_hat_go = local_default_hat_go
- self.default_hat_abName = local_default_hat_abName
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- end
-
- self:CheckShadow(self.default_hat_go, resName)
- end
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localHeadWearCallback)
- end
- end
- end
-
-
- function UIModelCommon:CreateLightEffect( light_id, parent_go )
- -- if self.deay_show_light then
- -- GlobalTimerQuest:CancelQuest(self.deay_show_light)
- -- self.deay_show_light = nil
- -- end
- -- local function delay( )
- -- local show_type = (self.model_type == UIModelCommon.ModelType.BackModel) and "UIBackRole" or "UI"
- -- self.light_effect_id = self.particle_mgr:AddTargetEffect(LightModel:GetInstance():GetLightResById(light_id), self.role, true, nil, nil, 7,nil,nil,nil,nil,show_type)
- -- if self.light_effect_id then
- -- self.particle_list[self.light_effect_id] = self.light_effect_id
- -- end
- -- end
- -- self.deay_show_light = setTimeout(delay,0)
- local effect_obj_type = nil
- local effect_vo = {name = LightModel:GetInstance():GetLightResById(light_id)}
- local bone = FindBone(parent_go and parent_go.transform or self.transform, "root")
- if bone then
- local function load_finish_func(objs, is_gameObject)
- if not objs or not objs[0] then
- return
- end
- if IsNull(bone) then
- if is_gameObject then destroy(objs[0]) end
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- if not self.light_go then--没有就直接赋值
- self.light_go = go
- else--有就直接销毁原来的继续赋值新的
- if self.light_go then
- destroy(self.light_go)
- end
- self.light_go = go
- end
- go:SetActive(true)
- if effect_vo.is_world_particle then
- AttachGameRoot(go.transform)
- else
- go.transform:SetParent(bone)
- end
- SetLocalPosition(go.transform)
- SetLocalRotation(go.transform)
- SetLocalScale(go.transform, 1)
- if effect_obj_type or (self.model_data and self.model_data.attach_game_root) then
- self:SetUILayer(go.transform, UIPartical.RenderingOther_List.DEFAULT)
- elseif ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(go.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(go.transform)
- end
-
- if not effect_obj_type then
- local effect_sortingOrder = self:GetCurrLayerDepth(self.layer_name)
- UIDepth.SetUIDepth(go,false,effect_sortingOrder)
- end
- end
- lua_resM:loadPrefab(self, effect_vo.name, effect_vo.name, load_finish_func, false)
- end
- end
-
- function UIModelCommon:CreateWarSoulEffect( warSoul_effect_res,warSoul_effect_pos,warSoul_effect_scale )
- if self.deay_show_warSoul then
- GlobalTimerQuest:CancelQuest(self.deay_show_warSoul)
- self.deay_show_warSoul = nil
- end
- local function delay( )
- local function load_callback( ... )
- if warSoul_effect_scale then
- self.particle_mgr:SetEffectScale(self.warSoul_effect_id, warSoul_effect_scale)
- end
- if warSoul_effect_pos then
- self.particle_mgr:SetEffectLocalPos(self.warSoul_effect_id, warSoul_effect_pos.x,warSoul_effect_pos.y,warSoul_effect_pos.z)
- end
- local effect = self.particle_mgr:GetEffect(self.warSoul_effect_id)
- local root_dummy_node = FindBone(self.role.transform, "Dummy001")
- -- self.transform.localRotation = Quaternion.Euler(0, 0, 0)
- if root_dummy_node and effect then
- effect.transform:SetParent(root_dummy_node)
- -- effect.localPosition = warSoul_effect_pos or Vector3.zero
- effect.transform.localRotation = Quaternion.Euler(0, 180, 0)
- -- effect.localScale = Vector3.one
- end
- end
- self.warSoul_effect_id = self.particle_mgr:AddTargetEffect(warSoul_effect_res, self.role, true, nil, nil, 7, nil,nil,nil,nil,"UI" or self.layer_name,load_callback,nil,nil,nil,nil,warSoul_effect_pos)
- if self.particle_list and self.warSoul_effect_id then
- self.particle_list[self.warSoul_effect_id] = self.warSoul_effect_id
- end
- end
- self.deay_show_warSoul = setTimeout(delay,0.01)
- end
-
-
- --创建足迹
- function UIModelCommon:CreateFootmark(footmark_id)
-
- end
-
- function UIModelCommon:PlaySkillEffect(attacker, skill_id, next_anim, custom_end_callback)
- if attacker and skill_id and SkillManager and SkillManager.Instance then
-
- --正在播放技能中
- if self.duration_timer then return end
-
- local movie_cfg = SkillManager.Instance:GetFightSkillMovie(skill_id)
- if movie_cfg then
- if movie_cfg.anim then
- if self.skill_preview_callback then
- self.skill_preview_callback(1)
- end
- local action_name = {[1] = movie_cfg.anim,}
- self:PlayActions(action_name)
-
- local duration_time = movie_cfg.back_swing and movie_cfg.back_swing or 2
-
- self:StopSkillPreViewTimer()
-
- local function PlaySkillEffectEnd()
- if self.skill_preview_callback then
- self:PlayActions({[1] = "idle",})
- self.skill_preview_callback(2)
- elseif next_anim then
- self:PlayActions({[1] = next_anim,})
- end
- if custom_end_callback then
- custom_end_callback()
- end
- self:StopSkillPreViewTimer()
- end
- self.duration_timer = GlobalTimerQuest:AddDelayQuest(PlaySkillEffectEnd,duration_time)
- end
-
- if movie_cfg.particles then
- for i = 1, #movie_cfg.particles do
- local cfg = movie_cfg.particles[i]
- local res = cfg.res
- local x, y = attacker.transform.position.x, attacker.transform.position.y
- local dir = GameMath.AngleToDirection(270 - self.rotate)
- local scale = cfg.scale
-
- local attach_type = cfg.attach_type
- local play_time = cfg.play_time
- if cfg.custom_angle then
- dir = GameMath.AngleToDirection(cfg.custom_angle)
- end
- local pos_type = cfg.pos_type
- --所有特效都是特定播放轨迹,所以这里简单的都从人物跟节点发出
- pos_type = 0
- self.particle_mgr:AddUIModelEffect( res, self, false, play_time, attach_type,dir, nil,nil,nil,nil,nil,false)
-
-
- -- --播放特效方法1
- -- self.particle_mgr:AddUIModelEffect(res,self,true,nil,attach_type,nil,nil,nil,nil,nil,false)
-
- --播放后特效方法2
- -- local particle_id = nil
- -- if pos_type == 2 or pos_type == 6 then --在攻击者坐标上
- -- if cfg.offset_dist and cfg.offset_dist ~= 0 and dir then
- -- co.NormaliseXYTable(dir)
- -- local dist = GameMath.ChangeEllipseValue(dir, cfg.offset_dist)
- -- x = x + dir.x * dist
- -- y = y + dir.y * dist
- -- end
- -- particle_id = self.particle_mgr:AddPosEffect( res, co.TableXY(x, y), (play_time ~= 0), play_time, dir ,nil, nil, nil, nil, nil, max_depth)
- -- elseif pos_type == 7 then --特效沿攻击方向移动
- -- local move_speed = cfg.move_speed or 100
- -- local move_dist = cfg.move_dist or 300
- -- particle_id = self.particle_mgr:AddPosEffect( res, co.TableXY(x, y), true, 0 , dir, nil, nil, move_speed, move_dist, nil, max_depth)
- -- else
- -- particle_id = self.particle_mgr:AddTargetEffect(res, attacker, (play_time ~= 0), play_time, dir, attach_type, nil, nil, nil, max_depth)
- -- end
- -- if particle_id then
- -- if cfg.scale then
- -- self.particle_mgr:SetEffectScale(particle_id, cfg.scale)
- -- end
- -- self.particle_list[particle_id] = true
- -- end
- end
- end
- end
- end
- end
-
- function UIModelCommon:CreateEffect(obj_type, id, parent_go, action_name, effect_obj_type)
- if effect_obj_type then
- obj_type = effect_obj_type
- end
- if obj_type == SceneBaseType.Role or obj_type == SceneBaseType.MapModel then
- return
- end
- -- RT加载怪物模型时不加载一切特效
- if obj_type == SceneBaseType.Monster and self.model_type == UIModelCommon.ModelType.RT then
- return
- end
-
- self.cache_effect_list = self.cache_effect_list or {}
- local cache_effect_type = action_name and obj_type .. "_action" or obj_type
- if self.cache_effect_list[cache_effect_type] then
- for k,v in pairs(self.cache_effect_list[cache_effect_type]) do
- destroy(v.go)
- end
- end
- self.cache_effect_list[cache_effect_type] = {}
-
- local parent_go = parent_go or self.transform
- --武器要区分职业
- -- if obj_type and obj_type == SceneBaseType.FWeapon then
- -- print('=======Msh:UIModelCommon.lua[851] =======', id, action_name)
- -- PrintCallStack()
- -- end
- if obj_type and obj_type == SceneBaseType.FWeapon and id and tonumber(id) < 1000 then
- local career = self.career
- if not career and RoleManager.Instance and RoleManager.Instance.mainRoleInfo then
- career = RoleManager.Instance.mainRoleInfo.career
- end
- career = career or 1
- id = tonumber(id) + career*1000
- end
-
- local temp_cfg = Config.SceneObjectParticle[obj_type] and Config.SceneObjectParticle[obj_type][id]
- if action_name and action_name ~= "" then
- --动作特效
- temp_cfg = temp_cfg and temp_cfg.action_effect_list
- temp_cfg = temp_cfg and temp_cfg[action_name]
- -- self.last_action_effect_list = self.last_action_effect_list or {}
- else
- --模型特效
- temp_cfg = temp_cfg and temp_cfg.body_effect_list
- local temp_id = obj_type.."_"..id
- if self.last_effect_id and self.last_effect_id == temp_id then
- return
- end
- self.last_effect_id = temp_id
- end
-
- if not temp_cfg then
- return
- end
-
-
- local function on_load_res( bone_name, effect_vo )
- if not parent_go then
- return
- end
- local bone = FindBone(parent_go and parent_go.transform or self.transform, bone_name)
- if bone or effect_vo.is_world_particle then
- local function load_finish_func(objs, is_gameObject)
- if not objs or not objs[0] then
- return
- end
- if IsNull(bone) then
- if is_gameObject then destroy(objs[0]) end
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- table.insert(self.cache_effect_list[cache_effect_type], {go = go})
- if effect_vo.is_world_particle then
- AttachGameRoot(go.transform)
- else
- go.transform:SetParent(bone)
- end
- SetLocalPosition(go.transform)
- SetLocalRotation(go.transform)
- SetLocalScale(go.transform, 1)
- if effect_obj_type or (self.model_data and self.model_data.attach_game_root) then
- self:SetUILayer(go.transform, UIPartical.RenderingOther_List.DEFAULT)
- elseif ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(go.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(go.transform)
- end
-
- if not effect_obj_type then
- local effect_sortingOrder = self:GetCurrLayerDepth(self.layer_name)
- UIDepth.SetUIDepth(go,false,effect_sortingOrder)
- end
- end
- lua_resM:loadPrefab(self, effect_vo.name, effect_vo.name, load_finish_func, false)
- end
- end
-
- for key, effect_vo in pairs(temp_cfg) do
- local bone_name = effect_vo.bone
- if obj_type and obj_type == SceneBaseType.FWeapon then
- for k,v in pairs(self.weapon_container) do
- parent_go = v.go
- on_load_res(bone_name, effect_vo)
- end
- else
- on_load_res(bone_name, effect_vo)
- end
- end
- end
-
- --主动添加挂在自己身上的例子特效
- function UIModelCommon:AddParticle(id,particle_tranform,attach_type,is_weapon,effect_pos)
-
- if self._use_delete_method then
- return
- end
-
- if is_weapon then
- if self.weapon then
- local effect_root = self.weapon.transform:Find("Bone_wq")
- if effect_root then
- particle_tranform.parent = effect_root
- particle_tranform.localPosition = effect_pos or Vector3.zero
- particle_tranform.localRotation = Quaternion.Euler(0, 0, 0)
- particle_tranform.localScale = Vector3.one
- self.particle_list[id] = particle_tranform
- local effect = self.particle_mgr:GetEffect(id)
- if effect then
- effect:SetSpeed(self.particle_speed)
- end
- end
- end
- else
- local bone_name = ParticleAttachNode[attach_type]
- local transform = self.role
-
- if bone_name and transform then
- local bone = nil
- if bone_name == AttachNode.SceneObj then
- bone = transform
- else
- bone = FindBone(self.role.transform,bone_name)
- end
-
- if bone == nil then
- logWarn("AddParticle ".. transform.name .." cannot find bone " .. bone_name)
- return
- end
- particle_tranform.parent = bone.transform
- particle_tranform.localPosition = effect_pos or Vector3.zero
- if bone_name == AttachNode.SceneObj then
- particle_tranform.localRotation = Quaternion.Euler(self.rotateX, 0, 0)
- else
- particle_tranform.localRotation = Quaternion.Euler(0, 0, 0)
- end
- particle_tranform.localScale = Vector3.one
- self.particle_list[id] = particle_tranform
- local effect = self.particle_mgr:GetEffect(id)
- if effect then
- effect:SetSpeed(self.particle_speed)
- end
- end
- end
- end
-
- --删除挂在伙伴身上的特效
- --is_acive = false 被动删除挂在自己身上的粒子特效 由特效播放完来调用
- --is_acive = true 主动删除挂在自己身上的特效 会通知particlemanager去删除 默认false
- function UIModelCommon:RemoveParticle(id,is_acive)
- self.particle_list[id] = nil
- if is_acive then
- self.particle_mgr:DelEffect(id)
- end
- end
-
- function UIModelCommon:CheckShadow(go, name)
- --先不处理
- if true then
- return
- end
- if not go or not self.show_shadow then
- return
- end
- local scene_info =
- {
- shadow_angle = 60,
- shadow_alpha = 0.7,
- shadow_len = 7,
- }
- local scale = scene_info.shadow_len / 7
- local light_x = math.cos(scene_info.shadow_angle * math.pi / 180) * scale
- local light_z = (math.sin(scene_info.shadow_angle * math.pi / 180)) * scale
- local shadow2_mat_light_vector4 = self.model_data.shadow2_light_pos or Vector4(light_x, -1, light_z, 0)
- --local shadow2_mat_plane_vector4 = Vector4(0, 1, 0, 0.5)
- local shadow2_mat_plane_vector4 = self.model_data.shadow2_plane_pos or Vector4(0, 1, 0, 0.5)
- local render = go:GetComponentInChildren(typeof(UnityEngine.SkinnedMeshRenderer)) or go:GetComponentInChildren(typeof(UnityEngine.MeshRenderer))
- if render then
- local mats = render.sharedMaterials
- local lua_mats = {}
- local shadow_index = nil
- local mats_len = mats.Length
- local need_create_shadow = true
- local change = false
-
- for i = 0, mats_len - 1 do
- lua_mats[i + 1] = mats[i]
- if IsNull(mats[i]) then
- shadow_index = i + 1
- elseif string.find(mats[i].name, "shadow2", 1, true) then
- mats[i]:SetVector("_LightDir", shadow2_mat_light_vector4)
- mats[i]:SetFloat("_ShadowAlpha", scene_info.shadow_alpha)
- mats[i]:SetVector("_Plane", shadow2_mat_plane_vector4)
- -- self.shadow_timer_list[name] = {shadow2_mat_plane_vector4 = shadow2_mat_plane_vector4,material = mats[i]}
- need_create_shadow = false
- elseif mats[i].shader.name == "Unlit/Texture" or string.find(mats[i].shader.name, "XRay", 1, true) then
- mats[i].shader = ShaderTools.GetShader("Unlit-Texture-NoFog")
- change = true
- end
- end
-
- if not shadow_index then
- shadow_index = mats_len + 1
- end
- if not lua_mats[shadow_index] and need_create_shadow then
- local shadow2_mat = Material.New(ShaderTools.shadow2)
- shadow2_mat:SetVector("_LightDir", shadow2_mat_light_vector4)
- shadow2_mat:SetFloat("_ShadowAlpha", scene_info.shadow_alpha)
- shadow2_mat:SetVector("_Plane", shadow2_mat_plane_vector4)
- -- self.shadow_timer_list[name] = {shadow2_mat_plane_vector4 = shadow2_mat_plane_vector4,material = shadow2_mat}
- lua_mats[shadow_index] = shadow2_mat
- change = true
- end
-
- if change then
- render.materials = lua_mats
- end
- end
- end
-
-
- --主动删除挂在伙伴身上的特效
- function UIModelCommon:RemoveAllParticle()
- for id,_ in pairs(self.particle_list) do
- self.particle_mgr:DelEffect(id)
- end
- self.particle_list = {}
- end
-
- function UIModelCommon:GetCacheBones(transform, bone_name)
- self.cache_bones = self.cache_bones or {}
- local temp_bone = self.cache_bones[bone_name]
- if temp_bone and not IsNull(temp_bone) then
- return temp_bone
- end
-
- local transform = transform or self.transform
- temp_bone = FindBone(transform, bone_name)
- self.cache_bones[bone_name] = temp_bone
- return temp_bone
- end
-
- function UIModelCommon:StopSkillPreViewTimer()
- if self.duration_timer then
- GlobalTimerQuest:CancelQuest(self.duration_timer)
- self.duration_timer = nil
- end
- end
-
- function UIModelCommon:GetRolePositionOffset()
- local pos = Vector3(0, 0, 0)
- if self.role_position_offset and (self.type == SceneBaseType.Role or self.type == SceneBaseType.MainRole) and self.clothe_res_id then
- local career = 0
- career = math.floor(self.clothe_res_id / 1000 )
- if career and UIModelClassByRT.Role_Position_Offset[career] then
- pos = UIModelClassByRT.Role_Position_Offset[career]
- end
- end
- return pos
- end
-
- function UIModelCommon:ChangeModelLocalPosition(x, y, z)
- if not self.role then return end
- local offset = self:GetRolePositionOffset()
- x = x or (self.role.transform.localPosition.x - offset.x)
- y = y or (self.role.transform.localPosition.y - offset.y)
- z = z or (self.role.transform.localPosition.z - offset.z)
- self.role.transform.localPosition = Vector3(x, y, z) + offset
- end
-
- function UIModelCommon:GetModelDefaultLocalPosition( )
- return self.default_position
- end
-
-
- function UIModelCommon:SetData(parent,model_data)
-
- end
-
- function UIModelCommon:LoadRole(model_data, role_con)
- self.role_con = role_con
- self.model_data = model_data
- self.career = model_data.career
- self.clothe_res_id = model_data.clothe_res_id
- self.weapon_res_id = model_data.weapon_res_id
- self.weapon_clothe_id = model_data.weapon_clothe_id
- self.type = model_data.role_type or model_data.type or nil
- self.size = model_data.size or Vector2(600,360)
- model_data.action_name_list = model_data.action_name_list or {"show"}
- self.action_name_list = model_data.action_name_list
- self.replay_action_name = self.action_name_list[#self.action_name_list] or "show"
- self.can_rotate = model_data.can_rotate == nil or model_data.can_rotate == true
- self.scale = model_data.scale
- self.position = model_data.position
- self.fashion_model_id = model_data.fashion_model_id
- self.texture_id = model_data.texture_id
- self.action_delta = model_data.action_delta
- self.renderSize = model_data.renderSize
- self.partner_id = model_data.partner_id
- self.skill_id = model_data.skill_id
- self.lCallBack = model_data.lCallBack
- self.wing_id = model_data.wing_id
- self.image_id = model_data.image_id
- self.head_wear_id = model_data.head_wear_id
- self.head_clothe_id = model_data.head_clothe_id
- self.footmark_id = model_data.footmark_id
- self.light_id = model_data.light_id
- self.warSoul_effect_res = model_data.warSoul_effect_res
- self.warSoul_effect_pos = model_data.warSoul_effect_pos
- self.warSoul_effect_scale = model_data.warSoul_effect_scale
-
- self.use_bloom = model_data.use_bloom
- self.free_param = model_data.free_param
- self.pearl_vo = model_data.pearl_vo
- self.pearl_pos = model_data.pearl_pos
- self.rotate = model_data.rotate or 0
- if self.type == SceneBaseType.Include_Horse then--self.free_param为契兽id
- self.weapon_res_id = nil--坐骑上不要武器
- end
- if model_data.load_dance_pose then -- 如果是加载跳舞的模型,需要屏蔽武器
- self.weapon_res_id = nil
- end
- -- self.bloom_camera = self.gameObject.transform:Find("Camera/BloomClipCamera"):GetComponent("Camera")
- self.skill_preview = model_data.skill_preview
- self.skill_preview_callback = model_data.skill_preview_callback
- self.camera_args = model_data.camera_args
- self.using_material = model_data.using_material --or "render_texture"
- self.using_sprite_bg = model_data.using_sprite_bg
- self.role_position_offset = model_data.role_position_offset
- self.layer_name = model_data.layer_name or "UI"
-
- self.talisman_id = model_data.talisman_id
- self.show_reflection = model_data.show_reflection
- self.reflect_pos = model_data.reflect_pos
- self.show_root = model_data.show_root == nil and true or model_data.show_root
- self.hat_wear_id = model_data.hat_wear_id
- self.dynamic_bone = model_data.dynamic_bone
- self.use_light_data = model_data.use_light_data
- self.psionic_effect = model_data.psionic_effect -- 圣物光环特效
- self.pokemon_diamond_effect = model_data.pokemon_diamond_effect --宠物宝石光环特效
- self.show_baby_attack_effect = model_data.show_baby_attack_effect -- 宝宝攻击特效
- self.show_jarvis_all_figure_data = model_data.show_jarvis_all_figure_data -- ai娘模型展示包括翅膀磁炮幻甲全套装备,如有需要使用请参考排行榜传参
- self.effect_obj_type = model_data.effect_obj_type --特效主体类型
- self.role_action_sound = model_data.role_action_sound
- self.need_play_skill_effect = 101091 or model_data.need_play_skill_effect
- self.do_not_main_role_cloth_res_change = model_data.do_not_main_role_cloth_res_change--时装更改广播之后,不要刷新uimodelcommon的改变
-
- local anName,resName = GameResPath.GetModelClotheRes(self.type, self.clothe_res_id, self.dynamic_bone)
- if self.fashion_model_id then --时装
- anName,resName = GameResPath.GetModelClotheRes(self.type, self.fashion_model_id, self.dynamic_bone)
- elseif self.type == SceneBaseType.Baby_Include_Horse then -- 宝宝骑载具
- anName,resName = GameResPath.GetModelClotheRes(SceneBaseType.Baby, self.clothe_res_id, self.dynamic_bone)
- end
- local function loadRoleCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- return
- end
-
- self:RemoveAllParticle()
-
- if self.role then
- destroy(self.role)
- end
- self.role = is_gameObject and objs[0] or newObject(objs[0])
-
- local animator = self.role:GetComponent("Animator")
- if not IsNull(animator) then
- local custom_speed = Config.ConfigModelSpeed.ModelActionSpeed[tonumber(self.clothe_res_id)]
- if custom_speed then
- if animator then
- animator.speed = custom_speed
- end
- end
- if self.type == SceneBaseType.Role or self.type == SceneBaseType.MainRole then
- if animator then
- self.custom_speed = Config.ConfigModelSpeed.MainRoleActionSpeed.Idle
- animator.speed = self.custom_speed
- end
- end
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- end
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.Model or self.model_type == UIModelCommon.ModelType.BackModel then
- self.role.transform:SetParent(self.parent.transform)
- else
- self.role.transform:SetParent(role_con)
- end
- self.role.transform.localRotation = self.model_data.model_rotation and Quaternion.Euler(self.model_data.model_rotation) or Quaternion.identity
- self.transform = self.role.transform
- self.role.gameObject:SetActive(self.show_root)
- if self.type == SceneBaseType.Include_Horse or --self.free_param为契兽id
- self.type == SceneBaseType.Baby_Include_Horse then -- 普通载具或宝宝载具
- local horse_abName,horse_resName
- if self.type == SceneBaseType.Baby_Include_Horse then -- 宝宝载具
- horse_abName,horse_resName = GameResPath.GetModelClotheRes(SceneBaseType.Baby_Horse, self.free_param)
- elseif self.type == SceneBaseType.Include_Horse then -- 普通载具
- horse_abName,horse_resName = GameResPath.GetModelClotheRes(SceneBaseType.Horse, self.free_param)
- end
- local function loadHorseCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- return
- end
- if self.horse_gameObject then
- destroy(self.horse_gameObject)
- end
- self.horse_gameObject = is_gameObject and objs[0] or newObject(objs[0])
- self.horse_transform = self.horse_gameObject.transform
- self.horse_gameObject:GetComponent("Animator").cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- self.horse_transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.Model or self.model_type == UIModelCommon.ModelType.BackModel then
- self.horse_transform:SetParent(self.parent.transform)
- else
- self.horse_transform:SetParent(role_con)
- end
- self.horse_transform.localPosition = Vector3.zero
- if self.position then
- self.horse_transform.localPosition = Vector3(self.position.x, self.position.y,self.position.z)
- else
- self.horse_transform.localPosition = Vector3.zero
- end
-
- if self.scale then
- self.horse_transform.localScale = Vector3(self.scale*50,self.scale*50,self.scale*50)
- else
- self.horse_transform.localScale = Vector3.one
- end
-
- if self.transform then
- local bone = FindBone(self.horse_transform, AttachNode.Ride)
- if bone == nil then
- return
- end
- self.transform:SetParent(bone)
- self.transform.localPosition = Vector3.zero
- self.transform.localScale = Vector3.one
- self.transform.localRotation = Quaternion.Euler(Vector3.zero)
- end
-
- local rotate_type = type(self.rotate)
- if rotate_type == "number" then
- self.horse_transform:Rotate(Vector3(0, 270 + (self.rotate), 0))
- elseif rotate_type == "table" then
- self.horse_transform:Rotate(self.rotate)
- else
- self.horse_transform:Rotate(Vector3(0, self.rotate, 0))
- end
-
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- --部件特效,参数为部件类型与id
- if self.type ~= SceneBaseType.Baby_Include_Horse then
- self:CreateEffect(SceneBaseType.Horse, self.free_param, self.horse_gameObject)
- self:SetParticleDepth(self.horse_gameObject)
- end
-
- local horse_animator = self.horse_gameObject:GetComponent("Animator")
- self.horse_animator = horse_animator
- if self.horse_action_name then
- self.horse_animator:CrossFade(self.horse_action_name, 0, 0, 0)
- end
-
- --有坐骑的,加载完坐骑,才执行回调
- if self.lCallBack then self.lCallBack(self) end
- end
- LuaResManager:getInstance():loadPrefab(self,horse_abName,horse_resName, loadHorseCallback)
- end
-
- if self.model_data.attach_game_root then
- AttachGameRoot(self.role.transform)
- end
-
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- if self.type == SceneBaseType.Include_Horse or
- self.type == SceneBaseType.Baby_Include_Horse then
- self.role.transform.localPosition = Vector3.zero
- else
- self.role.transform.localPosition = self.position or Vector3(0,75,-300)
- end
- elseif self.model_type == UIModelCommon.ModelType.Model then
- if self.type == SceneBaseType.Include_Horse or
- self.type == SceneBaseType.Baby_Include_Horse then
- self.role.transform.localPosition = Vector3.zero
- else
- if self.position then
- self.role.transform.localPosition = self.position
- else
- self.role.transform.localPosition = Vector3.zero
- end
- end
- else
- if self.type == SceneBaseType.Include_Horse or
- self.type == SceneBaseType.Baby_Include_Horse then
- self.role.transform.localPosition = Vector3.zero
- else
- if self.position and not self.show_shadow then
- self.role.transform.localPosition = self.position + self:GetRolePositionOffset()
- else
- if self.show_shadow then
- self.role.transform.localPosition = Vector3(0, 119, 0) + self:GetRolePositionOffset()
- else
- self.role.transform.localPosition = Vector3.zero + self:GetRolePositionOffset()
- end
- end
- end
- end
-
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- -- if self.type == SceneBaseType.Equip or self.type == SceneBaseType.FWing or self.type == SceneBaseType.MainRole then
- local shinned_meshRender_com_list = self.role:GetComponentsInChildren(typeof(UnityEngine.SkinnedMeshRenderer),true)
- if shinned_meshRender_com_list.Length > 0 then
- for i=1,shinned_meshRender_com_list.Length do
- shinned_meshRender_com_list[i-1].sortingOrder = self:GetCurrLayerDepth(self.layer_name)
- -- shinned_meshRender_com_list[i-1].sortingOrder = self:GetCurrLayerDepth(self.layer_name)+1
- end
- end
- -- end
- end
-
- -- 保存一次默认坐标
- self.default_position = self.default_position or self.role.transform.localPosition
- if self.scale then
- if self.type == SceneBaseType.Include_Horse or
- self.type == SceneBaseType.Baby_Include_Horse then
- --如果是坐骑模式,这里不要重新设置角色的scale,否则会导致大人开小车或小人开大车的情况
- else
- self.role.transform.localScale = Vector3(self.scale,self.scale,self.scale)
- end
- else
- self.role.transform.localScale = Vector3(100,100,100)
- end
- if self.type == SceneBaseType.Include_Horse or
- self.type == SceneBaseType.Baby_Include_Horse then
- --如果是坐骑模式,也没必要再设置rotate了
- else
- local rotate_type = type(self.rotate)
- if rotate_type == "number" then
- local rotate_x = 0
- if self.model_type == UIModelCommon.ModelType.Model and self.rotate == 0 then
- rotate_x = 10
- end
- self.role.transform:Rotate(Vector3(rotate_x, 180 + (self.rotate), 0))
- self.rotate = self.rotate or self.rotate
- elseif rotate_type == "table" then
- self.role.transform:Rotate(self.rotate)
- self.rotate = self.rotate.y or self.rotate.y
- else
- self.role.transform:Rotate(Vector3(0, 180, 0))
- self.rotate = self.rotate or 0
- end
- end
-
- --主体模型特效,参数为主体的类型与id
- self:CreateEffect(self.type, self.clothe_res_id, nil, nil, self.effect_obj_type)
-
- local real_model = self.role.gameObject.transform:Find(resName)
- if real_model then
- self:CheckShadow(real_model, resName)
- end
-
- local action_delta = model_data.action_delta
- local action_name_list = model_data.action_name_list
- if not IsTableEmpty(action_name_list) then
- local action_name = action_delta and action_name_list[1] or table.remove(action_name_list, 1)
- if action_name then
- local animator = self.role:GetComponent("Animator")
- if IsNull(animator) then
- return
- end
- --用来判断是否是骑着马的
- if self.type == SceneBaseType.Include_Horse then
- local ride_action_cfg = Config.otherFightInfo.on_horse_action[self.free_param] or Config.otherFightInfo.on_horse_action[0]
- self.horse_action_name = action_name
- if self.horse_animator then
- self.horse_animator:CrossFade(action_name, 0, 0, 0)
- end
- if action_name == "idle" or action_name == "casual" or action_name == "hited" or action_name == "show" then
- if ride_action_cfg then
- self.curr_body_action_name = ride_action_cfg.idle_action
- else
- self.curr_body_action_name = "ride"
- end
- elseif action_name == "run" or action_name == "fly" then
- if ride_action_cfg then
- self.curr_body_action_name = ride_action_cfg.run_action
- else
- self.curr_body_action_name = "riderun"
- end
- end
- elseif self.type == SceneBaseType.Baby_Include_Horse then -- 宝宝坐骑
- local ride_action_cfg = Config.otherFightInfo.on_baby_horse_action[self.free_param] or Config.otherFightInfo.on_baby_horse_action[0]
- self.horse_action_name = action_name
- if self.horse_animator then
- self.horse_animator:CrossFade(action_name, 0, 0, 0)
- end
- if action_name == "idle" or action_name == "casual" or action_name == "hited" or action_name == "show" then
- if ride_action_cfg then
- self.curr_body_action_name = ride_action_cfg.idle_action
- else
- self.curr_body_action_name = "ride"
- end
- elseif action_name == "run" or action_name == "fly" then
- if ride_action_cfg then
- self.curr_body_action_name = ride_action_cfg.run_action
- else
- self.curr_body_action_name = "ride"
- end
- end
- else
- self.curr_body_action_name = action_name
- end
- --动作音效
- if self.role_action_sound then
- lua_soundM:PlayEffect(self, self.role_action_sound, false, LuaSoundManager.SOUND_TYPE.ROLE, 1)
- end
- --动作
- animator:CrossFade(self.curr_body_action_name,0, 0.0 )
- --动作特效
- self:CreateEffect(self.type, self.clothe_res_id, self.role, self.curr_body_action_name)
- if not IsTableEmpty(action_name_list) then
- self.delay_play_action_timer_list = self.delay_play_action_timer_list or {}
- if action_delta then
- self:DelayPlayNextActionLoop(animator, action_name_list, action_delta)
- else
- self:DelayPlayNextAction(animator, action_name_list, model_data.delay_action_delta)
- end
- end
- end
- else
- end
- if self.weapon_res_id and self.weapon_res_id ~= 0 then
- self:CreateWeapon(self.type, self.weapon_res_id, self.career, self.weapon_clothe_id)
- self:CreateClothTexture(self.fashion_model_id, self.texture_id)
- end
-
- if self.pearl_vo then
- self:CreatePearls(self.pearl_vo)
- end
-
- if self.wing_id then
- self:CreateWing(SceneBaseType.FWing, self.wing_id)
- end
- if self.image_id then
- self:CreateLivenessImage(self.type,self.image_id)
- end
-
- if self.head_wear_id then
- self:CreateHeadWear(self.type, self.head_wear_id, self.head_clothe_id)
- end
-
- if self.hat_wear_id then
- self:CreateHatWear(self.hat_wear_id)
- end
-
- if self.footmark_id then
- self:CreateFootmark(self.footmark_id)
- end
- --针对怪物跟伙伴的贴图设置材质图片
- if self.texture_id and (self.type == SceneBaseType.Partner or self.type == SceneBaseType.Monster or self.type == SceneBaseType.Npc or SceneBaseType.Horse) then
- self:CreateClothTexture(self.clothe_res_id, self.texture_id)
- end
-
- if self.light_id and self.light_id > 0 then
- --挂人物身上的幻光在这里加
- self:CreateLightEffect(self.light_id)
- end
-
- if self.warSoul_effect_res and self.warSoul_effect_res ~= nil then
- self:CreateWarSoulEffect(self.warSoul_effect_res,self.warSoul_effect_pos,self.warSoul_effect_scale)
- end
-
- --宝具
- if self.talisman_id and self.talisman_id ~= 0 then
- self:CreateTalisman(self.talisman_id)
- end
-
- self:SetCameraArgs()
-
- -- if self.use_bloom then
- -- self:CreateRoleBloomEffect(self.camera, self.bloom_camera)
- -- end
-
- --如果不是坐骑模式,才加载完人物模型返回加载回调
- if self.type ~= SceneBaseType.Include_Horse or
- self.type == SceneBaseType.Baby_Include_Horse then
- if self.lCallBack then self.lCallBack(self) end
- end
-
- -- 发行需求 设置绿幕模式
- self:UpdateModelGreenScreen()
-
- --灯光参数
- if self.use_light_data then
- self:ApplyLightData()
- end
- -- 圣物光环特效
- if self.psionic_effect then
- local show_type = (self.model_type == UIModelCommon.ModelType.BackModel) and "UIBackRole" or "UI"
- local function load_callback( ... )
- if self.psionic_effect_id then
- self.particle_mgr:SetEffectScale(self.psionic_effect_id, PsionicConst.EffectSize[self.psionic_effect])
- self.particle_mgr:SetEffectOrder(self.psionic_effect_id, self:GetCurrLayerDepth(self.layer_name))
- end
- end
- self.psionic_effect_id = self.particle_mgr:AddTargetEffect(self.psionic_effect, self.role, true, nil, nil, 7,nil,nil,1,nil,show_type,load_callback)
- self.particle_list[self.psionic_effect_id] = self.psionic_effect_id
- end
-
- --宠物宝石光环特效
- if self.type == SceneBaseType.Pokemon and self.pokemon_diamond_effect then
- local show_type = (self.model_type == UIModelCommon.ModelType.BackModel) and "UIBackRole" or "UI"
- self.pokemon_diamond_effect_id = self.particle_mgr:AddTargetEffect(self.pokemon_diamond_effect, self.role, true, nil, nil, 7,nil,nil,1,nil,show_type)
- self.particle_list[self.pokemon_diamond_effect_id] = self.pokemon_diamond_effect_id
- end
-
- if self.show_baby_attack_effect then
- local play_effect_func = function ( )
- local show_type = (self.model_type == UIModelCommon.ModelType.BackModel) and "UIBackRole" or "UI"
- local temp_cfg = ChildConst.SKILL_EFFECT_SHOW_CFG[self.show_baby_attack_effect] or {}
- -- local scale = temp_cfg.scale or 0.5
- self.show_baby_attack_effect_id = self.particle_mgr:AddTargetEffect(self.show_baby_attack_effect, self.role, false, nil, dir, 7,nil,nil,1,nil, show_type)
- if temp_cfg.scale then
- -- print('Msh:UIModelCommon.lua[1543] temp_cfg.scale', temp_cfg.scale)
- self.particle_mgr:SetEffectScale(self.show_baby_attack_effect_id, temp_cfg.scale)
- end
- self.particle_list[self.show_baby_attack_effect_id] = self.show_baby_attack_effect_id
- end
- setTimeout(play_effect_func, 0.4)
- end
-
- --ai娘全套装备模型展示
- if self.type == SceneBaseType.Pet and self.show_jarvis_all_figure_data then
- self:CreateJarvisAll()
- end
-
- --技能特效
- if self.need_play_skill_effect then
- self:PlaySkillEffect(self.role, self.skill_id)
- end
- end
-
- if self.type == SceneBaseType.FWeapon then
- --创建左右手武器,单独显示用,不走上面的逻辑
- local career = self.career or RoleManager.Instance.mainRoleInfo.career
- local weapon_res_id = GameResPath:GetFWeaponResName( career,self.fashion_model_id or self.clothe_res_id )
- local abName,weapon_attach_list,weapon_res_list = GameResPath.GetWeaponRes(SceneBaseType.FWeapon,weapon_res_id,career)
- local function localWeaponCallback( objs, is_gameObject )
- if self.weapon_container then
- for k,v in pairs(self.weapon_container) do
- destroy(v.go)
- end
- end
- self:CreateWeaponOnly(objs, is_gameObject, weapon_attach_list)
- -- 发行需求 设置绿幕模式
- self:UpdateModelGreenScreen()
- end
- LuaResManager:getInstance():loadPrefabs(self,abName,weapon_res_list, localWeaponCallback)
- else
- LuaResManager:getInstance():loadPrefab(self,anName,resName, loadRoleCallback)
- end
- end
-
- function UIModelCommon:SetCameraArgs(use_default)
-
- end
-
- ---------排行榜ai娘总榜把ai娘的磁炮星翼幻甲等全套装备一起展示出来-------------------------->>>>>>>
- function UIModelCommon:CreateJarvisAll( )
- self:CreateJarvisGun()--磁炮
- self:CreateJarvisCloud()--星翼
- self:CreateJarvisArmour()--幻甲
- end
- function UIModelCommon:CreateJarvisGun( )
- if not self.show_jarvis_all_figure_data.f_gun_figure_id then return end
- local abName, resName = GameResPath.GetModelClotheRes(SceneBaseType.FGun, self.show_jarvis_all_figure_data.f_gun_figure_id)
- local function localGunCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find wing res = "..self.show_jarvis_all_figure_data.f_gun_figure_id)
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- local bone = FindBone(self.role.transform, AttachNode.Root)
- if bone == nil then
- return
- end
- go.transform:SetParent(bone)
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- local animator = go:GetComponent("Animator")
- if not IsNull(animator) then
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- animator:CrossFade( "idle",0, 0.0 )
- end
-
- --部件特效,参数为部件类型与id
- self:CreateEffect(SceneBaseType.FGun, self.show_jarvis_all_figure_data.f_gun_figure_id, go)
- end
- if self.role.transform and abName and resName then
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localGunCallback)
- end
- end
- function UIModelCommon:CreateJarvisCloud( )
- if not self.show_jarvis_all_figure_data.f_cloud_figure_id then return end
- local abName, resName = GameResPath.GetModelClotheRes(SceneBaseType.FCloud, self.show_jarvis_all_figure_data.f_cloud_figure_id)
- local function localWingCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find wing res = "..self.show_jarvis_all_figure_data.f_cloud_figure_id)
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- local bone = FindBone(self.role.transform, AttachNode.Wing)
- if bone == nil then
- return
- end
- go.transform:SetParent(bone)
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- local animator = go:GetComponent("Animator")
- if not IsNull(animator) then
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- animator:CrossFade( "idle",0, 0.0 )
- end
-
- --部件特效,参数为部件类型与id
- self:CreateEffect(SceneBaseType.FCloud, self.show_jarvis_all_figure_data.f_cloud_figure_id, go)
- end
- if self.role.transform and abName and resName then
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localWingCallback)
- end
- end
- function UIModelCommon:CreateJarvisArmour( )
- if not self.show_jarvis_all_figure_data.f_armour_figure_id then return end
- local abName, resName = GameResPath.GetModelClotheRes(SceneBaseType.FArmour, self.show_jarvis_all_figure_data.f_armour_figure_id)
- local function localWingCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find wing res = "..self.show_jarvis_all_figure_data.f_armour_figure_id)
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- local bone = FindBone(self.role.transform, AttachNode.Root)
- if bone == nil then
- return
- end
- go.transform:SetParent(bone)
- go.transform.localPosition = Vector3.zero
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- local animator = go:GetComponent("Animator")
- if not IsNull(animator) then
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- animator:CrossFade( "idle",0, 0.0 )
- end
-
- --部件特效,参数为部件类型与id
- self:CreateEffect(SceneBaseType.FArmour, self.show_jarvis_all_figure_data.f_armour_figure_id, go)
- end
- if self.role.transform and abName and resName then
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localWingCallback)
- end
- end
- ---------排行榜ai娘总榜把ai娘的磁炮星翼幻甲等全套装备一起展示出来--------------------------<<<<<<<<<<<<
-
-
-
-
- function UIModelCommon:CreatePearls( vo )
- if IsTableEmpty(vo) then
- return
- end
- if self.transform and self.role.transform then
- local info = vo
- self.pearl_list = self.pearl_list or {}
- self.pearl_parent = self.pearl_parent or {}
- local ellipse_config = Config.otherFightInfo.PearlEllipse
- local around_ellipse_config = Config.otherFightInfo.PearlUIEllipse
- for i=1, #info do
- if info[i] and info[i].type_id ~= 0 or info[i].skin_model_id then
- local temp_pearl = self.pearl_list[i]
- if not temp_pearl then
- temp_pearl = GalaxyPearl.New(self.role.transform,ellipse_config,around_ellipse_config)
- temp_pearl:SetStartPostion(1/#info * i)
- self.pearl_list[i] = temp_pearl
- end
- temp_pearl:LoadPearlVo(self, false, info[i], false, info[i].skin_model_id, true)
- end
- end
- end
-
- end
-
- --在人物旁边展示宝具
- function UIModelCommon:CreateTalisman(talisman_id)
- _type = SceneBaseType.FPearl
- local abName, resName = GameResPath.GetModelClotheRes(_type, talisman_id)
- local function localTalismanCallback(objs, is_gameObject)
- if self._use_delete_method then
- return
- end
- if not objs or not objs[0] then
- logWarn("cannot find talisman res = "..self.talisman_id)
- return
- end
- local go = is_gameObject and objs[0] or newObject(objs[0])
- go:SetActive(true)
- -- local bone = FindBone(self.role.transform, AttachNode.Wing)
- -- if bone == nil then
- -- return
- -- end
- go.transform:SetParent(self.role.transform)
- go.transform.localPosition = Vector3(-0.8,0.6,-0.8)
- go.transform.localRotation = Quaternion.identity
- go.transform.localScale = Vector3.one
-
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(self.parent.transform)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(self.parent.transform)
- end
- local animator = go:GetComponent("Animator")
- if not IsNull(animator) then
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- animator:CrossFade( "idle",0, 0.0 )
- end
-
- --部件特效,参数为部件类型与id
- self:CreateEffect(SceneBaseType.FPearl, self.talisman_id, go)
- end
- if self.role.transform and abName and resName then
- LuaResManager:getInstance():loadPrefab(self,abName,resName, localTalismanCallback)
- end
- end
-
- --创建左右手武器,单独显示用
- function UIModelCommon:CreateWeaponOnly(objs,is_gameObject,weapon_attach_list)
- if self._use_delete_method then return end
- self.weapon_hand_list = self.weapon_hand_list or {}
- self.weapon_container = {}
- -------------------------
- self:RemoveAllParticle()
- if self.role then
- destroy(self.role)
- end
- -------------------------
- for i,v in ipairs(weapon_attach_list) do
- if self.weapon_hand_list[i] then
- destroy(self.weapon_hand_list[i])
- end
- if objs and objs[i - 1] then
- self.weapon_hand_list[i] = is_gameObject and objs[i] or newObject(objs[i - 1])
- self.weapon_container[i] = {go = self.weapon_hand_list[i]}
- local animator = self.weapon_hand_list[i]:GetComponent("Animator")
- if not IsNull(animator) then
- local custom_speed = Config.ConfigModelSpeed.ModelActionSpeed[tonumber(self.clothe_res_id)]
- if custom_speed then
- if animator then
- animator.speed = custom_speed
- end
- end
- animator.cullingMode = UnityEngine.AnimatorCullingMode.AlwaysAnimate
- end
- local paredt_node = false
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.Model or self.model_type == UIModelCommon.ModelType.BackModel then
- paredt_node = self.parent.transform
- else
- paredt_node = self.role_con
- end
- self.weapon_hand_list[i].transform:SetParent(paredt_node)
- -------------------------
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self:SetUIbackRoleLayer(paredt_node)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- self:SetUILayer(paredt_node)
- end
- --角度,要反向
- self.weapon_hand_list[i].transform.localRotation = Quaternion.Euler(Vector3(0,180,0))
- --缩放
- if self.scale then
- self.weapon_hand_list[i].transform.localScale = Vector3(self.scale,self.scale,self.scale)
- else
- self.weapon_hand_list[i].transform.localScale = Vector3(100,100,100)
- end
- --坐标
- if ClientConfig.is_use_model_render or self.model_type == UIModelCommon.ModelType.BackModel then
- self.weapon_hand_list[i].transform.localPosition = self.position or Vector3(0,75,-300)
- elseif self.model_type == UIModelCommon.ModelType.Model then
- if self.position then
- self.weapon_hand_list[i].transform.localPosition = self.position
- else
- self.weapon_hand_list[i].transform.localPosition = Vector3.zero
- end
- else
- if self.position and not self.show_shadow then
- self.weapon_hand_list[i].transform.localPosition = self.position + self:GetRolePositionOffset()
- else
- if self.show_shadow then
- self.weapon_hand_list[i].transform.localPosition = Vector3(0, 119, 0) + self:GetRolePositionOffset()
- else
- self.weapon_hand_list[i].transform.localPosition = Vector3.zero + self:GetRolePositionOffset()
- end
- end
- end
-
- local action_delta = self.action_delta
- local action_name_list = self.action_name_list
- local animator = self.weapon_hand_list[i]:GetComponent("Animator")
- if IsNull(animator) then
- return
- end
- animator:CrossFade("show3",0, 0.0 )
- --动作特效
- if not IsTableEmpty(action_name_list) then
- if action_delta then
- self:DelayPlayNextActionLoop(animator, action_name_list, action_delta)
- else
- self:DelayPlayNextAction(animator, action_name_list)
- end
- end
- end
- end
- self:CreateEffect(self.type, self.clothe_res_id, self.role)
- end
-
- -- 发行需求:切换绿幕
- function UIModelCommon:UpdateModelGreenScreen( )
- -- 获取模型节点根节点
- if self.model_data and self.model_data.use_green_screen then
- -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
- CheatModel:getInstance():SetupGreenScreenEffect(true, self, self.model_data.green_screen_camera_type)
- end
- end
-
- --灯光参数
- function UIModelCommon:ApplyLightData( )
- self:ApplyCameraLightData()
-
- local cfg = Config.lightsData
- local temp_vet4 = Vector4(0,0,0,0)
- for k,v in pairs(cfg) do
- temp_vet4.x = v[1]
- temp_vet4.y = v[2]
- temp_vet4.z = v[3]
- temp_vet4.w = v[4]
- Shader.SetGlobalVector(k, temp_vet4)
- end
- end
-
- function UIModelCommon:ApplyCameraLightData( )
- local light_camera = MainCamera.Instance.camera_gameObject
- if not IsNull(light_camera) then
- local dir = -light_camera.transform.forward;
- dir:Normalize()
- Shader.SetGlobalVector("_GlobalLightDir", Vector4(dir.x, dir.y, dir.z, 1))
- end
- end
-
- function UIModelCommon:SetAnimatorSpeed(speed)
- if self.role then
- local animator = self.role:GetComponent("Animator")
- if animator then
- animator.speed = speed
- end
- end
- end
|