| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- /* 自定义画布点击阻断组件 */
- public class CanvasBlock : MonoBehaviour
- {
- private static HashSet<CanvasBlock> canvasBlocks = new HashSet<CanvasBlock>();
- private bool hasBan = false;
- private bool valueBeforeBan;
- void OnEnable() {
- canvasBlocks.Add(this);
- this.updateGraphicRaycaster();
- }
- void OnDisable() {
- canvasBlocks.Remove(this);
- this.updateGraphicRaycaster();
- }
- void updateGraphicRaycaster() {
- ArrayList list = new ArrayList();
- foreach (CanvasBlock canvasBlock in canvasBlocks) {
- list.Add(canvasBlock);
- }
- CanvasBlockComparer canvasBlockComparer = new CanvasBlockComparer();
- list.Sort(canvasBlockComparer);
- for (int i = 0; i < list.Count; i++) {
- if (i == 0 || canvasBlockComparer.Compare(list[i], list[0]) == 0) {
- ((CanvasBlock) list[i]).resume();
- } else {
- ((CanvasBlock) list[i]).ban();
- }
- }
- }
- void ban() {
- if (this.hasBan) return;
- this.valueBeforeBan = this.GetComponent<GraphicRaycaster>().enabled;
- this.GetComponent<GraphicRaycaster>().enabled = false;
- this.hasBan = true;
- return;
- }
- void resume () {
- if (!this.hasBan) return;
- this.GetComponent<GraphicRaycaster>().enabled = this.valueBeforeBan;
- this.hasBan = false;
- return;
- }
- public class CanvasBlockComparer : IComparer {
- public int Compare(object a, object b) {
- return ((CanvasBlock) b).GetComponent<Canvas>().sortingOrder - ((CanvasBlock) a).GetComponent<Canvas>().sortingOrder;
- }
- }
- }
|