コード例 #1
0
        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!"));
        }
コード例 #2
0
ファイル: AnimationEffect.cs プロジェクト: wuhuolong/MaxBooks
        /// <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;
        }