using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class EventTrigger1 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
public void TestPointerEnter(BaseEventData data)
{
PointerEventData eventData = data as PointerEventData;
print("鼠标进入" + eventData.position);
}
}
设置Image中的组件如下:
代码使用
cs复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class EventTrigger2 : MonoBehaviour
{
public EventTrigger et;
// Start is called before the first frame update
void Start()
{
//声明一个希望被监听的事件对象
EventTrigger.Entry entry = new EventTrigger.Entry();
//声明事件类型
entry.eventID = EventTriggerType.PointerUp;
//监听函数关联
entry.callback.AddListener((data) => { print("按起"); });
//将事件添加到事件触发器组件中
et.triggers.Add(entry);
}
// Update is called once per frame
void Update()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class RectTolocal : MonoBehaviour,IDragHandler
{
// Start is called before the first frame update
void Start()
{
}
public void OnDrag(PointerEventData eventData)
{
#region 知识点二 将屏幕坐标转换为UI本地坐标系下的点
//方法:
//RectTransformUtility.ScreenPointToLocalPointInRectangle
////参数一:相对父对象
////参数二:屏幕点
////参数三:摄像机
////参数四:最终得到的点
////一般配合拖拽事件使用
Vector2 nowPos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
this.transform.parent as RectTransform,
eventData.position,
eventData.enterEventCamera,
out nowPos);
print(nowPos);
this.transform.localPosition = nowPos;
#endregion
}
}
其他辅助静态方法
Mask遮罩
定义:在不改变图片本身内容的情况下,通过特定技术手段让图片在游戏中只显示其中一部分的效果
应用场景:常见于不规则图形显示(如圆形头像)、UI元素局部显示控制等
实现遮罩效果的关键组件是 Mask 组件。
通过在父对象上添加 Mask 组件即可遮罩其子对象。
注意:
想要被遮罩的 Image 需要勾选 Maskable。
只要父对象添加了 Mask 组件,那么所有的 UI 子对象都会被遮罩。
遮罩父对象图片的制作,不透明的地方显示,透明的地方被遮罩。
异形按钮
异形按钮:图片形状不是传统矩形的按钮
方法一
按钮之所以能够响应点击,主要是根据图片矩形范围进行判断的
它的范围判断是自下而上的,意思是如果有子对象图片,子对象图片的范围也会算为可点击范围
那么我们就可以用多个透明图拼凑不规则图形作为按钮子对象用于进行射线检测
方法二
这个是牺牲性能而提高精准识别异形范围的
将如下脚本挂载到Button组件上
cs复制代码
public class Lesson23 : MonoBehaviour
{
public Image img;
// Start is called before the first frame update
void Start()
{
//该参数含义:指定一个像素必须具有的最小alpha值,以变能够认为射线命中了图片
//说人话:当像素点alpha值小于了 该值 就不会被射线检测了
img.alphaHitTestMinimumThreshold = 0.1f;
}