属性
Property
此类别包含与通用属性相关的条目。
在表达式中,属性通常是时间轴中存在的任何内容(即使它不能设置关键帧或包含表达式)。
??? example “属性示例”
以下所有 AE 项实际上都是表达式中使用的“属性”,以及*一些*通过代码访问这些属性的方式:
- 位置 (`thisLayer.transform.position`, `layer.position`)- 缩放 (`thisLayer.transform.scale`, `layer.scale`)- 滑块效果的*实际滑块* (`effect("Slider Control")("Slider")`, `effect("Slider Control")(1)`)- 文本图层的 [文本](../../text/text) 属性 (`thisLayer.text`) - *请注意,在这种情况下,文本也有其自己的特殊项,请参见上面的链接。*
在本页中,我们将使用 thisLayer.position
作为调用这些项的示例,但请注意,任何返回 属性 的方法都可以使用。
属性
name
thisLayer.position.name
描述
返回属性或属性组的名称。
类型
字符串
numKeys
thisLayer.position.numKeys
描述
返回属性上的关键帧数量,或标记属性上的标记数量。
:::note 如果你使用分离维度命令将位置属性的维度分离为单独的组件,关键帧的数量会发生变化,因此此方法返回的值也会发生变化。 :::#### 类型
数字
propertyIndex
thisLayer.position.propertyIndex
描述
返回属性相对于其属性组中其他属性的索引,包括蒙版、效果、文本动画器、选择器、形状、跟踪器和跟踪点中的属性组。
类型
数字
speed
thisLayer.position.speed
描述
返回一个一维的正速度值,等于属性在默认时间变化的速度。
:::note 这只能用于空间属性。 :::#### 类型
数字
value
thisLayer.position.value
描述
返回当前时间的属性值。
类型
数字、数组或字符串
velocity
thisLayer.position.velocity
描述
返回当前时间的时间速度值。对于空间属性(如位置),它返回切线矢量值。结果与属性的维度相同。
类型
数字或数组
函数
key()
thisLayer.position.key(index)
描述
通过索引号返回关键帧或标记键对象。
参数
参数 | 类型 | 描述 |
---|---|---|
index | 数字 | 关键帧(或标记键)的索引号 |
返回
关键帧或标记键
示例
获取属性上的第一个关键帧:
thisLayer.scale.key(1);
获取属性上的最后一个关键帧:
thisLayer.rotation.key(thisLayer.rotation.numKeys);
key()
thisLayer.position.key(markerName)
描述
返回具有此名称的标记键对象。
:::note 这只能用于标记属性。 :::#### 参数
参数 | 类型 | 描述 |
---|---|---|
markerName | 字符串 | 要返回匹配键的标记名称。 |
返回
标记键
loopIn()
thisLayer.position.loopIn([type="cycle"][, numKeyframes=0])
描述
循环从图层上的第一个关键帧向前到图层出点的时间段。循环从图层的入点开始播放。
你可以使用关键帧循环方法来重复一系列关键帧。你可以在大多数属性上使用这些方法。例外包括:
- 无法通过时间轴面板中的简单数值表达的属性,例如:
- 源文本属性,
- 路径形状属性,以及
- 色阶效果的直方图属性。
关键帧或持续时间值过大时会被裁剪到最大允许值。值过小会导致恒定循环。
参数
参数 | 类型 | 描述 |
---|---|---|
type | 预定义字符串,如循环类型 中定义 | 可选。要使用的循环类型。默认为 "cycle" |
numKeyframes | 数字 | 可选。要循环的段,从关键帧 #1 到关键帧 #numKeyframes + 1 。如果未指定(或为 0 ),则所有关键帧循环。默认为 0 。 |
返回
与此当前属性类型相同的循环值。
示例
循环由第一个和第四个关键帧界定的段:
loopIn("cycle", 3);
从当前关键帧向前和向后无限循环:
loopIn("continue") + loopOut("continue") - value;
请注意,我们需要减去 value
,因为 loopIn()
和 loopOut()
都包含当前值;通过将它们相加,我们有两个当前值的副本,需要移除一个(- value
)以返回到正确的关键帧值。
loopInDuration()
thisLayer.position.loopInDuration([type="cycle"][, duration=0])
描述
循环从图层上的第一个关键帧向前到图层出点的时间段。
参数
参数 | 类型 | 描述 |
---|---|---|
type | 预定义字符串,如循环类型 中定义 | 可选。要使用的循环类型。默认为 "cycle" |
duration | 数字 | 可选。要循环的段的合成秒数,从第一个关键帧开始测量。如果未指定(或为 0 ),则要循环的段从图层出点开始。默认为 0 。 |
返回
与此当前属性类型相同的循环值。
示例
循环整个动画的第一秒:
loopInDuration("cycle", 1);
loopOut()
thisLayer.position.loopOut([type="cycle"][, numKeyframes=0])
描述
循环从图层上的最后一个关键帧向后到图层入点的时间段。循环播放直到图层出点。
:::info David Van Brink 在他的 omino pixel 博客 上提供了一篇指导文章和示例项目,展示了如何使用 Echo 效果、Particle Playground 效果和 loopOut()
方法来动画化一群风格化的游泳细菌。 :::#### 参数
参数 | 类型 | 描述 |
---|---|---|
type | 预定义字符串,如循环类型 中定义 | 可选。要使用的循环类型。默认为 "cycle" |
numKeyframes | 数字 | 可选。要循环的段,从最后一个关键帧向后测量。如果未指定(或为 0 ),则所有关键帧循环。默认为 0 。 |
返回
与此当前属性类型相同的循环值。
示例
循环由最后一个关键帧和倒数第二个关键帧界定的段:
loopOut("cycle", 1);
loopOutDuration()
thisLayer.position.loopOutDuration([type="cycle"][, duration=0])
描述
循环从图层上的最后一个关键帧向后到图层入点的时间段。循环播放直到图层出点。
参数
参数 | 类型 | 描述 |
---|---|---|
type | 预定义字符串,如循环类型 中定义 | 可选。要使用的循环类型。默认为 "cycle" |
duration | 数字 | 可选。要循环的段的合成秒数,从最后一个关键帧向后测量。如果未指定(或为 0 ),则要循环的段从图层入点开始。默认为 0 。 |
返回
与此当前属性类型相同的循环值。
示例
循环整个动画的最后一秒:
loopOutDuration("cycle", 1);
nearestKey()
thisLayer.position.nearestKey(t)
描述
返回最接近指定时间 t
的关键帧或标记键对象。
参数
参数 | 类型 | 描述 |
---|---|---|
t | 数字 | 要查找最近关键帧的时间 |
返回
关键帧或标记键
示例
获取最接近合成中 2 秒时间的关键帧:
const twoSecondKey = thisLayer.scale.nearestKey(2);
// 然后,获取该关键帧的值:twoSecondKey.value;
propertyGroup()
thisLayer.position.propertyGroup([countUp=1])
描述
返回相对于写入表达式的属性的一组属性。
例如,如果你将 propertyGroup(1)
表达式添加到画笔描边的旋转属性,表达式将目标为包含旋转属性的变换属性组。如果你添加 propertyGroup(2)
,表达式将目标为画笔属性组。
此方法允许你在属性层次结构中建立与名称无关的关系。它在复制包含表达式的属性时特别有用。propertyGroup
的 numProperties
方法返回属性组中的属性数量。
参数
参数 | 类型 | 描述 |
---|---|---|
countUp | 数字 | 可选。要向上爬取的属性组数量。默认为 1 。 |
返回
示例
返回包含写入此表达式的属性的组中的属性数量:
thisProperty.propertyGroup(1).numProperties;
smooth()
thisLayer.position.smooth([width=.2][, samples=5][, t=time])
描述
平滑属性值随时间的变化,将值中的大而短暂的偏差转换为更小、更均匀分布的偏差。这是通过在指定时间对属性值应用盒式滤波器来实现的。
参数
参数 | 类型 | 描述 |
---|---|---|
width | 数字 | 可选。滤波器平均的时间范围(以秒为单位)。默认为 0.2 。 |
samples | 数字 | 可选。在时间上均匀分布的离散样本数量。使用较大的值以获得更大的平滑度(但性能降低)。默认为 5 。 |
通常,你希望样本数量为奇数,以便当前时间的值包含在平均值中。 | ||
t | 数字 | 可选。应用平滑滤波器的指定时间(以合成秒为单位)。默认为 time (当前合成时间,以秒为单位)。 |
返回
数字或数组
示例
平滑位置属性的动画:
position.smooth(0.1, 5)
speedAtTime()
thisLayer.position.speedAtTime(t)
描述
返回指定时间的空间速度值。
参数
参数 | 类型 | 描述 |
---|---|---|
t | 数字 | 获取空间速度值的指定时间。 |
返回
数字
temporalWiggle()
thisLayer.position.temporalWiggle(freq, amp[, octaves=1][, amp_mult=0.5][, t=time])
描述
在摆动的时间采样属性。
为了使此函数有意义,它采样的属性必须是动画的,因为该函数仅改变采样时间,而不是值。
参数
参数 | 类型 | 描述 |
---|---|---|
freq | 数字 | 频率,以每秒摆动次数为单位。 |
amp | 数字 | 振幅,以应用到的属性单位为单位。 |
octaves | 数字 | 可选。要添加在一起的噪声八度数。默认为 1 。 |
amp_mult | 数字 | 可选。每个八度 amp 乘以的倍数。默认为 0.5 。 |
t | 数字 | 可选。基本开始时间。默认为 time (当前合成时间,以秒为单位)。 |
返回
数字或数组
示例
为缩放添加时间摆动:
scale.temporalWiggle(5, 0.2)
valueAtTime()
thisLayer.position.valueAtTime(t)
描述
返回指定时间(以秒为单位)的属性值。
:::note Dan Ebberts 在 MotionScript 上提供了更多使用 valueAtTime
和 velocityAtTime
方法的示例和技术。 :::#### 参数
参数 | 类型 | 描述 |
---|---|---|
t | 数字 | 获取值的时间(以秒为单位) |
返回
数字或数组
示例
例如,要使每个帧的属性值从一组四个值中随机选择,请在 0
、1
、2
和 3
秒处将你的四个值设置为关键帧,然后将以下表达式应用于属性:
valueAtTime(random(4))
velocityAtTime()
thisLayer.position.velocityAtTime(t)
描述
返回指定时间的时间速度值。
参数
参数 | 类型 | 描述 |
---|---|---|
t | 数字 | 获取时间速度的时间(以秒为单位) |
返回
数字或数组
wiggle()
thisLayer.position.wiggle(freq, amp[, octaves=1][, amp_mult=0.5][, t=time])
描述
随机抖动(摆动)属性的值。
:::note Dan Ebberts 在他的 网站 上提供了一个示例表达式和详细解释,展示了如何使用 wiggle
方法的时间参数创建循环动画。 :::#### 参数
参数 | 类型 | 描述 |
---|---|---|
freq | 数字 | 频率,以每秒摆动次数为单位。 |
amp | 数字 | 振幅,以应用到的属性单位为单位。 |
octaves | 数字 | 可选。要添加在一起的噪声八度数。此值控制摆动中的细节量。 |
将此值设置为高于默认值以包含更高频率,或设置为低于默认值以包含摆动中的振幅谐波。默认为 1 。 | ||
amp_mult | 数字 | 可选。每个八度 amp 乘以的倍数。此值控制谐波衰减的速度。 |
将此值设置为接近 1 以使谐波以与基频相同的振幅添加,或设置为接近 0 以添加较少的细节。默认为 0.5 。 | ||
t | 数字 | 可选。基本开始时间。此值默认为当前时间。如果你希望输出是在不同时间采样的属性值的摆动,请使用此参数。默认为 time (当前合成时间,以秒为单位)。 |
返回
数字或数组
示例
这会产生大约每秒 5
次摆动,平均大小约为 20 像素。除了主要摆动外,还会发生两个更详细的摆动级别,频率分别为每秒 10
和 20
次摆动,大小分别为 10
和 5
像素:
position.wiggle(5, 20, 3, 0.5);
此示例在二维属性(如缩放)上,使两个维度以相同的量摆动:
const v = wiggle(5, 10);
[v[0], v[0]];
此示例在二维属性上,仅沿 y 轴摆动:
const freq = 3;const amp = 50;const w = wiggle(freq,amp);
[value[0], w[1]];
循环类型
以下循环类型是用于以下方法的“类型”参数的预定义字符串:
类型 | Behaviour | |
---|---|---|
"cycle" | 默认。重复指定的段。 | |
"pingpong" | 重复指定的段,交替向前和向后。 | |
"offset" | 重复指定的段,但通过段开始和结束时的属性值差异乘以段循环的次数来偏移每个周期。 | |
"continue" | 不重复指定的段,而是根据第一个或最后一个关键帧的速度继续动画属性。 | |
例如,如果图层的缩放属性的最后一个关键帧为 100% ,则图层会继续从 100% 缩放到出点,而不是直接循环回到出点。此类型不接受关键帧或持续时间参数。 |