Chapter 6. Working with the UI Source
拆解EventSystem循环、事件接口、ExecuteEvents、自定义事件数据与2015年uGUI源码工作流;用布局探针、事件路由和多分辨率发布门完成独立复核。
学习目标
- 能说明“Chapter 6. Working with the UI Source”如何拆解EventSystem循环、事件接口、ExecuteEvents、自定义事件数据与2015年uGUI源码工作流,并明确2015年uGUI原书与Unity 6现行资料的时代边界
- 能先预测“怎样从输入模块沿Raycaster、事件数据、接口和处理器重放一次事件,并区分历史源码仓库与现行包?”的布局或事件结果,再沿层级、矩形、画布、相机、射线和处理器逐阶段核对
- 能注入“自定义事件容器复用错误数据类型,同时把2015源码仓库操作当作Unity 6包升级流程”,用“活动输入模块唯一,Raycaster结果可排序,事件数据类型匹配处理器,源码版本与项目Unity版本一致”决定接受、修正或拒绝UI发布
为什么从这个UI任务开始
源码页先把事件当成可重放消息路由,再讨论扩展;2015年的Bitbucket式源码获取与现行包分发必须分别标注。 “Chapter 6. Working with the UI Source”使用的贯穿任务是:为Roll-a-Ball警报板添加自定义事件,记录Droid与压力板处理器,再复盘源码分叉、同步和回馈边界。 操作前先预测哪个矩形、射线目标或事件处理器会变化,运行后再补理由不算预测。
本页围绕“怎样从输入模块沿Raycaster、事件数据、接口和处理器重放一次事件,并区分历史源码仓库与现行包?”建立正常、故障与恢复路径。只有“Chapter 6. Working with the UI Source”保持“活动输入模块唯一,Raycaster结果可排序,事件数据类型匹配处理器,源码版本与项目Unity版本一致”并交付输入模块、PointerEventData、RaycastResult、目标排序、事件接口、ExecuteEvents、自定义数据、处理日志和源码版本说明。,编辑器画面才构成UI证据。
书目、38组条目与UI时代
“Chapter 6. Working with the UI Source”以作者公告核对Simon Jackson在2014年发布的《Unity 3D UI Essentials》及其围绕Unity 4.6新UI、动态缩放、效果和世界空间界面的定位;出版社授权预览核对第一版详细目录,中文版书页核对《Unity UI设计》出版信息。课程分母为六章与附录合并后的38组公开目录条目。
“Chapter 6. Working with the UI Source”只依据作者公告、授权样章和公开目录限定范围,不逐段改写原文;解释、状态模型、交互、练习与答案均为独立教学重写。每个合并目录组保留组内全部英文小节名,不能用一个现代主题替换。
“Chapter 6. Working with the UI Source”另以技术核对 1、技术核对 2、技术核对 3、技术核对 4核对现行技术事实。2015年的旧GUI对照、uGUI初版面板和源码仓库流程保留为原书时代轨;Unity 6的uGUI 2.0与UI系统比较只验证稳定布局、画布和事件机制或说明迁移边界,不能反向证明原书当年的菜单、包和默认值。
公开目录条目与UI机制
The Event System loop;Controlling state;Raycast Marshalling
↡UI条目1对应目录条目组“The Event System loop;Controlling state;Raycast Marshalling”,在“Chapter 6. Working with the UI Source”中用于从活动输入模块经Raycaster生成事件数据并选择目标,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 1/7。 在“Chapter 6. Working with the UI Source”的坐标1中,The Event System loop;Controlling state;Raycast Marshalling用于从活动输入模块经Raycaster生成事件数据并选择目标;先锁定场景和层级,再用输入样本、活动模块、RaycastResult排序、目标和事件日志复核,出现多个模块或错误相机竞争同一输入时不得发布。
Working with events;Using a parameter;Built-in event interfaces
↡UI条目2对应目录条目组“Working with events;Using a parameter;Built-in event interfaces”,在“Chapter 6. Working with the UI Source”中用于用类型化事件数据和接口把消息派发到明确处理器,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 2/7。 Working with events;Using a parameter;Built-in event interfaces进入“Chapter 6. Working with the UI Source”后要回答第2张布局卡:它怎样用类型化事件数据和接口把消息派发到明确处理器、改变哪个矩形或目标、由哪些事件类型、数据载荷、ExecuteEvents调用、接收者与副作用日志证明,并如何排除载荷类型与处理接口不匹配。
Executing events;Building your own handlers or custom events
↡Executing events对应目录条目组“Executing events;Building your own handlers or custom events”,在“Chapter 6. Working with the UI Source”中用于用类型化事件数据和接口把消息派发到明确处理器,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 3/7。 围绕“怎样从输入模块沿Raycaster、事件数据、接口和处理器重放一次事件,并区分历史源码仓库与现行包?”,条目3把Executing events;Building your own handlers or custom events解释为用类型化事件数据和接口把消息派发到明确处理器;复核者先读取事件类型、数据载荷、ExecuteEvents调用、接收者与副作用日志再判断画面,不能接受载荷类型与处理接口不匹配。
A custom event Data Structure;A custom event Interface;A custom event static container
↡UI条目4对应目录条目组“A custom event Data Structure;A custom event Interface;A custom event static container”,在“Chapter 6. Working with the UI Source”中用于用类型化事件数据和接口把消息派发到明确处理器,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 4/7。 对“Chapter 6. Working with the UI Source”而言,A custom event Data Structure;A custom event Interface;A custom event static container的最小合同是用类型化事件数据和接口把消息派发到明确处理器,第4次检查保存事件类型、数据载荷、ExecuteEvents调用、接收者与副作用日志;若产生载荷类型与处理接口不匹配,就回到层级、布局或事件上游。
The Roll a Ball Derby;The Droid script;The Alarm plates
↡UI条目5对应目录条目组“The Roll a Ball Derby;The Droid script;The Alarm plates”,在“Chapter 6. Working with the UI Source”中用于在版本化3D场景中连接压力板、角色、相机和UI事件,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 5/7。 第5个公开条目组The Roll a Ball Derby;The Droid script;The Alarm plates服务于拆解EventSystem循环、事件接口、ExecuteEvents、自定义事件数据与2015年uGUI源码工作流,需要以场景层级、碰撞层、对象身份、初始状态与冷启动轨迹呈现在版本化3D场景中连接压力板、角色、相机和UI事件;未保存场景基线而无法归因会破坏“活动输入模块唯一,Raycaster结果可排序,事件数据类型匹配处理器,源码版本与项目Unity版本一致”。
Getting access to the source;The repository;Getting forked;Keeping up to date
↡UI条目6对应目录条目组“Getting access to the source;The repository;Getting forked;Keeping up to date”,在“Chapter 6. Working with the UI Source”中用于锁定2015源码版本、分叉、同步与项目集成边界,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 6/7。 学习者在“Chapter 6. Working with the UI Source”中讨论Getting access to the source;The repository;Getting forked;Keeping up to date前预测锁定2015源码版本、分叉、同步与项目集成边界会改变哪项布局或交互状态,再读取仓库提交、Unity版本、差异补丁、升级记录与回馈说明;观察到把历史源码流程当成现行包升级步骤时保留失败轨迹。
Adding your own version of UI to your project;Extra credit, push it back to Unity
↡UI条目7对应目录条目组“Adding your own version of UI to your project;Extra credit, push it back to Unity”,在“Chapter 6. Working with the UI Source”中用于锁定2015源码版本、分叉、同步与项目集成边界,并受Unity时代、层级、矩形、画布、输入和相机边界约束。公开坐标 7/7。 为Roll-a-Ball警报板添加自定义事件,记录Droid与压力板处理器,再复盘源码分叉、同步和回馈边界。 在条目7处理Adding your own version of UI to your project;Extra credit, push it back to Unity时,要把锁定2015源码版本、分叉、同步与项目集成边界写进UI合同,把仓库提交、Unity版本、差异补丁、升级记录与回馈说明写进运行记录,并把把历史源码流程当成现行包升级步骤写进故障样本。
先预测,再操作三个UI实验
1. 画布锚点与布局探针
切换“警报压力板、Droid接收器、事件日志”以及手机竖屏、横屏和桌面窗口,核对Anchor Min/Max、Pivot、offset与安全区怎样连接“Chapter 6. Working with the UI Source”。
画布与锚点探针
固定布局合同,再切换分辨率
怎样从输入模块沿Raycaster、事件数据、接口和处理器重放一次事件,并区分历史源码仓库与现行包?
目标视口
被测 RectTransform
Anchor Min / Max(0.05, 0.9) → (0.05, 0.9)
Pivot / Offset(0, 1) · +16, -16
本页目录坐标:The Event System loop;Controlling state;Raycast Marshalling、Working with events;Using a parameter;Built-in event interfaces、Executing events;Building your own handlers or custom events、A custom event Data Structure;A custom event Interface;A custom event static container、The Roll a Ball Derby;The Droid script;The Alarm plates、Getting access to the source;The repository;Getting forked;Keeping up to date、Adding your own version of UI to your project;Extra credit, push it back to Unity
Chapter 6. Working with the UI Source的可重放UI协议
| 阶段 | UI动作 | 必留证据 | 拒绝条件 |
|---|---|---|---|
| 跟踪循环状态与射线 | 在“Chapter 6. Working with the UI Source”执行跟踪循环状态与射线,只允许声明组件写入布局或状态 | Unity版本、场景层级、视口与初始状态 | 层级或对象身份不可追溯 |
| 实现类型化事件分发 | 在“Chapter 6. Working with the UI Source”执行实现类型化事件分发,只允许声明组件写入布局或状态 | RectTransform、Canvas、相机、射线与事件轨迹 | 自定义事件容器复用错误数据类型,同时把2015源码仓库操作当作Unity 6包升级流程 |
| 锁定源码版本和回馈路径 | 在“Chapter 6. Working with the UI Source”执行锁定源码版本和回馈路径,只允许声明组件写入布局或状态 | 分辨率矩阵、构建截图、迁移与回退记录 | 无法重放或恢复基线 |
unit: "uid-06"
question: "怎样从输入模块沿Raycaster、事件数据、接口和处理器重放一次事件,并区分历史源码仓库与现行包?"
scenario: "为Roll-a-Ball警报板添加自定义事件,记录Droid与压力板处理器,再复盘源码分叉、同步和回馈边界。"
panels: ["警报压力板", "Droid接收器", "事件日志"]
stages: ["跟踪循环状态与射线", "实现类型化事件分发", "锁定源码版本和回馈路径"]
invariant: "活动输入模块唯一,Raycaster结果可排序,事件数据类型匹配处理器,源码版本与项目Unity版本一致"
fault: "自定义事件容器复用错误数据类型,同时把2015源码仓库操作当作Unity 6包升级流程"
evidence: "输入模块、PointerEventData、RaycastResult、目标排序、事件接口、ExecuteEvents、自定义数据、处理日志和源码版本说明。"
reset: restore_viewport_panel_route_step_gates_and_artifact该协议要求“Chapter 6. Working with the UI Source”在相同Unity版本、场景、层级、视口、输入和初始状态下重放。重置后若视口、面板、路由模式、步骤、发布门或证据显示没有回到基线,交互状态已经污染比较,不能作为UI证据。
本页回顾
掌握“Chapter 6. Working with the UI Source”不是记住编辑器点击顺序,而是能围绕“怎样从输入模块沿Raycaster、事件数据、接口和处理器重放一次事件,并区分历史源码仓库与现行包?”重建UI状态,并用“活动输入模块唯一,Raycaster结果可排序,事件数据类型匹配处理器,源码版本与项目Unity版本一致”拒绝“自定义事件容器复用错误数据类型,同时把2015源码仓库操作当作Unity 6包升级流程”。最终交付为输入模块、PointerEventData、RaycastResult、目标排序、事件接口、ExecuteEvents、自定义数据、处理日志和源码版本说明。
练习与答案
练习
- 问题 1:UI合同。 “Chapter 6. Working with the UI Source”为什么必须先声明Unity版本、场景层级、视口、布局写入者、相机与输入模块?
- 问题 2:目录逐项覆盖。 怎样证明公开条目组已经进入机制、交互和练习?
- 问题 3:故障恢复。 怎样证明“自定义事件容器复用错误数据类型,同时把2015源码仓库操作当作Unity 6包升级流程”已经被修正?
名词解释
名词解释
本章出现的专业名词,用大白话再讲一遍。
- UI条目1
对应“The Event System loop;Controlling state;Raycast Marshalling”;在“Chapter 6. Working with the UI Source”中用于从活动输入模块经Raycaster生成事件数据并选择目标,需要连接Unity时代、层级、矩形、画布、输入与目标。
- UI条目2
对应“Working with events;Using a parameter;Built-in event interfaces”;在“Chapter 6. Working with the UI Source”中用于用类型化事件数据和接口把消息派发到明确处理器,需要连接Unity时代、层级、矩形、画布、输入与目标。
- Executing events
对应“Executing events;Building your own handlers or custom events”;在“Chapter 6. Working with the UI Source”中用于用类型化事件数据和接口把消息派发到明确处理器,需要连接Unity时代、层级、矩形、画布、输入与目标。
- UI条目4
对应“A custom event Data Structure;A custom event Interface;A custom event static container”;在“Chapter 6. Working with the UI Source”中用于用类型化事件数据和接口把消息派发到明确处理器,需要连接Unity时代、层级、矩形、画布、输入与目标。
- UI条目5
对应“The Roll a Ball Derby;The Droid script;The Alarm plates”;在“Chapter 6. Working with the UI Source”中用于在版本化3D场景中连接压力板、角色、相机和UI事件,需要连接Unity时代、层级、矩形、画布、输入与目标。
- UI条目6
对应“Getting access to the source;The repository;Getting forked;Keeping up to date”;在“Chapter 6. Working with the UI Source”中用于锁定2015源码版本、分叉、同步与项目集成边界,需要连接Unity时代、层级、矩形、画布、输入与目标。
- UI条目7
对应“Adding your own version of UI to your project;Extra credit, push it back to Unity”;在“Chapter 6. Working with the UI Source”中用于锁定2015源码版本、分叉、同步与项目集成边界,需要连接Unity时代、层级、矩形、画布、输入与目标。