如何在After Effects中的自定义全局库中声明函数?

6
有没有可能将所有自定义表达式保存在外部.jsx文件中,以便我可以从项目内调用它们?
例如,假设我有一个常用的表达式,将一个木偶工具点与空对象的位置联系起来。我知道我可以将该表达式转换为一个函数,可以接受两个参数,但我可以将其保存到自定义库中,以便我可以在项目中轻松重复使用吗?
目前,我只是从属性复制和粘贴相同的代码,我开始感觉有一种更有效的替代方法。
提前致谢!
3个回答

4

我已经测试过并成功了,将这段代码放在你的表达式顶部:

$.evalFile("/Users/myname/ae/functions.txt");

然后,您可以访问 functions.txt 文件中包含的所有函数。

详情请参见: https://forums.creativecow.net/readpost/227/29337

这种方法的问题在于每个表达式仍需要包含额外的行。

无论如何,这是我的完整设置,以防万一:

$.evalFile("/Users/myname/ae/functions.txt");

var p1  = thisComp.layer("Null 1").transform.position;
var p2  = thisComp.layer("Null 4").transform.position;
var p = p2 - p1;

printPosition(p)

我的 functions.txt 文件包含以下内容:

function printPosition (p){
    return " " + parseInt(p[0]) + " : " + parseInt(p[1])
}

值得注意的是,带有表达式的文件将在每次渲染帧时从磁盘中读取。如果启用了运动模糊,则每帧可能会读取数十次。如果有许多带有外部jsx文件的图层需要读取,这可能会使用户界面非常缓慢。 - stib

1

这是一个有点老的问题,但我找到了一个类似的解决方案,而不需要外部文件。

  1. 为您的函数添加一个空图层
  2. 添加一个标记并在注释中编写您的函数
  3. comp->layer->marker->comment调用eval

enter image description here

当你想调用函数时,只需要一行代码:

eval(thisComp.layer("FunctionLayer").marker.key(1).comment);
test(1);

-1
我认为这是不可能的。 但是,您可以通过将表达式另存为预设(通过将实际图层属性拖到“效果和预设”窗口中)来完成很多工作。 请注意,您可以通过选择它们并使用“动画->应用动画预设”功能将预设应用于几个图层。 希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接