Beispiel #1
0
 public EffectList(EffectPack effectPack)
 {
     EffectPack  = effectPack;
     Effects     = new List <Effect>();
     IsLoading   = true;
     DestroyTime = 0.0f;
 }
Beispiel #2
0
        /// <summary>
        /// 预加载EffectPack
        /// </summary>
        /// <param name="effectPack">要加载的EffectPack</param>
        /// <returns>EffectPack对应的EffectList</returns>
        public EffectList PreLoadEffects(EffectPack effectPack)
        {
            EffectList effectList = new EffectList(effectPack);

            m_loadingEffectList.Enqueue(effectList);
            return(effectList);
        }
Beispiel #3
0
        /// <summary>
        /// 指定位置创建EffectPlayer
        /// </summary>
        /// <param name="position">EffectPlayer的坐标</param>
        /// <param name="rotation">EffectPlayer的角度</param>
        /// <param name="effectPack">存有多个特效</param>
        /// <returns></returns>
        public EffectPlayer CreateEffect(Vector3 position, Quaternion rotation, EffectPack effectPack)
        {
            GameObject refObject = CreateObject(name);

            refObject.transform.position = position;
            refObject.transform.rotation = rotation;
            return(RegisterEffectPlayer(refObject, effectPack, true));
        }
Beispiel #4
0
    /// <summary>
    /// 绘制Audio列表
    /// </summary>
    /// <param name="targets"></param>
    private void DrawAudioList(UnityEngine.Object[] targets)
    {
        EffectPack effectPack = targets[0] as EffectPack;

        for (int i = 0; i < effectPack.AudioAttrs.Count;)
        {
            m_audioAttr.Copy(effectPack.AudioAttrs[i]);
            string header = ((m_audioAttr.AudioName != null) ? m_audioAttr.AudioName : string.Empty);//标题
            if (LayoutUtility.Foldout(header))
            {
                LayoutUtility.BeginContents();
                if (GUILayout.Button("", "ToggleMixed", GUILayout.Width(20f)))
                {
                    UnityEditor.Undo.RecordObjects(targets, "Remove AudioClip");
                    for (int j = 0; j < targets.Length; ++j)
                    {
                        (targets[j] as EffectPack).AudioAttrs.RemoveAt(i);
                        EditorUtility.SetDirty(targets[j]);
                    }
                }
                else
                {
                    DrawAudioAttribute(m_audioAttr);
                    if (!m_audioAttr.Equals(effectPack.AudioAttrs[i]))
                    {
                        UnityEditor.Undo.RecordObjects(targets, "Modify AudioClip");
                        for (int j = 0; j < targets.Length; ++j)
                        {
                            (targets[j] as EffectPack).AudioAttrs[i].Copy(m_audioAttr);
                            EditorUtility.SetDirty(targets[j]);
                        }
                    }
                }
                LayoutUtility.EndContents();
            }
            ++i;
        }

        // 绘制加入新的Audio的选项
        if (LayoutUtility.Foldout("Add New AudioClip"))
        {
            LayoutUtility.BeginContents();
            string audioName = LayoutUtility.AudioFiled("Audio Clip", null);
            if (audioName != null)
            {
                UnityEditor.Undo.RecordObjects(targets, "Add Audio Clip");
                for (int j = 0; j < targets.Length; ++j)
                {
                    EffectPack.AudioAttr audioAttr = new EffectPack.AudioAttr();
                    audioAttr.AudioName = audioName;
                    audioAttr.AudioPath = EffectConfig.Instance.AudioClipPath + "/" + audioName;
                    (targets[j] as EffectPack).AudioAttrs.Add(audioAttr);
                    EditorUtility.SetDirty(targets[j]);
                }
            }
            LayoutUtility.EndContents();
        }
    }
