查看: 1486|回复: 0
打印 上一主题 下一主题

[GUI] UGUI不规则热区的处理

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53488
精华
316

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-11-30 23:45:04 |只看该作者 |倒序浏览

利用系统现有组件,简单处理了下:

1. 自定义了一个CustomRaycaster类,派生自GraphicRaycaster
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.UI;
  4. using System.Collections.Generic;
  5. using UnityEngine.EventSystems;

  6. public class CustomRaycaster : GraphicRaycaster
  7. {
  8.     private List<RaycastResult> _toBeRemoved = new List<RaycastResult>();

  9.     public override void Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList)
  10.     {
  11.         base.Raycast(eventData, resultAppendList);

  12.         _toBeRemoved.Clear();
  13.         foreach (var result in resultAppendList)
  14.         {
  15.             var polygon2D = result.gameObject.GetComponent<PolygonCollider2D>();
  16.             if (!polygon2D)
  17.                 continue;
  18.             
  19.             if (!polygon2D.OverlapPoint(eventData.position))
  20.                 _toBeRemoved.Add(result);
  21.         }

  22.         if (_toBeRemoved.Count > 0)
  23.             resultAppendList.RemoveAll(r => _toBeRemoved.Contains(r));
  24.     }
  25. }
复制代码
2. 删除Canvas上原有的GraphicRaycaster,用这个替换
3. 在不规则UI对象上添加一个PolygonCollider2D组件,编辑节点,覆盖热点区域
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-16 00:48 , Processed in 0.216439 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部