目录表达式基础

表达式

表达式基础

表达式是一小段脚本,在每一帧算出一个属性的值:跟随另一个图层、抖动、循环,或让两个设置保持同步。表达式用的是 After Effects 的表达式语言,你在 After Effects 里会的大多数写法这里都能用。

添加表达式

属性或效果控件里旁边带 Σ 按钮的属性,都可以加表达式。

  1. 选中图层,找到要加表达式的属性。

  2. 点它的 Σ 按钮,或按住 Alt(Mac 上是 ⌥)点它的秒表。属性下方打开表达式输入框,初始内容是 value,即属性自己的值。

  3. 编写表达式。最后一行的值就是结果,它要与属性相符:数字、像 [x, y] 这样的数组、颜色或文本。

  4. 点预览。表达式在当前帧运行一次;写错时,输入框下方给出出错的行和列。

  5. 点应用。只有当前这段文字预览成功后才能应用;预览之后项目又有改动的话,请再预览一次。

  • 表达式生效后,属性显示表达式在当前帧给出的值,Σ 按钮会亮起。
  • 启用可以关闭表达式而不删掉它(要再预览、应用才算数);删除则删掉它。
  • 转换为关键帧按表达式的值在图层的每一帧设一个关键帧,并关闭表达式,与 After Effects 相同。

属性关联器替你写表达式,相当于 After Effects 的关联器(pick whip):让一个属性跟随另一个属性。

  1. 打开要跟随的那个属性的表达式。

  2. 拖动关联器(表达式旁边的关联按钮),放到它要跟随的属性上:属性、效果控件或时间轴里的都可以。也可以先点关联器,再点那个属性;按 Esc 取消。

  3. 关联立即生效,算一步,可以撤销;输入框里显示它写好的表达式。

一个矩形形状图层的旋转关联到滑块控制:左边效果控件里是滑块,右边属性面板里是关联器写好的表达式。
  1. 它跟随的属性:这里是滑块控制的滑块。
  2. 关联器。
  3. 它写好的表达式,可以像别的表达式一样修改。
  4. 表达式读取了几个别的属性。
  5. 它在这一帧给出的值。
  • 关联器按名称写出另一个图层和效果;有两个同名时改用 id。
  • 大小不同的属性会自动对上:单个数字关联到位置时两个值都用它,位置关联到单个数字时取它的第一个值。
  • 属性不能关联到自己,也不能关联到值的种类用不上的属性;这时编辑器会提示,什么也不写。

读取别的图层和属性

表达式能读取项目里的任何属性,写法与 After Effects 相同:

thisComp.layer("Ball").transform.position
本合成里名为 Ball 的图层的位置
thisComp.layer(1)
本合成最上面的图层:图层从最上面的 1 开始编号
thisLayer
表达式所在的图层。它的名称也可以单独用:position 就是它的位置。
comp("Title").layer("Logo")
另一个合成里的图层,按名称
effect("Slider Control")("Slider")
本图层某个效果的一个设置,按效果名和设置名

表达式控件

表达式控件是只保存一个值供表达式读取、不改变画面的效果。把它放在图层上,再把几个属性都关联到它,一个滑块、角度盘或颜色就能同时驱动它们。在效果和预设的表达式控制类别里添加:

按控件的名称和设置的名称读取它,比如 effect("Slider Control")("Slider"),或用关联器关联到它。每种控件给出什么,见表达式参考⁠ (在新标签页打开)。

表达式出错时

预览能在写进项目之前发现大多数错误:拼写错误、不存在的名称、结果的种类不对。输入框下方的提示给出行和列。

表达式也可能在项目改动之后才出错,比如它点名的图层被删掉,或者表达式在运行时拼出名字、而那个图层改了名。这时问题会列出它和它所在的属性。

一个图层改名后的问题面板:旋转上的表达式在运行时拼出图层的名字,仍按旧名字去找。
  1. 这一帧有几个问题。
  2. 哪里出了什么错,以及表达式自己的报错。
  3. 在此期间,这个属性用不带表达式的值。
  4. 问题解决之前不能导出。
  • 出错的表达式不会让项目的其他部分坏掉:只有这个属性退回到不带表达式的值。
  • 改好表达式,再预览、应用一次,或者删掉它;这一帧算得出来时,问题就消失了。

依赖与循环

  • 输入框下方显示表达式读取了几个别的属性;每一帧编辑器都先把它们算出来。
  • 两个属性互相读取,不管是直接的还是经过别的属性,就形成循环。编辑器能从文字里看出的循环,在预览时就被拒绝;只在运行时才出现的循环,会连同其中的属性链一起报出。
  • 读取属性自己的值(value、valueAtTime)不算依赖:它得到的是表达式之前的值,所以表达式可以建立在自己的关键帧上。

须知