Idee
Supposons que nous ayons simplement besoin d’un detecteur de proximite simple. Nous voulons faire changer de couleur un calque lorsqu’un autre calque s’approche a une certaine distance. Cela n’a pas besoin d’etre aussi precis qu’un detecteur de collision, ou nous voudrions savoir si des pixels visibles de deux calques se chevauchent.
Conception
Ce que nous devons faire ici, c’est creer une boucle qui examinera chacun des autres calques actuellement actifs avec du contenu video et verifiera si l’un d’eux est suffisamment proche pour declencher la condition de proximite. Dans ce cas, nous ferons simplement en sorte que le calque change de couleur lorsqu’il est proche d’un autre calque. Nous ferons cela en concevant notre expression pour le parametre Color d’un effet Fill.
Dans ce cas, si nous utilisons des formes rondes, notre configuration se rapprochera d’un detecteur de collision, car nous utiliserons la distance entre deux calques comme condition de proximite. Cela se revele etre la moitie de la somme des largeurs des deux calques.

Note n°1 ; l’expression originale a ete creee par Dan Ebberts. Cependant, lorsque je faisais des recherches dessus pour cet e-mail, le calcul de la largeur ne fonctionnait pas correctement. J’ai corrige les calculs comme suit :
(layer1.sourceRectAtTime(time, false).width +
layer2.sourceRectAtTime(time, false).width)/2;
Note n°2 : vous pourriez penser : “OK, mais ils sont juste l’un a cote de l’autre. Et s’ils sont eloignes ?”. Bonne question !
Nous devons calculer la distance minimale entre eux et la distance reelle. Une fois que nous les comparons, nous comprendrons s’ils sont proches ou non.
Note n°3 : pour plus d’efficacite, nous voudrons sortir de la boucle des que nous trouvons un calque qui remplit la condition de proximite.
Copiez le code dans la propriete color :

out = [1, 1, 0, 1];
-50%
-50%
00h : 00min : 00s
Happy HolidaysPromo partout
Acheter
 for (i = 1; i <= thisComp.numLayers; i++){
if (i == index) continue; L = thisComp.layer(i);
if (! (L.active && L.hasVideo)) continue;
delta = (thisLayer.sourceRectAtTime(time, false).width +
L.sourceRectAtTime(time, false).width)/2;
if (length(position, L.position) <= delta){
out = [1, 0.25, 0, 1];
break;
}

}

out
Astuce de pro : rappelez-vous que dans les expressions,
les couleurs sont representees sous forme de tableaux de quatre elements
sous la forme [red, green, blue, alpha]
ou chaque valeur est un nombre compris entre zero
et un. Ainsi, dans notre exemple, [1, 1, 0, 1]

represente un jaune vif.

Analyse

Source https://motionscript.com/design-guide/proximity.html
Astuce de pro : allez dans AEJuice Pack Manager – Expressions Pack pour appliquer cette expression en 1 clic. Voici les liens directs vers la derniere version du plugin :

Our Bestsellers

Our Bestsellers