終了

レイヤー同士の距離によって参照するレイヤーを変えたいです。

New Here ,
Jun 05, 2023 Jun 05, 2023

リンクをクリップボードにコピー

コピー完了

 数字の画像が入った10個ほどのレイヤーがコンポジションの中を飛び回っているものを作りました。それからさらに2つのレイヤーが重なったらその数字が足し合わされたレイヤーに変化するというものを作りたいのです。それで2つほど悩んでいることがあります。

 

1、thisLayerに一番近いレイヤーとの距離を常に参照して、距離が決めた数値を下回ったときに反応するようにしたいと考えています。あらかじめレイヤーを指定して参照するのではなく、レイヤー同士の距離によって参照するレイヤーをスムーズに切り替えたいのです。

 

2、レイヤーが重なった瞬間に重なった2つのレイヤーを消して(または透明にして)、新しいレイヤーを出現させ数値を引き継がせたいと考えています。レイヤーを新しく作成したり、複製がしたいです。

 

この2つが果たして可能なのか、またどうすればいいのか教えていただきたいです。

また、他にもっといい方法があればそれも教えてほしいです。

(AEを使って間もないので知識が足りないかもしれません、、、)

 

 

キーワード
エクスプレッション

表示

171

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 06, 2023 Jun 06, 2023

リンクをクリップボードにコピー

コピー完了

1 については、下記リンクのコードが参考になると思います。
 
添付の動画は、こちらを一部書き換えて使用しています。
他に、「sampleImage」メソッドをネット検索すると似たような効果になるものが見つかると思います。
 
添付動画で使用してるコードは、下記になります。
各レイヤーの不透明度に追加する。
out = [100]
for (i = 1; i <= thisComp.numLayers; i++){
  if (i == index) continue;
  L = thisComp.layer(i);
  if (! (L.active && L.hasVideo)) continue; 
  delta = ( thisLayer.width + L.width)/2;
  if (length(position, L.position) <= 100){  //  値は相互の距離(100px以下)
    out = [0];
    break;
  }
}
out
 
 
2 については、レイヤーを増やすことは、エクスプレッションでは出来ないため、スクリプトや他の方法になります。
 
エクスプレッションで行う場合は、レイヤーを作成しておいて、シェイプレイヤーの親子関係にしておきます。
シェイプレイヤーの不透明度が100%の時に長方形は0%になるようにエクスプレッションを書きます。
if (thisComp.layer("シェイプレイヤー 3").transform.opacity == 0){
100;
}else{
0;
}
 
但し、すべてのシェイプに長方形のレイヤーを追加すると、位置がズレた状態で長方形が2個表示されるため、条件を色々追加して1個だけ表示させるようにする方法ならできると思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 06, 2023 Jun 06, 2023

リンクをクリップボードにコピー

コピー完了

<追記>
コードを修正しました。
6行目を書き換えて、7行目を参照元のコードと合わせました。
数値は、微調整になります。
out = [100]
 for (i = 1; i <= thisComp.numLayers; i++){
  if (i == index) continue;
  L = thisComp.layer(i);
  if (! (L.active && L.hasVideo)) continue; 
  delta = ( thisLayer.sourceRectAtTime().width + L.sourceRectAtTime().width)/2;
  if (length(position, L.position) <= delta - 50){  //  値は相互の距離の微調整(基準値”0”)
    out = [0];
    break;
  }
}
out

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 06, 2023 Jun 06, 2023

リンクをクリップボードにコピー

コピー完了

<訂正>
(2)にいついての回答で、長方形を親子にする方法の場合、コンポジションに新たなレイヤーが追加された為、(1)のエクスプレッションでは誤動作が起きます。
長方形レイヤーの「位置」に近づくと反応してしまう為、(1)のエクスプレッションへさらに条件を追加する必要があるので、キーフレームやレイヤーのデュレーションなどで対応して下さい。

 

<12:30更新>

親子レイヤーの問題は、下記コードで改善します。

 

out = [100]
 for (i = 1; i <= thisComp.numLayers; i++){
  if (i == index) continue;
  L = thisComp.layer(i);
  if (! (L.active && L.hasVideo)) continue; 
  if (L.hasParent) continue;
  delta = ( thisLayer.sourceRectAtTime().width + L.sourceRectAtTime().width)/2;
  if (length(position, L.position) <= delta - 50){  //  値は相互の距離の微調整(基準値”0”)
    out = [0];
    break;
  }
}
out

 

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
New Here ,
Jun 07, 2023 Jun 07, 2023

リンクをクリップボードにコピー

コピー完了

 レイヤーが重なった時に不透明度を0にする処理はできましたが、その後もずっと0にし続けることがどう頑張ってもできません。どうすればいいと思いますか?

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jun 07, 2023 Jun 07, 2023

リンクをクリップボードにコピー

コピー完了

最新

レイヤーのバーの右端を左方向にドラッグして消えた時間までデュレーションを短くして下さい。


レイヤーが動いているため、見えていない状態でも他のレイヤーと接近すると誤動作で他のレイヤーが消えてしまいます。

 

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines