发布时间:2026/8/8 0:39:28
Unity MyFramework 用法说明(三十):使用 GlobalTouchSystem 统一处理 UI 与场景交互 上一篇介绍了InputSystem它负责收集鼠标和触摸状态。但触点按下之后到底命中了哪个 UI、哪个场景物体以及事件是否继续向下穿透还需要另一套系统处理。MyFramework 使用GlobalTouchSystem统一完成 UI 与场景物体的射线检测和交互事件分发。项目地址https://github.com/ZHOURUIH/MyFramework一、GlobalTouchSystem 负责什么GlobalTouchSystem的定位是替代传统 UGUIEventSystem让框架中的 UI 和场景对象使用同一套交互流程。它主要负责注册可交互对象 按照显示层级检测 UI 按照距离检测场景物体 处理点击、按下、悬停和移动 管理射线穿透 支持多个摄像机 限制当前允许操作的对象整体流程为InputSystem 收集触点 ↓ GlobalTouchSystem 发射射线 ↓ 先检测 UI ↓ 允许穿透时继续检测场景对象 ↓ 向命中的对象发送交互事件二、注册普通 UI 点击UI 节点使用myUGUIObject注册public class UIMain : LayoutScript { protected myUGUIObject mStartButton; public override void assignWindow() { newObject(out mStartButton, StartButton); } public override void onGameState() { base.onGameState(); mStartButton.registeCollider( onStartClick); } protected void onStartClick() { log(点击开始游戏); } }注册时框架会查找或创建碰撞体 将节点加入 GlobalTouchSystem 注册点击回调 默认阻挡后方射线 开启节点更新节点不需要挂 Unity 原生的Button组件。需要按钮的悬停变暗和按下位移效果时可以使用mStartImage.registeColliderImage( onStartClick);其中mStartImage为myUGUIImageSimple。三、监听更完整的交互状态除了点击还可以同时监听悬停和按下状态mStartButton.registeCollider( onStartClick, onStartHover, onStartPress); protected void onStartClick() { log(点击); } protected void onStartHover(bool hover) { log(悬停状态: hover); } protected void onStartPress(bool press) { log(按下状态: press); }框架中的ComponentInteractive还支持单击与双击 触点进入与离开 触点按下与抬起 触点移动与静止 长按 全屏按下与抬起 拖拽悬停与接收例如注册长按mStartButton.addLongPress( onLongPress, 1.0f); protected void onLongPress() { log(长按1秒); }四、注册场景中的物体场景物体需要继承或包装为MovableObject并指定用于射线检测的摄像机protected MovableObject mMonster; protected void initMonster() { mMonster.setClickCallback( onMonsterClick); mMonster.setHoverCallback( onMonsterHover); mMonster.setPassRay(false); mGlobalTouchSystem.registeCollider( mMonster, mCameraManager.getMainCamera()); } protected void onMonsterClick() { log(点击怪物); } protected void onMonsterHover(bool hover) { log(怪物悬停: hover); }场景对象必须能够获得Collider。GlobalTouchSystem会根据射线交点与摄像机的距离排序优先通知距离更近的对象。MovableObject.destroy()时会自动从系统中注销不需要业务层再次清理。五、UI 为什么会优先于场景物体全局射线检测会先遍历 UI 摄像机按照摄像机深度排序 ↓ 按照 UI 深度排序 ↓ 检测命中的 UI 节点只有 UI 允许射线继续穿透时才会检测场景物体。因此玩家点击界面按钮时不会同时点中按钮后面的怪物。UI 的前后关系由框架生成的UIDepth决定而不是简单依赖对象注册顺序。六、控制射线穿透默认注册点击节点时不允许穿透mButton.registeCollider( onClick);等价于mButton.registeCollider( onClick, false);需要点击自己后继续检测下方对象mTransparentArea.registeCollider( onAreaClick, true);也可以单独修改mTransparentArea.setPassRay(true);射线穿透适合纯装饰 UI 不会阻挡场景操作的透明区域 需要同时通知上下层对象的特殊交互普通按钮、输入框和滑动区域通常不应该穿透。七、滑动区域中的父子节点滑动列表中子节点只有位于Viewport范围内时才应该响应点击。框架可以绑定bindPassOnlyParent(mViewport);它表示子节点必须位于父节点碰撞区域内 才能继续接收射线检测LayoutScript.registeScrollRect()已经会自动完成相关注册registeScrollRect( mScroll, mViewport, mContent);业务层一般不需要再手动处理滑动列表的射线裁剪。八、限制当前可操作对象新手引导经常要求玩家只能点击指定按钮其他位置都不响应。可以设置mGlobalTouchSystem.setActiveOnlyObject( mGuideButton);如果目标位于滑动列表或多层父节点中应使用mGlobalTouchSystem .setActiveOnlyObjectWithAllParent( mGuideButton);它会把目标及已经注册的父节点一起加入允许列表保证父级滑动或遮罩逻辑仍然正常。允许多个对象mGlobalTouchSystem.addActiveOnlyObject( mConfirmButton); mGlobalTouchSystem.addActiveOnlyObject( mCancelButton);解除限制时可以传入空对象mGlobalTouchSystem.setActiveOnlyObject( null);这类接口适合新手引导 强制确认弹窗 指定区域教学 UGC 编辑器当前工具限制九、查询当前位置命中的对象需要主动判断鼠标当前指向谁时可以调用IMouseEventCollect hoverObject mGlobalTouchSystem.getHoverObject( Input.mousePosition);获取全部命中对象protected HashSetIMouseEventCollect mHoverList new(); protected void checkHover() { mGlobalTouchSystem.getAllHoverObject( mHoverList, Input.mousePosition); }返回列表已经按照 UI 层级或场景距离排列可以用于拖拽目标检测、编辑器选择和自定义提示。十、对象生命周期注册过的对象不应绕过框架直接销毁。UI 节点通过框架销毁时会自动执行mGlobalTouchSystem.unregisteCollider( window);MovableObject.destroy()也会自动注销。需要临时取消交互但保留对象时可以使用mButton.setHandleInput(false);恢复mButton.setHandleInput(true);这比反复注册和注销更适合短时间禁用按钮。十一、总结MyFramework 的输入处理分为两层InputSystem 收集键盘、鼠标和触摸状态 GlobalTouchSystem 检测触点命中的对象并分发事件常用接口包括obj.registeCollider(...); obj.registeColliderImage(...); obj.setPassRay(...); obj.setHandleInput(...); mGlobalTouchSystem.registeCollider( movable, camera); mGlobalTouchSystem.setActiveOnlyObject(...); mGlobalTouchSystem.getHoverObject(...);通过统一管理 UI 深度、场景距离、射线穿透和对象生命周期业务层不需要分别维护 UGUI 点击、Physics Raycast 和移动端触摸逻辑。

相关新闻

2026/8/8 0:39:28

2025年C++开发环境搭建:VSCode+CMake+多编译器跨平台配置指南

1. 项目概述:为什么2025年还需要手动搭建C环境? 每次看到“从零开始搭建C开发环境”这个标题,很多朋友可能会想:都2025年了,不是直接装个Visual Studio或者CLion就完事了吗?确实,对于纯粹的Wind…

2026/8/8 0:34:27

Lano Visualizer终极指南:将Windows桌面打造成动态音频艺术墙

Lano Visualizer终极指南:将Windows桌面打造成动态音频艺术墙 【免费下载链接】Lano-Visualizer A simple but highly configurable visualizer with rounded bars. 项目地址: https://gitcode.com/gh_mirrors/la/Lano-Visualizer 厌倦了单调的桌面和枯燥的音…

2026/8/8 3:04:52

2026年方言用户录音转文字工具怎么选?分享3个实用判断标准

2026年方言用户选录音转文字工具,照着三个方向判断就够用:方言覆盖度、转写效率、附加功能适配,刚好适合需要整理方言录音的自媒体创作者、访谈调研人员、线下课程学习者。选这类工具的大前提是工具本身有对应方言的识别训练数据,…

2026/8/8 3:04:52

2026适合听公益讲座做整理的老年用户录音转文字工具

2026适合处理公益讲座整理的老年用户录音转文字工具,优先选支持长音频、方言识别优化的AI转写工具,适合需要整理公益讲座、老年访谈录音的学术研究人员,也适合自己整理讲座内容的老年用户使用。前提是需要处理时长1小时以上的长音频&#xff…

2026/8/8 3:04:52

Python包管理工具pip深度解析:从原理到实战避坑指南

1. 项目概述:为什么Python开发者绕不开pip?如果你刚开始接触Python,或者已经写了几个月代码,那么“pip”这个词对你来说一定不陌生。它就像你电脑里的一个“软件管家”,专门负责帮你安装、升级、卸载那些能让Python变得…

2026/8/8 3:04:52

AI Agent工具调用:从设计、执行到安全与容错的工程实践

1. 项目概述:从“能说”到“能做”的关键一跃在上一章我们成功让AI长出了“手脚”,实现了基础的Tool Calling功能。但就像刚学会走路的孩子,步子迈出去了,却可能因为看不清路而摔跤,或者因为手不够稳而打翻东西。这就是…

2026/8/8 2:59:52

Spring Boot与Vue 3国际化实战:从i18n/l10n原理到动态标语实现

最近在开发一个国际化项目时,遇到了一个看似简单却至关重要的需求:如何根据用户的语言环境,动态地显示“加油华为,加油China”这样的鼓励性标语?这不仅仅是简单的字符串替换,更涉及到国际化(i18…

2026/8/7 19:43:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/8 0:04:22

Java图像处理实战指南

要执行这些 Java AWT 图像处理程序,你需要将它们分别保存为独立的 .java 文件,并使用 javac 编译,然后使用 java 运行。以下是每个程序的核心执行步骤、依赖关系和要点。 通用执行步骤 保存文件:将每个 listing 的代码复制到文本…

2026/8/8 0:04:23

昇腾AI代理实现多号通话自动化

基于昇腾(Ascend)硬件与AtomGit AI社区的开源生态,结合AI Agent技术,可以实现一个模拟“通话重复使用机号复制”功能的安卓手机应用原型。其核心是利用AI Agent进行意图理解、任务编排和自动化操作,模拟或管理多号码的…

2026/8/8 0:04:23

2026年Graph+AI Agents最新创新思路

本次围绕GraphAI Agents这个方向筛选了15篇高质量论文,都是近年来具有较高引用价值或方法创新的研究工作,其中部分来自IJCAI、AAAI、ICRA。 对于论文er来说,这些论文方法结构清晰、可复现性较强,在多个任务上都有可延展的空间。如…

2026/8/7 9:44:18

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/7 19:03:32

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/8 2:17:42

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…