跳转至

重新编辑已组装的场景

视频教程 —— 即将推出

Assemble 不是一扇单向门。一旦某个槽位的节点已经存在于 Node View 里,OSA 就不再创建它们,而开始就地编辑它们

new 与 existing

Inspector 里的每个组件都带着一个标记,说明它属于两者中的哪一个:

标记 含义
+ new —— 这个节点还不存在;Assemble 会创建它
(方块) existing —— 这个节点在 Node View 里;Assemble 会编辑它
灰色 该组件没有勾选,所以两种情况下都不会有事发生

只画出其中一种状态 —— existing —— 其余每一行都不标。每一行都有标记那就是纹理,不是信号;按组件给答案的地方是 Inspector。

它是形状,不是颜色

这些标记用标签自身的颜色绘制,所以换主题之后、以及对色盲读者,这个读法依然成立。区别在于 + 对方块,不是紫色对青色。

"就地编辑"是什么意思

对一个标为 existing 的槽位,Assemble 不会创建第二个节点,也不会移动第一个。它会:

  • 如果你给槽位改了名,就给节点改名,
  • 重写你改过的属性 —— composite 模式、对齐、混合模式、效果数值、backdrop 颜色和标题,
  • 不动节点在 Node View 里的位置
  • 之后再次把该槽位标为 existing,这样下一次 Assemble 又是一次更新,而不是一次复制。

最后这一点正是 Assemble 可以反复按的原因。这就是正常的工作节奏:组装,在 Harmony 里看看,回来,改点东西,再组装。

一个声称存在却说不出在哪的节点会被报为 unaddressable 并被搁置,因为重建它会让你有两个。见 组装

树不是 "Top"

这是让人吃惊的一部分,也正是上一节存在的全部意义。

对新节点来说,staging 树的根意味着 Top —— Node View 的顶层。这是默认值,而对一个你从零搭起的场景来说,这是唯一合理的读法。

对已存在的节点来说,树的根是一个地址。 一个来自场景的 0 层行代表被导入的那条链的根 —— 你带进来的东西的最外层节点 —— 而它下面的一切都是那条链在 Harmony 里的真实位置,不是它在 Top 的一个副本。

所以同样的缩进,会因为这一行的来处不同而意味着两件不同的事,而标记告诉你是哪一件:

一个 0 层的行如果是…… 它位于
new+ Top
existing(▪) 它那条链在场景里实际所在的位置

新子级落在哪

把新东西挂到一个已存在的槽位上,它会在 Harmony 里那个槽位的上下文中创建 —— 不是在 Top。

OSA 按这个优先级把上下文解析成一个锚点

GROUP  >  PEG  >  COMP  >  DRAWING

Group 排第一是有实测理由的:当 peg 优先时,一个 P+G super node 的新子级会诞生在 group 外面。group 就是子级的上下文 —— 和创建路径上完全一致,在那里勾上 Group 就会把子级放进去。

所以:

  • 在一个已存在的 hero=P-G-C 下加一张 drawing,它会出现在 hero-G 内部,接进 hero-C
  • 加一个效果,它落在那个槽位的链上,落在 Wide Bus 为它预留的那条带子里。

不会有东西仅仅因为在你树里缩进在一个 0 层行之下,就跑到 Top 去。

移动东西

你移动的是 Assemble 时会发生什么
一个新行,放在任何地方 它在新位置被创建;没有什么要重连
链内部的一个已存在行 各个 peg 会被重新连接以匹配新的父子关系
一条已导入链的根 整条链在它的新位置下被重新连接
什么都没动 —— 你只加了新行 新节点去到那条链自己的位置,无论它连在哪

最后一行值得记住:如果你不移动那条导入的链,往它上面加东西也不会移动它。新的部件嵌进链已经在的地方。

虚拟路径

Inspector 的 Path 字段显示一个槽位解析到的地址,读起来就像 Node View 自己的路径:

Top/ParentGroup-G/SelfGroup-G/Element-C

什么会出现在里面的规则:

  • 祖先只有在是 group 时才贡献一层 —— 中间的 peg 或 backdrop 不增加层级,因为它们在 Harmony 里也都不创建层级;
  • 槽位自身贡献它的 group(如果有),然后是它的 comp 或 drawing;
  • peg、backdrop 和效果从不出现 —— 它们在层级里面,不是自己一层。

背后没有文件的槽位显示 New Node (Memory)。那不是错误 —— 它表示这一行还没有地址,因为它从未被组装过。

把一个场景捡回来

Magnetize Scene 通过你的 magnets 读取现有的 Node View,并把找到的东西放进 staging —— 你就是这样重新打开一个昨天组装的场景,或者别人搭的场景,然后继续按槽位编辑它。

它带进来的一切到货时都标着 existing,带着地址,所以从第一次按下起,本页的规则就适用。