如何在After Effects中为不同尺寸元素设置均匀间距?
解决After Effects中不同尺寸图层的均匀分布(首尾元素半显)问题
方案1:用表达式自动计算位置
给目标图层的Position属性添加以下表达式,可自动实现首尾仅显示一半、中间图层间距均匀的效果:
// 水平分布专用,保持Y坐标不变 group = thisComp.layer("Distribute Group"); // 替换为你的图层组名称 layers = group.layers; totalSpacing = 20; // 自定义图层间的间距数值 indexInGroup = thisLayer.index - group.index; firstLayer = layers[1]; lastLayer = layers[layers.length]; // 计算起始基准点(首图层左边缘) startX = firstLayer.position[0] - firstLayer.sourceRectAtTime().width/2; // 计算当前图层的X位置 xPos = startX + firstLayer.sourceRectAtTime().width/2; if (indexInGroup > 1) { for (var i = 1; i < indexInGroup; i++) { xPos += totalSpacing + layers[i].sourceRectAtTime().width/2 + layers[i+1].sourceRectAtTime().width/2; } } [xPos, thisLayer.position[1]]
使用说明:
- 把需要分布的图层放到同一个组里,命名为
Distribute Group(或替换表达式里的组名) - 调整
totalSpacing为你需要的图层间距 - 给组内每个图层的Position属性粘贴这个表达式
方案2:用JSX脚本批量处理
如果需要频繁操作,写个简单脚本一键完成更高效,以下是核心脚本代码:
var activeComp = app.project.activeItem; if (!(activeComp instanceof CompItem)) { alert("请先选中一个合成"); exit(); } var selectedLayers = activeComp.selectedLayers; if (selectedLayers.length < 2) { alert("请至少选中2个图层"); exit(); } var spacing = 20; // 自定义间距 var startX = selectedLayers[0].position[0] - selectedLayers[0].sourceRectAtTime().width/2; var currentX = startX + selectedLayers[0].sourceRectAtTime().width/2; for (var i = 0; i < selectedLayers.length; i++) { var layer = selectedLayers[i]; var rect = layer.sourceRectAtTime(); if (i > 0) { currentX += spacing + selectedLayers[i-1].sourceRectAtTime().width/2 + rect.width/2; } layer.position.setValue([currentX, layer.position[1]]); }
使用方法:
- 将代码保存为
distributeLayers.jsx文件 - 在AE中打开目标合成,选中需要分布的图层
- 点击
文件>脚本>运行脚本文件,选择保存的JSX文件即可
官方文档相关描述
当分布不同尺寸的图层时,图层之间的间距可能不均匀。例如,按中心分布图层会使中心之间的间距相等,但不同尺寸的图层会以不同的长度延伸到图层之间的空间中。
AE默认的分布工具无法满足首尾半显的需求,所以需要通过表达式或脚本自定义位置计算逻辑,替代手动导入坐标的低效方法。
内容的提问来源于stack exchange,提问作者Steffen Krause
相关产品推荐
相关产品推荐

