using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemBaseEffect : MonoBehaviour { [SerializeField] UIEffect m_SuitEffect; int itemId = 0; private void OnEnable() { Display(itemId); } public void Display(int itemId, bool dirty = false) { this.itemId = itemId; var curItem = ItemConfig.Get(this.itemId); bool isPlay = true; if (curItem == null) { isPlay = false; return; } int effectId = 0; switch (curItem.ItemColor) { case 4: effectId = 7119; break; case 5: effectId = 7120; break; case 6: case 7: case 8: effectId = 7121; break; } if (curItem.BaseEffectID != 0) { effectId = curItem.BaseEffectID; } if (m_SuitEffect.effect != effectId) { //同一个位置替换特效需要先释放 m_SuitEffect.StopImediatly(); } m_SuitEffect.effect = effectId; if (m_SuitEffect.effect == 0) { isPlay = false; } if (isPlay) { m_SuitEffect.Play(); } else { m_SuitEffect.StopImediatly(); } // if (dirty) // { // SnxxzGame.Instance.StartCoroutine(Co_SetOrder(this, transform as RectTransform)); // } } public static ItemBaseEffect Create(RectTransform transform) { var go = UIUtility.CreateWidget("ItemBaseEffect", "ItemBaseEffect"); var behaviour = go.GetComponent(); // SnxxzGame.Instance.StartCoroutine(Co_SetOrder(behaviour, transform)); var scale = 1f; var itemBasic = transform.GetComponentInParent(); if (itemBasic == null) itemBasic = transform.GetComponentInParent(); if (itemBasic != null) { scale = GetEffectScale(itemBasic.format); } // else // { // var itemBehaviour = transform.GetComponentInParent(); // if (itemBehaviour != null) // { // if (itemBehaviour.backGround != null) // { // var size = itemBehaviour.backGround.rectTransform.rect.width; // scale = size / 84; // } // } // else // { // var findPreciousItemBehaviour = transform.GetComponentInParent(); // if (findPreciousItemBehaviour != null) // { // scale = 0.86f; //暂且写死 // } // } // } var rect = go.transform as RectTransform; go.transform.SetParentEx(transform, Vector3.zero, Quaternion.identity, Vector3.one); rect.MatchWhith(transform); go.transform.localScale = Vector3.one * scale; go.transform.SetAsLastSibling(); return behaviour; } static IEnumerator Co_SetOrder(ItemBaseEffect behaviour, RectTransform transform) { yield return null; if (transform == null || behaviour == null) { yield break; } Canvas canva = transform.GetComponentInParent(); if (canva != null) { behaviour.m_SuitEffect.ResetOrder(canva.sortingOrder + 1); } if (behaviour.m_SuitEffect.maskArea == null) { behaviour.m_SuitEffect.SetMask(); } } static float GetEffectScale(ItemCellformat format) { switch (format) { case ItemCellformat.Format_80x80: return 0.95f; case ItemCellformat.Format_70x70: return 0.83f; case ItemCellformat.Format_64x64: return 0.76f; default: return 1f; } } }