在After Effects(AE)中,表达式是一种基于JavaScript的脚本语言,允许用户通过编写代码来控制图层属性,实现动态、复杂的动画效果,而无需逐帧手动调整,表达式命令是表达式的核心组成部分,通过调用AE内置的函数、属性和方法,实现对时间、空间、数值等的精确控制,掌握表达式命令不仅能大幅提升工作效率,还能创造出许多手动操作难以实现的创意效果。

表达式的基础语法与结构
表达式的基本语法遵循JavaScript规则,通常以“=”开头,后接代码逻辑,在图层的“位置”属性中输入表达式“[100, 200]”,即可将图层固定在坐标(100, 200)处,表达式可以引用其他图层的属性、时间变量或自定义变量,实现属性间的联动,表达式“thisComp.layer(“控制层”).effect(“滑块控制”)(“滑块”)”会读取名为“控制层”的图层中“滑块控制”效果的“滑块”值,并应用于当前属性。
常用表达式命令详解
时间与数值相关命令
time:返回当前时间(以秒为单位)。time*100可使属性值随时间线性增长,每秒增加100。value:返回当前属性的原始值,常用于在表达式中保留原始数值的基础上进行叠加计算,如value + time*50。linear(t, tMin, tMax, value1, value2):将t值在tMin到tMax的范围内,线性映射到value1到value2之间。linear(time, 0, 5, 0, 100)表示在前5秒内,属性值从0线性增长到100。ease(t, tMin, tMax, value1, value2):与linear类似,但使用缓动函数使过渡更自然。ease(time, 0, 5, 0, 100)可实现先快后慢的动画效果。
空间与变换命令
transform.position:获取或设置图层的位置。transform.position + [10, 0]可使图层在原始位置基础上向右偏移10像素。transform.scale:控制图层的缩放。transform.scale * [1.2, 1.2]可将图层放大至120%。transform.rotation:控制图层的旋转角度(单位为度)。time*360可使图层每秒旋转360度。fromWorld(anchorPoint):将图层的锚点从世界坐标转换为图层本地坐标,常用于配合父图层实现复杂的空间联动。
图层与合成相关命令
(图片来源网络,侵删)thisComp:指向当前合成。thisComp.layer("文本").text.sourceText可获取“文本”图层的文字内容。thisLayer:指向当前图层。thisLayer.marker.key(1).time可获取当前图层第一个标记的时间点。index:返回当前图层的索引号。index*10可使不同图层的属性值根据索引产生差异。layer(name):通过名称获取其他图层。layer("控制层").transform.position可读取“控制层”的位置值。
数学与逻辑函数
Math.sin(t):返回t的正弦值,常用于周期性动画。Math.sin(time)*50可使属性值在-50到50之间周期性波动。Math.random():返回0到1之间的随机数。Math.random()*100可生成0到100的随机值。if(condition, value1, value2):条件判断函数。if(time > 2, 100, 0)表示时间大于2秒时值为100,否则为0。
表达式的高级应用技巧
表达式控制器的
AE内置了多种表达式控制器,如“滑块”“角度”“颜色”等,通过这些控制器可以统一管理多个图层的表达式参数,创建一个“滑块控制器”并命名为“速度”,然后在多个图层的位置表达式中输入thisComp.layer("控制器").effect("滑块控制")("滑块")*time,即可通过调整滑块值统一控制所有图层的运动速度。表达式链接与嵌套
表达式可以相互引用和嵌套,形成复杂的逻辑链,先在一个图层中创建表达式time*thisComp.layer("控制器").effect("滑块控制")("滑块"),再将该图层的“位置”属性链接到另一个图层的“缩放”属性,即可实现运动与缩放的联动。表达式与标记的结合
通过marker.key(index)和marker.key(numKeys).time等命令,可以读取图层标记的时间点,实现关键帧的动态控制。marker.key(1).time可获取第一个标记的时间,用于触发动画或重置数值。
(图片来源网络,侵删)数组与循环的应用
对于需要批量处理的场景,可以利用数组和循环简化表达式,创建一个包含多个数值的数组var values = [10, 20, 30, 40];,通过values[index]动态获取不同图层的属性值。
常见表达式命令速查表
| 功能分类 | 命令/函数 | 说明 |
|---|---|---|
| 时间与数值 | time | 返回当前时间(秒) |
linear(t, tMin, tMax, v1, v2) | 线性映射数值范围 | |
ease(t, tMin, tMax, v1, v2) | 缓动映射数值范围 | |
| 空间与变换 | transform.position | 获取/设置图层位置 |
transform.scale | 获取/设置图层缩放 | |
transform.rotation | 获取/设置图层旋转(度) | |
| 图层与合成 | thisComp | 指向当前合成 |
thisLayer | 指向当前图层 | |
layer(name) | 通过名称获取其他图层 | |
| 数学与逻辑 | Math.sin(t) | 返回t的正弦值 |
Math.random() | 返回0-1的随机数 | |
if(condition, v1, v2) | 条件判断函数 |
注意事项与调试技巧
- 语法错误提示:AE表达式编辑器会实时显示语法错误,需注意检查括号、分号等符号的匹配。
- 性能优化:避免在表达式中使用复杂的循环或嵌套,过多的计算可能导致渲染卡顿。
- 调试方法:通过“图表编辑器”可以可视化表达式的数值变化,便于调试动画曲线。
相关问答FAQs
Q1: 如何实现图层随鼠标移动而移动?
A1: 在图层的“位置”属性中输入以下表达式:
thisComp.layer("Null 1").transform.position;“Null 1”是一个空对象图层,将其“位置”属性通过表达式链接到鼠标位置(可通过“效果 > 表达式控制 > 鼠标”实现),即可实现图层跟随鼠标移动。
Q2: 如何让动画在指定时间点重复播放?
A2: 使用loopOut()或loopIn()函数,要使动画在5秒处循环播放,可输入:
loopOut("cycle");该函数会自动将动画的关键帧循环播放,适用于无限重复的动画效果。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/397126.html<





