using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Plugins.Options; using UnityEngine.UI; namespace TFramework { /// /// Ч�������� /// public partial class EffectManager : BaseManager { public Material m_outlineMaskMaterial; public Material m_outlineFillMaterial; public Material m_hihghlightMaterial; public bool m_openHighlight; public Color m_defaultHighlightColor; public Color m_defaultOutlineColor; private Dictionary> _gameObjHighlightDic = new Dictionary>(); private Color Alpha = new Color(1, 1, 1, 0); #region 3D对象高亮 /// /// 开启3D高亮 /// /// /// public void OpenFlash(GameObject obj, float time = 0.5f) { if (!m_openHighlight || _gameObjHighlightDic.ContainsKey(obj)) return; ObjectHighlight highlight = obj.GetComponent() ?? obj.AddComponent(); TweenerCore tweener = DOTween.ToAlpha(() => highlight.HighlightColor, x => highlight.HighlightColor = x, 1, time).SetLoops(-1, LoopType.Yoyo).SetEase(Ease.Linear); tweener.startValue = highlight.HighlightColor * Alpha; _gameObjHighlightDic.Add(obj, tweener); } public void OpenFlash(GameObject obj, Color color, float time = 0.5f) { if (!m_openHighlight || _gameObjHighlightDic.ContainsKey(obj)) return; ObjectHighlight highlight = obj.GetComponent() ?? obj.AddComponent(); color.a = 0; highlight.HighlightColor = color; TweenerCore tweener = DOTween.ToAlpha(() => highlight.HighlightColor, x => highlight.HighlightColor = x, 1, time).SetLoops(-1, LoopType.Yoyo).SetEase(Ease.Linear); tweener.startValue = highlight.HighlightColor * Alpha; _gameObjHighlightDic.Add(obj, tweener); } /// /// 关闭3D高亮 /// /// public void CloseFlash(GameObject obj) { if (!_gameObjHighlightDic.ContainsKey(obj)) return; _gameObjHighlightDic[obj].Kill(); obj.GetComponent().HighlightColor = _gameObjHighlightDic[obj].startValue; _gameObjHighlightDic.Remove(obj); } /// /// 开启描边 /// /// public void OpenOutLine(GameObject obj) { //CloseAllHighlight(); CloseFlash(obj); Outline outline = obj.GetComponent() ?? obj.AddComponent(); outline.OutlineColor = m_defaultOutlineColor + Color.black; } public void OpenOutLine(GameObject obj, Color color) { CloseAllHighlight(); CloseFlash(obj); Outline outline = obj.GetComponent() ?? obj.AddComponent(); outline.OutlineColor = color + Color.black; } /// /// 关闭描边 /// /// public void CloseOutline(GameObject obj) { //CloseAllHighlight(); CloseFlash(obj); Outline outline = obj.GetComponent() ?? obj.AddComponent(); outline.OutlineColor = m_defaultOutlineColor * Alpha; } /// /// 关闭所有高亮 /// public void CloseAllFlash() { foreach (var item in _gameObjHighlightDic) { if (item.Key == null) continue; item.Value.Kill(); item.Key.GetComponent().HighlightColor = item.Value.startValue; } _gameObjHighlightDic.Clear(); } #endregion /// /// 打开高亮 3D对象 UI /// /// public void OpenHighlight(GameObject obj) { Graphic graphics = obj.GetComponent(); Selectable selectable = obj.GetComponent(); if (graphics) graphics.OpenFlash(m_defaultHighlightColor); else if (selectable) selectable.OpenFlash(m_defaultHighlightColor); else OpenFlash(obj); } public void OpenHighlight(GameObject obj, Color color) { Graphic graphics = obj.GetComponent(); Selectable selectable = obj.GetComponent(); if (graphics) graphics.OpenFlash(color); else if (selectable) selectable.OpenFlash(color); else OpenFlash(obj, color); } /// /// 关闭高亮 3D对象 UI /// /// public void CloseHighlight(GameObject obj) { Graphic graphics = obj.GetComponent(); Selectable selectable = obj.GetComponent(); if (graphics) graphics.CloseFlash(); else if (selectable) selectable.CloseFlash(); else CloseFlash(obj); } /// /// 关闭所有高亮 /// public void CloseAllHighlight() { UIHighlight.CloseAllFlash(); CloseAllFlash(); } } }