当前位置: 代码迷 >> 综合 >> RaycastTarget (勾选标记代码)
  详细解决方案

RaycastTarget (勾选标记代码)

热度:20   发布时间:2023-11-22 07:34:24.0

UI事件会在EventSystem在Update的Process触发。UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件给逻辑层去响应。

所以RaycastTarget如果被勾选的过多的话, 效率必然会低。

把下面代码挂在游戏中的任意GameObject上,原理其实很简单就是绘制辅助线, 就可以很清晰的看到勾选RaycastTarget

#if UNITY_EDITOR
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class DebugUILine : MonoBehaviour {
    static Vector3[] fourCorners = new Vector3[4];void OnDrawGizmos(){
    foreach (MaskableGraphic g in GameObject.FindObjectsOfType<MaskableGraphic>()){
    if (g.raycastTarget){
    RectTransform rectTransform = g.transform as RectTransform;rectTransform.GetWorldCorners(fourCorners);Gizmos.color = Color.blue;for (int i = 0; i < 4; i++)Gizmos.DrawLine(fourCorners[i], fourCorners[(i + 1) % 4]);}}}
}
#endif

ps ; 代码源自宣雨松大佬