jasaintrovideo.com - Saya mengerjakan serial TV animasi yang melibatkan karakter yang sering duduk di meja mereka. Untuk mempercepat pengaturan adegan, saya membuat tombol ScriptUI yang ketika diklik, melihat nama karakter untuk menentukan siapa, kemudian menerapkan nilai posisi, skala, dan titik jangkar yang sesuai menggunakan loop.
Ini bekerja dengan baik ketika comp kami semua berukuran sama, tetapi baru-baru ini ukurannya berbeda-beda. Jadi saya telah memutuskan untuk mengambil titik referensi dari setiap komposisi, khususnya posisi meja karakter. Skrip sekarang melihat posisi lapisan bernama "Meja" dan menambahkan (atau mengurangi) ke nilai posisinya untuk mendapatkan koordinat X, Y yang diperlukan untuk penempatan yang benar.
Anda akan melihat contoh dari kedua pendekatan dalam kode di bawah ini (versi asli yang bekerja murni pada coord comp, dan pendekatan baru yang menggunakan referensi lapisan). Harap dicatat bahwa dalam contoh di bawah ini hanya ada dua karakter dalam kode. Saya telah menghapus semua karakter lain sehingga postingannya tidak terlalu panjang.
Masalah yang saya hadapi adalah variabel meja saya yang mewah dan mewah tidak melakukan apa-apa! Namun, jika saya memberi komentar dan menggantinya dengan variabel dummy langsung di bawah, skrip berfungsi!
myPanel.grp.group20.desk.onClick = function() {
app.beginUndoGroup("Auto Desk Blocking")
// Layers
var layer = app.project.activeItem.selectedLayers;
// Array for all the settings
var movSettings = [];
// Desk variables
var posH = app.project.activeItem.layer("Desk").transform.position[0];
var posV = app.project.activeItem.layer("Desk").transform.position[1];
// Desk dummy variables
// var posH = 3285.5;
// var posV = 2810.5;
// Objects for all the settings
// Original example for 4000x4000 compositions
movSettings[0] = {
name: ["AQU.mov","AQU_VERTICAL.mov","AQU_PORTRAIT.mov","AQU_LANDSCAPE.mov","AQU_Vertical.mov","AQU_Portrait.mov","AQU_Landscape.mov","AQU_vertical.mov","AQU_portrait.mov","AQU_landscape.mov"],
anchorPoint: [2000,3600],
position: [1267,2984],
scale: [47,47]
}
// This example uses another layer as a reference point, allowing for comps of any size
movSettings[1] = {
name: ["ARI.mov","ARI_VERTICAL.mov","ARI_PORTRAIT.mov","ARI_LANDSCAPE.mov","ARI_Vertical.mov","ARI_Portrait.mov","ARI_Landscape.mov","ARI_vertical.mov","ARI_portrait.mov","ARI_landscape.mov"],
anchorPoint: [2000,3410],
position: [posH+390.5,posV+218.5],
scale: [50,50]
}
// Go though all layers
for(var i = 0; i < layer.length; i++){
// Look for layer with name in layer name
for(var j = 0; j < movSettings.length; j++){
for(var k = 0; k < movSettings[j].name.length; k++){
if(layer[i].name.indexOf(movSettings[j].name[k]) != -1){
// Change layer settings
layer[i].property("Anchor Point").setValue(movSettings[j].anchorPoint);
layer[i].transform.position.setValue(movSettings[j].position);
layer[i].transform.scale.setValue(movSettings[j].scale);
break;
}
}
}
}
app.endUndoGroup();
}
Sebagai bukti konsep, saya membuatnya berfungsi sebagai ekspresi pada Posisi karakter jadi…
posH = thisComp.layer("Desk").transform.position[0]+390.5;
posV = thisComp.layer("Desk").transform.position[1]+218.5;
[posH, posV]
Namun itu tidak bagus dalam penggunaan dunia nyata karena karakter tidak pernah bisa bergerak dari meja mereka. Betapa mengerikan! Saya membutuhkannya untuk berfungsi sebagai tombol ScriptUI sehingga itu hanya memberi stempel nilai pada tempatnya dan memungkinkan penyesuaian lebih lanjut setelah itu.