[UnityUI]UGUI射线检测
1.Graphic Raycaster
主要⽤于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会⾃动挂上)。
Ignore Reverd 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 / Scrollb
ar /)的基类,其中的Interactable,当值为fal时,UI控件会进⼊disable状态(颜⾊会变为Disabled Color的那个颜⾊),但是UI控件仍然能接收到射线检测!
4.CanvasGroup
⽤来批量地管理该控件以及该控件下的UI控件。Interactable的意思上⾯已经说到,⽽Blocks Raycasts,若为fal,则UI控件不能接收射线检测
射线穿透:
如上图,button和image都实现了点击接⼝,如果想点击两者的重叠部分,button的事件没有触发,⽽image的事件触发了,⽅法就是:给button挂上Canvas Group组件,然后不勾选Blocks Raycasts
5.判断⿏标或者⼿指是否点击在UI上
对于EventSystem.current.IsPointerOverGameObject这个函数,因为EventSystem是UI的事件系统,所以IsPointerOverGameObject中的GameObject是针对UI的,⽽不是普遍意义上的GameObject
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class TestTouch : MonoBehaviour {
public Text text;
void Update()
{
if (Input.GetMouButtonDown(0) || (uchCount > 0 && Input.GetTouch(0).pha == TouchPha.Began))
{
#if UNITY_ANDROID || UNITY_IPHONE
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
#el
if (EventSystem.current.IsPointerOverGameObject())
#endif
< = "当前触摸在UI上";
el
< = "当前没有触摸在UI上";
}
}
}