using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; using UnityEngine.UI; [DisallowMultipleComponent] [ExecuteInEditMode, RequireComponent(typeof(CanvasRenderer), typeof(RectTransform))] public class DragonBoneGraphic : MaskableGraphic { private Material OriginMaterial; public Mesh SharedMesh { get { return sharedMesh; } } public Mesh sharedMesh; private Texture _texture; public override Texture mainTexture { get { return _texture == null ? material.mainTexture : _texture; } } private MaskableGraphic maskableGraphic; public Transform parent; public Transform copyTrans; /// /// Texture to be used. /// public Texture texture { get { return _texture; } set { if (_texture == value) { return; } _texture = value; SetMaterialDirty(); } } public void Disable() { DestroyImmediate(gameObject); //material = OriginMaterial; } public void Enable(Transform parent, Transform copyTrans, MeshFilter meshFilter, MeshRenderer meshRenderer) { this.parent = parent; this.copyTrans = copyTrans; if (meshRenderer.sharedMaterial != null) { sharedMesh = meshFilter.sharedMesh; } OriginMaterial = material; material = Lib.DragonboneUGUIMat; if (meshRenderer.sharedMaterial != null) { material.mainTexture = meshRenderer.sharedMaterial.mainTexture; texture = material.mainTexture; } } protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); } public override void Rebuild(CanvasUpdate update) { base.Rebuild(update); if (canvasRenderer.cull) { return; } if (update == CanvasUpdate.PreRender) { canvasRenderer.SetMesh(SharedMesh); } } public void Update() { if (copyTrans == null) { DestroyImmediate(gameObject); return; } if (copyTrans.gameObject.activeInHierarchy == false) { gameObject.SetActive(false); } int siblingIndex = transform.GetSiblingIndex(); transform.SetParent(copyTrans.parent); transform.localPosition = copyTrans.localPosition; transform.localRotation = copyTrans.localRotation; transform.localScale = copyTrans.localScale; transform.SetParent(parent); transform.SetSiblingIndex(siblingIndex); canvasRenderer.SetMesh(SharedMesh); } }