From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- Client/Assets/Scripts/ControlParticle.cs | 158 +++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 Client/Assets/Scripts/ControlParticle.cs (limited to 'Client/Assets/Scripts/ControlParticle.cs') diff --git a/Client/Assets/Scripts/ControlParticle.cs b/Client/Assets/Scripts/ControlParticle.cs new file mode 100644 index 00000000..d2ba1ae2 --- /dev/null +++ b/Client/Assets/Scripts/ControlParticle.cs @@ -0,0 +1,158 @@ +using UnityEngine; +using System.Collections; +using XUtliPoolLib; + +[ExecuteInEditMode] +public class ControlParticle : MonoBehaviour, IControlParticle +{ + + public int renderQueue = 3500; + public bool runOnlyOnce = false; + public bool autoFindWidget = false; + public UIWidget widget; + public int renderQueueOffset = 0; + + [System.NonSerialized] + UIPanel panel; + [System.NonSerialized] + Material matCache; + [System.NonSerialized] + private Renderer renderCache; + void Awake() + { + renderCache = GetComponent(); + if (Application.isPlaying && renderCache != null) + { + matCache = GetComponent().material; + if (matCache != null) + { + matCache.renderQueue = 3500;//ui defalut + } + } + } + void Start() + { + RefreshRenderQueue(false); + } + public void SetWidget(GameObject go) + { + if (go != null) + { + UIWidget tWidget = go.GetComponent(); + if (tWidget != null) + { + widget = tWidget; + } + } + } + public void RefreshRenderQueue(bool resetWidget) + { + if (autoFindWidget|| resetWidget) + widget = null; + if (autoFindWidget && widget == null) + { + Transform _parent = transform; + while (_parent != null) + { + UIWidget _widget = _parent.GetComponent(); + if (_widget != null) + { + widget = _widget; + break; + } + _parent = _parent.parent; + } + } + } + [ContextMenu("test")] + void Test() + { + print("widget:" + (widget == null)); + if (widget != null) + { + print(widget.name+" panel: "+(widget.panel==null)); + if(widget.panel!=null) + { + print("usemerge:" + widget.panel.useMerge+" dc count:"+widget.panel.drawCalls.Count); + } + } + } + + void InnerUpdate(Material mat) + { + if (mat != null) + { + if (widget != null && widget.drawCall != null) + { + renderQueue = widget.drawCall.renderQueue+renderQueueOffset; + } + else if (widget != null && widget.panel != null && widget.panel.useMerge && widget.panel.drawCalls.Count > 0) + { + renderQueue = widget.panel.drawCalls[0].renderQueue+renderQueueOffset; + } + if (mat.renderQueue != renderQueue) + { + mat.renderQueue = renderQueue + renderQueueOffset; + renderQueue = mat.renderQueue; + } + UIPanel newPanel = widget != null ? widget.panel : null; + if (newPanel != null && panel != newPanel) + { + panel = newPanel; + if (panel.root != null && panel.clipping != UIDrawCall.Clipping.None) + { + Vector4 clipRange = panel.finalClipRegion; + Vector3 panelPos = panel.root.transform.InverseTransformPoint(panel.transform.position); + clipRange.x += panelPos.x; + clipRange.y += panelPos.y; + float left = (clipRange.x - clipRange.z * 0.5f) / 568; + float right = (clipRange.x + clipRange.z * 0.5f) / 568; + float top = (clipRange.y + clipRange.w * 0.5f) / 320; + float down = (clipRange.y - clipRange.w * 0.5f) / 320; + mat.SetVector("_ClipRange0", new Vector4(left, down, right, top)); + } + else + { + mat.SetVector("_ClipRange0", new Vector4(-1, -1, 1, 1)); + } + } + } + } + + void Update() + { + if (renderCache != null) + { + if (Application.isPlaying) + { + InnerUpdate(matCache); + } + else + { + InnerUpdate(renderCache.sharedMaterial); + } + } + if (runOnlyOnce && Application.isPlaying) + { + this.enabled = false; + } + } + + //public void SetHierarchy(GameObject go) + //{ + + //} + + //public void SetWidget(GameObject go) + //{ + // if(go != null) + // { + // UIWidget tWidget = go.GetComponent(); + // if (tWidget != null) + // { + // widget = tWidget; + // } + // } + //} + +} -- cgit v1.1-26-g67d0