Interactable 是一个参考 Unity UI 事件系统架构设计的 3D 交互框架,旨在为 3D 场景提供类似 UI 事件系统的强大交互能力。
- 🎯 熟悉的 API 设计 - 与 Unity UGUI EventSystem 一致的事件接口
- 🔄 灵活的系统架构 - 支持多个交互系统共存并动态切换
- 🎮 多种输入支持 - 鼠标、触摸、第一人称、VR 等多种输入方式
- 📡 强大的射线系统 - 灵活的射线投射器,支持自定义扩展
- 🎨 完整的事件支持 - 17+ 事件接口,覆盖所有常见交互场景
- 🚀 高性能优化 - 对象池、缓存机制、智能排序
- 🔧 易于扩展 - 模块化设计,轻松实现自定义功能
- 3D 物体交互(点击、拖拽、悬停高亮)
- 第一人称/第三人称游戏交互系统
- VR/AR 交互实现
- 策略游戏物体选择和操作
- 任何需要类似 UI 事件系统的 3D 应用
using Interactable;
using UnityEngine;
// 简单的点击交互
public class ClickableObject : MonoBehaviour, IIAPointerClickHandler
{
public void OnPointerClick(IAPointerData pointerData)
{
Debug.Log($"{gameObject.name} 被点击了!");
}
}
// 鼠标悬停高亮
public class HighlightObject : MonoBehaviour,
IIAPointerEnterHandler,
IIAPointerExitHandler
{
public void OnPointerEnter(IAPointerData pointerData)
{
GetComponent<Renderer>().material.color = Color.yellow;
}
public void OnPointerExit(IAPointerData pointerData)
{
GetComponent<Renderer>().material.color = Color.white;
}
}- 前往 Releases 页面
- 下载最新版本的
.unitypackage文件 - 在 Unity 中导入:
Assets > Import Package > Custom Package...
git clone https://github.com/starryforest-ymxk/Interactable.git然后将 Assets/Interactable 文件夹复制到你的 Unity 项目中。
在场景中创建一个空的 GameObject,命名为 InteractionSystem:
- 添加
IASystem组件 - 添加输入模块(例如
IAFirstPersonInputModule) - 添加射线投射器(例如
IACameraForwardRaycaster)
GameObject: "InteractionSystem"
├─ IASystem
├─ IAFirstPersonInputModule
└─ IACameraForwardRaycaster
在 Inspector 中配置 IASystem:
- ✅ Active - 勾选以激活系统
- Drag Threshold - 设置拖拽阈值(像素),默认 10
- Send Navigation Events - 是否发送导航事件
在任何需要交互的 3D 物体上:
- 确保有
Collider组件(必需) - 添加实现交互接口的脚本
using Interactable;
using UnityEngine;
public class MyInteractable : MonoBehaviour,
IIAPointerEnterHandler,
IIAPointerExitHandler,
IIAPointerClickHandler
{
public void OnPointerEnter(IAPointerData pointerData)
{
Debug.Log("鼠标进入");
}
public void OnPointerExit(IAPointerData pointerData)
{
Debug.Log("鼠标离开");
}
public void OnPointerClick(IAPointerData pointerData)
{
Debug.Log("物体被点击");
}
}按下 Play 按钮,移动鼠标到物体上,点击即可看到交互效果!
IAManager (交互管理器 - 单例)
│
├─ 管理多个 IASystem
├─ 控制活跃系统切换
└─ 驱动系统处理流程
│
▼
IASystem (交互系统)
│
├─ IABaseInputModule (输入模块)
│ ├─ IAPointerInputModule
│ ├─ IAFirstPersonInputModule
│ └─ IAFreeMouseInputModule
│
├─ IABaseRaycaster (射线投射器)
│ ├─ IACameraForwardRaycaster
│ └─ IACursorRaycaster
│
└─ Selected GameObject (选中物体)
└─ IIAHandler 接口实现
IIAPointerEnterHandler- 指针进入IIAPointerExitHandler- 指针离开IIAPointerMoveHandler- 指针移动IIAPointerDownHandler- 指针按下IIAPointerUpHandler- 指针抬起IIAPointerClickHandler- 指针点击IIAScrollHandler- 滚轮滚动
IIAInitializePotentialDragHandler- 初始化潜在拖拽IIABeginDragHandler- 开始拖拽IIADragHandler- 拖拽中IIAEndDragHandler- 结束拖拽IIADropHandler- 放置
IIASelectHandler- 物体被选中IIADeselectHandler- 物体取消选中IIAUpdateSelectedHandler- 更新选中状态
IIAMoveHandler- 轴向移动IIASubmitHandler- 提交IIACancelHandler- 取消