3.7 KiB
3.7 KiB
编辑器快捷键与微交互样式规范
快捷键矩阵
useMapEditorShortcuts 在模型快照可用时以 capture 阶段统一处理;F 可聚焦机器人或地图选择,其余编辑命令受地图上下文约束,避免与浏览器保存、仿真重置以及输入框 Delete 冲突。
| 快捷键 | 行为 | 约束 |
|---|---|---|
W |
平移 Gizmo | 自动切回 Viewer select 模式 |
E |
旋转 Gizmo | 仅世界 Z 轴 |
R |
缩放 Gizmo | 参数地形及锁定对象会消费按键但不执行缩放 |
F |
聚焦选中对象 | 320ms ease-out 相机过渡;用户拖动相机会中止过渡 |
Delete |
删除选中地图对象 | 输入框和对话框内不拦截;忽略 key repeat |
Ctrl/Cmd + S |
保存并编译场景草稿 | 阻止浏览器“保存网页”;编译失败保留草稿 |
G |
切换网格吸附 | 移动 0.1m / 旋转 5° |
Ctrl/Cmd + Z |
撤销 MapEditSession 操作 | 已有会话行为 |
Ctrl/Cmd + Y |
重做 MapEditSession 操作 | 已有会话行为 |
Escape |
取消对象选择 | 已有会话行为 |
典型接入:
useMapEditorShortcuts({
enabled: Boolean(snapshot),
mapEditing: mapEditingActive,
dirty: mapSceneDirty,
loading,
hasSelection: Boolean(selection),
canDelete: selection?.kind === 'map-object',
canScale: selectedObject?.placementMode !== 'locked',
onTransformMode: changeMapTransformMode,
onFocusSelection: () => viewer.focusSelection(),
onDeleteSelection: () => sessionPort.onDelete(objectId),
onToggleSnapping: () => setSnapping((value) => !value),
onSave: commitMapScene,
});
Scrubbable Number Input
ScrubbableNumberInput 同时保留标准 <input type="number"> 与标签拖拽:
- 在标签上左右拖拽:
每 4px = 1 step; Shift:0.1 倍步长;Alt:0.01 倍步长;Ctrl/Cmd:10 倍步长;- 标签获得焦点时可用左右方向键调节;
- min/max 在组件边界统一约束;
- 拖拽过程中使用等宽数字、accent 边框和低强度辉光。
适用于地图位姿、尺寸、材质、摩擦、出生点,以及仿真 Actuator 参数。
视觉层级
色彩与材质
- 页面底色:
--ui-bg,暗色模式保持蓝黑而非纯黑; - 一级面板:
--ui-panel; - 二级表面:
--ui-surface; - 浮层玻璃:
--ui-glass,透明度约 78%; - 强调色只用于选择、有效落点与可提交状态;
- 警告色只用于未保存草稿和物理诊断。
公共样式类
.workbench-header /* 顶栏横向工程渐变 */
.engineering-glass /* 16px blur、微渐变、内高光、细边框 */
.engineering-card /* Inspector 二级属性组 */
.engineering-badge /* 微渐变 Badge 与细阴影 */
.tool-active-glow /* 激活工具的低强度 accent 光晕 */
.map-tool-enter /* 浮动工具条入场 */
.draft-dirty-dot /* 未保存状态呼吸提示 */
.scrubbable-number-* /* 数值拖拽完整状态 */
优先使用这些语义类,组件内部再组合 Tailwind 布局类。例如:
<div className="engineering-glass map-tool-enter rounded-xl border p-1.5" />
<section className="engineering-card rounded-lg border p-2.5" />
动效时长
| 场景 | 时长 | 曲线 |
|---|---|---|
| Button hover / press | 150ms | ease-out |
| 浮动工具条出现 | 220ms | cubic-bezier(.22,1,.36,1) |
| 相机聚焦 | 320ms | cubic ease-out |
| Snap to Surface 3D 指示器 | 720ms | 双脉冲衰减 |
| 草稿状态呼吸 | 1800ms | ease-in-out |
所有动画必须受 prefers-reduced-motion: reduce 约束,不以动画作为唯一状态表达。Snap to Surface 同时使用绿色/青色圆环、十字中心和高度位置表达真实接触面。