【AE表达式】实用:查看 propertyGroup 索引

关于 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

与导入一般素材的方法相同,在项目面板中双击导入文件就行了,导入以后添加到合成时间线,虽然这不是必须的,但是如果它不在你使用的合成中,你在整理工程时就很容易把它删掉。

5a9bc7bd9d6ec955a6806a0bfc5566a9.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

如上图中所示,从当前的矩形路径大小属性到形状图层一共有 7 个层级,我已经在左下角给它们标记上了对应的索引序号,你会疑惑为啥看不到 2 和 4 这两个层级。实际上你看一下层级 6,它是一个内容容器,是一个单独的属性组,除了内容属性组,还有效果和变换属性组。同理,其它内容组也讲内容和其它属性做了分组,但是它们并没有以组的形式显示,这也是 propertyGroup() 方法用起来困难的原因。

4168504968edf2afb5c7fb60d77186c6.png

有了上面的结果,再想使用 propertyGroup() 方法导航到需要的位置就非常简单了,它可以像下面这样来应用。

bd7eecfca1132691e22af1484d82c21c.png

后面涉及到它的用法的案例还会有很多,关注我的专栏就能了解到。对于初学的同学,建议先自学一下正规入门的课程:

知乎影视后期制作实战营-0610-开课

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值