// *********************************************************************** // Assembly : Unity // Author : Kimch // Created : 2018-04-28 // // Last Modified By : Kimch // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class KUIFxNode : MonoBehaviour { public bool addRaycaster; public int relativeOrder = 1; public bool scale; // Use this for initialization private void Start() { var canvas = GetComponentInParent(); if (!canvas) { //Debug.Log(this.name); return; } var sortingLayerID = canvas.sortingLayerID; var sortingOrder = canvas.sortingOrder; // if (GetComponent()) { var addCanvas = GetComponent(); if (!addCanvas) { addCanvas = this.gameObject.AddComponent(); if (addRaycaster) this.gameObject.AddComponent(); } SetSorting(addCanvas, sortingLayerID, sortingOrder); } else { var prList = F.ListPool.Get(); GetComponentsInChildren(true, prList); SetSorting(prList, sortingLayerID, sortingOrder); if (scale) { scale = false; SetScale(prList); } F.ListPool.Release(prList); } } public void SetSorting(IList renderers, int sortingLayerID, int sortingOrder) { foreach (var pr in renderers) { pr.sortingLayerID = sortingLayerID; pr.sortingOrder = sortingOrder + relativeOrder; } } public void SetSorting(Canvas canvas, int sortingLayerID, int sortingOrder) { canvas.overrideSorting = true; canvas.sortingLayerID = sortingLayerID; canvas.sortingOrder = sortingOrder + relativeOrder; } public void SetScale(IList renderers) { Vector2 screenSize = new Vector2(Screen.width, Screen.height); CanvasScaler scaler = KUIRoot.Instance.GetComponent(); if (scaler.screenMatchMode == CanvasScaler.ScreenMatchMode.MatchWidthOrHeight) { float logWidth = screenSize.x / scaler.referenceResolution.x; float logHeight = screenSize.y / scaler.referenceResolution.y; var logWeightedAverage = Mathf.Lerp(logHeight, logWidth, scaler.matchWidthOrHeight); foreach (var pr in renderers) { pr.transform.localScale *= logWeightedAverage; } } } public void SetMask(IList renderers, SpriteMaskInteraction maskInteraction) { foreach (var pr in renderers) { pr.maskInteraction = maskInteraction; } } }