关于 propertyGroup() 是什么,怎么用,不了解的同学先去看看官方文档:
After Effects 中的表达式语言 (adobe.com)propertyGroup() 方法我会用的比较多,它类似 jQuery 中的 .parent() 方法,你可以用它来读取某一层父级的属性,如果在 AE 中使用拾取器引用属性,它获得的属性路径是固定的,一旦复制图层或内容,它依然指向初始的引用,而不能切换到新的父级,所以学会使用 propertyGroup() 方法在后期表达式的学习和应用中非常重要,同时它也能帮助你理解 AE 的属性结构。
我们简单一点吧,直接上干货:
// AE 表达式帮助器,将帮助器应用于空文本图层,以显示想要查询的信息
// 调整文本字号以便舒适的显示结果
helper = {
// 列出当前属性的父级路径,用来帮助我们使用 propertyGroup() 方法,这样就可以清晰的看到该方法应该设置的参数
// property 属性,图层中的任意属性,因为是在空文本图层中显示,因此你需要使用 pick whip 索引目标属性
// levels 是向上索引的层级,默认是 10,你可以大概预估一下层级,超出范围也不会报错,但是会输出提示,它不会影响范围内的正确结果
printPropertyParent: (property, levels = 10) => {
// 声明一个新数组,这主要是为了可以从下往上显示,更符合父子层级的阅读顺序
let _arr = [];
// 根据要显示的层级循环查询
for (let i = 1; i <= levels; i++) {
// 使用 try catch 语句避免 AE 抛出错误,AE 一旦表达式报错,就无法继续运行,在非调试环境中尽量保持 AE 报错,否则很难查找错误
try {
// 尝试读取这个层级的父级,如果可以读取会将层级索引和层级名称记录到数组中
_arr.push(`[${i}] ${property.propertyGroup(i)}`);
} catch (error) {
// 如果不能读取,会记录错误信息
_arr.push(`[${i}] ${error}`);
}
}
// 数组反向
_arr.reverse();
// 将数组连接成字符串,每一个层级进行一次换行
return _arr.join('\n')
}
}
这个帮助器我已经上传到 Github 上面了,你可以直接下载,也可以自己建一个文本文档,把代码贴进去,然后保存退出,再修改扩展名为 .jsx 就可以在 AE 中使用了。在之前的文章中,我专门写过函数复用的方法,这次用到的也是其中的一个方法,有兴趣可以往前翻一翻文章。这个帮助器后续如果有更新,你可以重新下载,或者在 Github 上 Follow 这个项目。
GitHub - daveswong/expressionHelper.jsx: AE 表达式帮助脚本代码的实现过程都写在注释中了,不再解释,下面主要讲一下怎么使用。
1. 导入脚本文件
![6d018ebe47a2f9687a56f884c814e6e2.png](https://i-blog.csdnimg.cn/blog_migrate/07a69b38d7958d5f788bf10fcc2a8aa0.png)
与导入一般素材的方法相同,在项目面板中双击导入文件就行了,导入以后添加到合成时间线,虽然这不是必须的,但是如果它不在你使用的合成中,你在整理工程时就很容易把它删掉。
![5a9bc7bd9d6ec955a6806a0bfc5566a9.png](https://i-blog.csdnimg.cn/blog_migrate/1cdc34e8d689a673dd2d69f52d692766.png)
2. 新建文本图层
新建一个文本图层,用来显示输出结果。因为 AE 不像我们编写前端 JavaScript 代码那样可以使用浏览器控制台来输出 console.log(),所以只能借用文本图层来显示。如果使用了图层索引,尽量把调试用的图层都放置在最下方,以免干扰其它代码的运行。
3. 调用帮助器的方法
在文本图层源文本属性开启表达式,贴入下方的代码;
// 声明目标属性
let _property = thisComp.layer("随机块控件").content("行 1").content("块 1").content("矩形路径").size;
// 执行脚本文件
eval(footage("expressionHelper.jsx").sourceText);
// 调用 printPropertyParent() 方法
helper.printPropertyParent(_property, 10)
![462aaf357457438501191b9d0f09e4ac.png](https://i-blog.csdnimg.cn/blog_migrate/196e66adabb632037f12fa20233b4f54.png)
如上图中所示,从当前的矩形路径大小属性到形状图层一共有 7 个层级,我已经在左下角给它们标记上了对应的索引序号,你会疑惑为啥看不到 2 和 4 这两个层级。实际上你看一下层级 6,它是一个内容容器,是一个单独的属性组,除了内容属性组,还有效果和变换属性组。同理,其它内容组也讲内容和其它属性做了分组,但是它们并没有以组的形式显示,这也是 propertyGroup() 方法用起来困难的原因。
![4168504968edf2afb5c7fb60d77186c6.png](https://i-blog.csdnimg.cn/blog_migrate/58a3ec8287a690a662b1b1e85f7d4aa7.png)
有了上面的结果,再想使用 propertyGroup() 方法导航到需要的位置就非常简单了,它可以像下面这样来应用。
![bd7eecfca1132691e22af1484d82c21c.png](https://i-blog.csdnimg.cn/blog_migrate/9ffbbcd821f69cdac2d382555de05dc2.png)
后面涉及到它的用法的案例还会有很多,关注我的专栏就能了解到。对于初学的同学,建议先自学一下正规入门的课程:
知乎影视后期制作实战营-0610-开课