【Unity3D】UGUI回调函数
1.【Unity3D】Unity3D技术栈2.【Unity3D】常用快捷键3.【Unity3D】地形Terrain4.【Unity3D】MonoBehaviour的生命周期5.【Unity3D】Transform组件6.【Unity3D】刚体组件Rigidbody7.【Unity3D】人机交互Input8.【Unity3D】碰撞体组件Collider9.【Unity3D】发射(Raycast)物理射线(Ray)10.【Unity3D】GUI控件11.【Unity3D】相机跟随12.【Unity3D】UGUI概述13.【Unity3D】UGUI之Text14.【Unity3D】UGUI之Button15.【Unity3D】UGUI之Image和RawImage16.【Unity3D】UGUI之Dropdown17.【Unity3D】UGUI之Toggle18.【Unity3D】UGUI之Slider19.【Unity3D】UGUI之布局组件20.【Unity3D】UGUI之InputField21.【Unity3D】摇杆
22.【Unity3D】UGUI回调函数
23.【Unity3D】血条(HP)24.【Unity3D】角色控制器(CharacterController)25.【Unity3D】Tank大战26.【Unity3D】相机27.【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏28.【Unity3D】2D动画29.【Unity3D】人体模型及动画30.【Unity3D】人物跟随鼠标位置31.【Unity3D】AudioSource组件32.【Unity3D】动画回调函数、动画事件、动画曲线33.【Unity3D】动画混合34.【Unity3D】IK动画35.【Unity3D】灯光组件Light36.【Unity3D】导航系统37.【Unity3D】动态路障导航38.【Unity3D】分离路面导航39.【Unity3D】拖尾TrailRenderer40.【Unity3D】线段渲染器LineRenderer41.【Unity3D】粒子系统ParticleSystem42.【Unity3D】基于粒子系统实现烟花特效43.【Unity3D】VideoPlayer组件44.【Unity3D】协同程序45.【Unity3D】同步Socket通讯46.【Unity3D】异步Socket通讯47.【Unity3D】Photon环境搭建48.【Unity3D】缩放、平移、旋转场景49.【Unity3D】绘制物体表面三角形网格50.【Unity3D】使用GL绘制线段51.【Unity3D】点选物体、框选物体、绘制外边框52.【Unity3D】绘制物体外框线条盒子53.【Unity3D】基于AssetBundle实现资源热更新54.【Unity3D】魔方55.【Unity3D】立方体纹理(Cubemap)和天空盒子(Skybox)56.【Unity3D】Cesium加载大地图57.【Unity3D】UI Toolkit简介58.【Unity3D】UI Toolkit容器59.【Unity3D】UI Toolkit元素60.【Unity3D】UI Toolkit样式选择器61.【Unity3D】UI Toolkit自定义元素62.【Unity3D】UI Toolkit数据动态绑定63.【Unity3D】资源管理64.【Unity3D】Unity与Android交互1 简述
UGUI 回调函数主要指鼠标进入、离开、点下、点击中、抬起、开始拖拽、拖拽中、拖拽结束 UI 控件触发的回调。使用 UGUI 回调函数时,需要引入 UnityEngine.EventSystems 命名空间。
1) 回调函数
回调函数 | 接口 | 说明 |
---|---|---|
void OnPointerEnter(PointerEventData eventData) | IPointerEnterHandler | 鼠标进入 |
void OnPointerExit(PointerEventData eventData) | IPointerExitHandler | 鼠标离开 |
void OnPointerDown(PointerEventData eventData) | IPointerDownHandler | 鼠标点下 |
void OnPointerUp(PointerEventData eventData) | IPointerUpHandler | 鼠标抬起 |
void OnPointerClick(PointerEventData eventData) | IPointerClickHandler | 鼠标单击 |
void OnBeginDrag(PointerEventData eventData) | IBeginDragHandler | 鼠标开始拖拽 |
void OnDrag(PointerEventData eventData) | IDragHandler | 鼠标拖拽中 |
void OnEndDrag(PointerEventData eventData) | IEndDragHandler | 鼠标结束拖拽 |
注意:OnPointerClick 方法在 OnPointerUp 方法之后执行;如果在拖拽过程中停下了,但是鼠标左键仍未抬起,OnDrag 方法不会执行。
2)前提条件
- 当前 UI 对象必须至少有 1 个基础组件(Text、Image、RawImage)
- 基础 UI 组件中必须勾选 Raycast Target
- 代码引入 UnityEngine.EventSystems 命名空间
3)使用方法
using UnityEngine;
using UnityEngine.EventSystems;
public class EventController : MonoBehaviour,
IPointerEnterHandler,
IPointerExitHandler,
IPointerDownHandler,
IPointerClickHandler,
IPointerUpHandler,
IBeginDragHandler,
IDragHandler,
IEndDragHandler {
public void OnPointerEnter(PointerEventData eventData) {
Debug.Log("OnPointerEnter");
}
public void OnPointerExit(PointerEventData eventData) {
Debug.Log("OnPointerExit");
}
public void OnPointerDown(PointerEventData eventData) {
Debug.Log("OnPointerDown");
}
public void OnPointerClick(PointerEventData eventData) {
Debug.Log("OnPointerClick");
}
public void OnPointerUp(PointerEventData eventData) {
Debug.Log("OnPointerUp");
}
public void OnBeginDrag(PointerEventData eventData) {
Debug.Log("OnBeginDrag");
}
public void OnDrag(PointerEventData eventData) {
Debug.Log("OnDrag");
}
public void OnEndDrag(PointerEventData eventData) {
Debug.Log("OnEndDrag");
}
}
2 应用
1)UGUI 控件
分别创建 Panel 和 2 个 Image 控件,并将 Image 控件重命名为 Monster 和 Spear,如下:
给 Monster 和 Spear 添加 Sprite 图片如下:
2)脚本组件
SpearController.cs
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class SpearController : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
private bool isDragging = false;
public void OnBeginDrag(PointerEventData eventData) {
GetComponent<Image>().raycastTarget = false;
isDragging = true;
}
public void OnDrag(PointerEventData eventData) {
Drag1();
// Drag2();
}
public void OnEndDrag(PointerEventData eventData) {
GetComponent<Image>().raycastTarget = true;
isDragging = false;
}
public bool IsDragging() {
return isDragging;
}
private void Drag1() { // Canvas 渲染模式为 Screen Space - Overlay
transform.position = Input.mousePosition;
}
private void Drag2() { // Canvas 渲染模式为 Screen Space - Camera
Vector3 worldPostion = Vector3.zero;
RectTransformUtility.ScreenPointToWorldPointInRectangle(
transform.root as RectTransform,
Input.mousePosition,
Camera.main,
out worldPostion
);
transform.position = worldPostion;
}
}
说明:SpearController 脚本组件附着在 Spear 对象上。
MonsterController.cs
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class MonsterController : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler {
private Image image;
private SpearController spear;
private void Start() {
image = GetComponent<Image>();
spear = GameObject.Find("Spear").GetComponent<SpearController>();
}
public void OnPointerEnter(PointerEventData eventData) {
if (spear.IsDragging()) {
image.color = Color.red;
}
}
public void OnPointerExit(PointerEventData eventData) {
if (spear.IsDragging()) {
image.color = Color.white;
}
}
}
说明:MonsterController 脚本组件附着在 Monster 对象上。
3)运行效果
声明:本文转自【Unity3D】UGUI回调函数
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 我与微信审核的“相爱相杀”看个人小程序副业