UGUI射线检测

1.Graphic Raycaster

主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上)。


Ignore Reversed Graphics:是否忽略反方向的图形,如果为true,则表示图形正面展示时,会接收到射线检测;反面展示时,不会接收到射线检测;否则,正反面展示都会接收到射线检测


Blocking Objects:屏蔽指定类型的(物理)对象,使它们不参与射线检测。渲染模式不为ScreenSpaceOverlay时起作用。可选值为:
None:不屏蔽任何物理对象
Two D:屏蔽2D物理对象(即具有2D碰撞体的对象)
Three D:屏蔽3D物理对象(即具有3D碰撞体的对象)

All:屏蔽所有物体对象


Blocking Mask:使屏蔽对象中的指定层不参与射线检测。渲染模式不为ScreenSpaceOverlay时,且Blocking Objects不为None时起作用。
例如,Blocking Objects为2D,Blocking Mask为UI,指2D物理对象中是UI层的东西都不会接收射线检测,而2D物理对象中的其他层还是能接收射线检测


2.Physics Raycaster & Physics2D Raycaster

主要用于物理对象上的射线检测,挂有这个组件的物体,必须要挂上Camera这个组件(当挂上组件时Camera也会自动挂上)。当物体(2D或者3D物理对象)受到射线检测时,物体上的实现了事件接口的方法会被调用


Physics Raycaster :只会对3D物体对象产生影响,Camera的Projection,尽量选为Perspective(透视)模式
Physics2D Raycaster:只会对2D物体对象产生影响,Camera的Projection,尽量选为Orthography(正交)模式
EventMask:射线作用层,可以用来做事件屏蔽



3.Selectable

Selectable的意思是可选择的,它是UGUI中很多交互控件(Button/ Slider / InputField / Toggle / Scrollbar /)的基类,其中的Interactable,当值为false时,UI控件会进入disable状态(颜色会变为Disabled Color的那个颜色),但是UI控件仍然能接收到射线检测!



4.CanvasGroup

用来批量地管理该控件以及该控件下的UI控件。Interactable的意思上面已经说到,而Blocks Raycasts,若为false,则UI控件不能接收射线检测


射线穿透:


如上图,button和image都实现了点击接口,如果想点击两者的重叠部分,button的事件没有触发,而image的事件触发了,方法就是:

给button挂上Canvas Group组件,然后不勾选Blocks Raycasts


5.判断鼠标或者手指是否点击在UI上

对于EventSystem.current.IsPointerOverGameObject这个函数,因为EventSystem是UI的事件系统,所以IsPointerOverGameObject中的GameObject是针对UI的,而不是普遍意义上的GameObject


 
 
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.EventSystems;
  4. public class TestTouch : MonoBehaviour {
  5. public Text text;
  6. void Update()
  7. {
  8. if (Input.GetMouseButtonDown( 0) || (Input.touchCount > 0 && Input.GetTouch( 0).phase == TouchPhase.Began))
  9. {
  10. #if UNITY_ANDROID || UNITY_IPHONE
  11. if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch( 0).fingerId))
  12. #else
  13. if (EventSystem.current.IsPointerOverGameObject())
  14. #endif
  15. text.text = "当前触摸在UI上";
  16. else
  17. text.text = "当前没有触摸在UI上";
  18. }
  19. }
  20. }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity的UGUI(User Interface)系统中,可以通过以下步骤来检测右键点击事件: 1. 创建一个空的GameObject,并将其命名为 "RightClickDetector"(或者你喜欢的任何名称)。 2. 在该GameObject上添加一个名为 "EventSystem" 的组件,用于处理UI事件。 3. 在 "RightClickDetector" 上添加一个名为 "Event Trigger" 的组件。 4. 在 "Event Trigger" 组件的事件列表中,点击 "+" 按钮以添加一个新的事件。 5. 在新添加的事件中,选择 "Pointer Click" 事件类型。 6. 将 "Pointer Click" 事件的触发条件设置为 "Right Click". 7. 在 "RightClickDetector" 上添加一个脚本,并在脚本中处理右键点击事件。 以下是一个示例脚本的代码: ```csharp using UnityEngine; using UnityEngine.EventSystems; public class RightClickDetector : MonoBehaviour, IPointerClickHandler { public void OnPointerClick(PointerEventData eventData) { if (eventData.button == PointerEventData.InputButton.Right) { Debug.Log("Right click detected!"); // 在这里执行右键点击后的逻辑 } } } ``` 在这个示例中,我们实现了 `IPointerClickHandler` 接口,并在 `OnPointerClick` 方法中检查了事件数据中的按钮类型。如果按钮类型为右键,则打印一条调试信息,并可以在相应的条件下执行其他逻辑。 将该脚本附加到 "RightClickDetector" 游戏对象上,然后在场景中进行测试。当你右键点击该对象时,将会在控制台中看到 "Right click detected!" 的输出。 希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值