Beispiel #5
0
        /// <summary>
        /// 注册EffectPlayer
        /// </summary>
        /// <param name="refObject">EffectPlayer跟随的物体</param>
        /// <param name="effectPack">和EffectPlayer关联的EffectPack</param>
        /// <returns></returns>
        private EffectPlayer RegisterEffectPlayer(GameObject refObject, EffectPack effectPack, bool isNeedClean)
        {
            EffectPlayer effectPlayer = refObject.AddComponent <EffectPlayer>();

            if (effectPlayer)
            {
                effectPlayer.EffectPack          = effectPack;
                effectPlayer.EffectList          = PreLoadEffects(effectPack);
                effectPlayer.IsObjectNeedDestroy = isNeedClean;
                return(effectPlayer);
            }
            return(null);
        }
Beispiel #6
0
 public void AddEffectPack(EffectPack effectPack)
 {
     EffectPack.Add(effectPack);
 }
Beispiel #7
0
 public void Apply(EffectPack effectPack)
 {
 }
Beispiel #8
0
 /// <summary>
 /// 创建EffectPlayer
 /// </summary>
 /// <param name="refObject">EffectPlayer跟随的物体</param>
 /// <param name="effectPack">存有多个特效</param>
 /// <returns></returns>
 public EffectPlayer CreatEffect(GameObject refObject, EffectPack effectPack)
 {
     return(RegisterEffectPlayer(refObject, effectPack, false));
 }
Beispiel #9
0
    /// <summary>
    /// 绘制attribute的列表
    /// </summary>
    /// <param name="targets"></param>
    private void DrawEffectList(UnityEngine.Object[] targets)
    {
        EffectPack effectPack = targets[0] as EffectPack;

        for (int i = 0; i < effectPack.Attributes.Count;)
        {
            bool isEqual = true;

            for (int j = 1; j < targets.Length; ++j)
            {
                if (!effectPack.Attributes[i].Equals((targets[j] as EffectPack).Attributes[i]))
                {
                    isEqual = false;
                    break;
                }
            }

            if (isEqual)
            {
                m_attribute.Copy(effectPack.Attributes[i]);

                string header = ((m_attribute.EffectName != null) ? m_attribute.EffectName : string.Empty);

                if (LayoutUtility.Foldout(header))
                {
                    LayoutUtility.BeginContents();

                    if (GUILayout.Button("", "ToggleMixed", GUILayout.Width(20f)))
                    {
                        UnityEditor.Undo.RecordObjects(targets, "Remove Effect Attribute");
                        for (int j = 0; j < targets.Length; ++j)
                        {
                            (targets[j] as EffectPack).Attributes.RemoveAt(i);
                            EditorUtility.SetDirty(targets[j]);
                        }
                    }
                    else
                    {
                        DrawEffectAttribute(m_attribute);
                        if (!m_attribute.Equals(effectPack.Attributes[i]))
                        {
                            UnityEditor.Undo.RecordObjects(targets, "Modify Effect Attribute");
                            for (int j = 0; j < targets.Length; ++j)
                            {
                                (targets[j] as EffectPack).Attributes[i].Copy(m_attribute);
                                EditorUtility.SetDirty(targets[j]);
                            }
                        }
                    }
                    LayoutUtility.EndContents();
                }
            }
            ++i;
        }

        // 绘制加入新的Effect的选项
        if (LayoutUtility.Foldout("Add Effect Attribute"))
        {
            LayoutUtility.BeginContents();
            string effectName = LayoutUtility.PrefabFiled("Effect", null);
            if (effectName != null)
            {
                UnityEditor.Undo.RecordObjects(targets, "Add Effect Attribute");

                for (int j = 0; j < targets.Length; ++j)
                {
                    EffectPack.Attribute attribute = new EffectPack.Attribute();
                    attribute.EffectName = effectName;
                    attribute.EffectPath = Config.EffectsRoot + "/" + effectName;
                    (targets[j] as EffectPack).Attributes.Add(attribute);
                    EditorUtility.SetDirty(targets[j]);
                }
            }
            LayoutUtility.EndContents();
        }
    }