public EffectList(EffectPack effectPack) { EffectPack = effectPack; Effects = new List <Effect>(); IsLoading = true; DestroyTime = 0.0f; }
/// <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); }
/// <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)); }
/// <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(); } }
/// <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); }
public void AddEffectPack(EffectPack effectPack) { EffectPack.Add(effectPack); }
public void Apply(EffectPack effectPack) { }
/// <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)); }
/// <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(); } }