static int __CreateInstance(RealStatePtr L) { ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L); try { if (LuaAPI.lua_gettop(L) == 1) { DelayDestroyComponent __cl_gen_ret = new DelayDestroyComponent(); translator.Push(L, __cl_gen_ret); return(1); } } catch (System.Exception __gen_e) { return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e)); } return(LuaAPI.luaL_error(L, "invalid arguments to DelayDestroyComponent constructor!")); }
/// <summary> /// 特效资源加载完毕后的回调 /// </summary> /// <param name="effect_object">加载的特效物体</param> void InitEffectObject(GameObject effect_object) { if (effect_object == null) { return; } m_EffectObject = effect_object; // 重新激活特效 m_EffectObject.SetActive(false); m_EffectObject.SetActive(true); Transform effect_trans = m_EffectObject.transform; BindAudio(m_EffectObject); if (m_BindTarget == null) { GameObject.Destroy(effect_trans.gameObject); OnObjectDestroy(null); GameDebug.LogError("[InitEffectObject]m_BindTarget is null"); return; } if (mResData.FollowTarget == false) // 不跟随骨骼移动 { if (string.IsNullOrEmpty(mResData.BindNode)) // 没有骨骼信息 { effect_trans.position = m_BindTarget.transform.position; effect_trans.rotation = m_BindTarget.transform.rotation; } else// 有骨骼信息 { Transform bone_trans = ModelHelper.FindChildInHierarchy(m_BindTarget.transform, mResData.BindNode); if (bone_trans != null) { effect_trans.position = bone_trans.position; effect_trans.rotation = bone_trans.rotation; effect_trans.localScale = Vector3.one; } else { GameObject.Destroy(effect_trans.gameObject); OnObjectDestroy(null); GameDebug.LogError(string.Format("[InitEffectObject]m_BindTarget's bind node {0} is null", mResData.BindNode)); } } } else // 跟随骨骼移动 { Transform bone_trans = null; if (!string.IsNullOrEmpty(mResData.BindNode)) { bone_trans = ModelHelper.FindChildInHierarchy(m_BindTarget.transform, mResData.BindNode); // 角色模型资源可能没有加载完毕,获取不到骨骼信息 if (bone_trans == null && m_BindTarget.transform != null) { bone_trans = m_BindTarget.transform; } } else if (m_BindTarget != null) { bone_trans = m_BindTarget.transform; } if (bone_trans != null) { effect_trans.position = bone_trans.position; effect_trans.parent = bone_trans; effect_trans.rotation = bone_trans.rotation; effect_trans.localScale = Vector3.one; } else { GameObject.Destroy(effect_trans.gameObject); OnObjectDestroy(null); GameDebug.Log(string.Format("[InitEffectObject]bindtarget's bind node {0} is null", mResData.BindNode)); } } // 此处需要销毁,不然通过InstaGameObject获取不到新的物体(需要重构) // 将特效的删除修改为取消激活,以免GameObject的频繁实例化 /*DelayEnableComponent kDelayEnableComponent = m_EffectObject.GetComponent<DelayEnableComponent>(); * if(kDelayEnableComponent == null) * kDelayEnableComponent = m_EffectObject.AddComponent<DelayEnableComponent>(); * kDelayEnableComponent.DelayTime = mResData.EndTime; * kDelayEnableComponent.SetEnable = false; * kDelayEnableComponent.Start();*/ //特效生命周期的2倍时间后销毁 DelayDestroyComponent kDestroyComponent = m_EffectObject.GetComponent <DelayDestroyComponent>(); if (kDestroyComponent == null) { kDestroyComponent = m_EffectObject.AddComponent <DelayDestroyComponent>(); } kDestroyComponent.DelayTime = mResData.EndTime;// * 2.0f; kDestroyComponent.AddEndCallBack(new DelayDestroyComponent.EndCallBackInfo(OnObjectDestroy, m_EffectObject)); kDestroyComponent.Start(); ParticleControl particle_control = effect_object.GetComponent <ParticleControl>(); if (particle_control == null) { particle_control = effect_object.AddComponent <ParticleControl>(); } particle_control.Scale = mResData.AutoScale ? m_TargetRadius / GlobalConst.StandardRadius : 1.0f; }