ここまでで、エクスプレッションの背景となる概念を理解したので、今度はコミュニティにアクセスして実例を参考にしたり、自分の作品を共有したりしてください。
AE Enhancers フォーラムには、エクスプレッションとスクリプトやアニメーションプリセットの例や情報も多数公開されています。
エクスプレッション制御を使用したテキストスタイルおよびテキストプロパティの編集。
エクスプレッションを使用して、任意のテキストエクスプレッションまたはモーショングラフィックステンプレートのテキストスタイル設定を制御します。 エクスプレッションを使用して、次の操作を行うことができます。
スタイルオブジェクトを使用して、次のテキストスタイル属性を読み取りおよび設定できます。
テキストレイヤーのソーステキストプロパティは、エクスプレッションで JavaScript 文字列として解釈されます。 テキスト自体は sourceText で読み取ることができますが、スタイル属性を変更する場合は setText メソッドを使用してスタイルオブジェクトに設定する必要があります。 一部の例については、こちらを参照してください。
文字列エクスプレッションで新しい行を開始するには \r を使用します。 例えば、レイヤー上のテキストをコピーし、すべて大文字に変換してから同じレイヤー上の次の行に追加するには、次のようにエクスプレッションを記述します。
textourceText + “\r” + textourceTextoUpperCase()
テキストスタイル属性に加えて、段落属性もあります。 これらは、テキストレイヤー全体にのみ適用できます。 段落属性は、After Effects でのみ使用できます。
エクスプレッションでフォントを参照する場合は、特殊な「システム名」(または同様のもの)を使用する必要があります。 エクスプレッションエラーを防ぐには、テキスト/フォント/フォントを選択ダイアログからこの特殊な名前を挿入することをお勧めします。
エクスプレッションエディターで参照されているだけのフォントは、プロジェクトで使用されているフォントとして記録されません。 エクスプレッションエディターで参照されるすべてのフォントが自動的に同期される、またはフォントを解決ダイアログに表示されるようにするには、レイヤーのソースが非表示の場合でも、そのレイヤー上でこのフォントをすべて使用します。
テキストレイヤーのスタイルプロパティはすべて style オブジェクトに存在します。このオブジェクトには、ソーステキストプロパティで次のようにしてアクセスします。
// Source Textプロパティへの完全なパスを使用
text.sourceText.style
// 現在のプロパティの汎用名を使用
thisProperty.style
スタイルを単独で使用することは、上記の 2 つの例のいずれかを使用したのと同じですが、複数のテキストレイヤーのスタイル属性が組み合わされる場合は紛らわしくなる可能性があります。
他のテキストレイヤーのスタイル属性も読み取ることができます。 ピックウイップを使用して、上記の最初の例の先頭に、他のテキストレイヤーへのリンクを作成します。
// 特定のテキストレイヤーのスタイルオブジェクトにアクセス
thisComp.layer("Other Layer Name").text.sourceText.style;
テキストエクスプレッションを使用して、テキストレイヤー全体のスタイル属性を設定するだけでなく、レイヤー内の個々の文字のスタイル属性を設定することもできます。 この文字単位制御の利点は、文字の拡大・縮小、上付き文字の使用、別のフォントの使用などを行う際に、テキストが自動的にリフローされることです。文字パネルの部分文字列スタイルを使用する場合と同じです。
text.sourceText.style
.setFont("Montserrat-Light")
.setFont("Gigantic", 0, 6).setFont("Gigantic", 10, 6).setFont("Gigantic", 20)
text.sourceText.style.setFontSize(100, 0, 30).setFauxBold(true, 0, 30)
この文字列を使用するには、テキスト「1st and 2nd Place」を含むテキストレイヤーを追加し、ソーステキストに次を適用します。
textourceTexttyleetBaselineOption(“superscript”,1,2)etBaselineOption(“superscript”, 9, 2)
スタイルと実際のソーステキストの両方の値を返すには、getStyleAt 関数と setText 関数を組み合わせる必要があります。 この式を記述する方法の例を 2 つ、次に示します。
// スタイルと実際のSource Textの両方の値を時間で返す(省略形)
var sourceTextProperty = thisComp.layer("MAIN TEXT").text.sourceText;
var newStyle = sourceTextProperty.getStyleAt(0,0);
newStyle.setText(sourceTextProperty);
// レイヤースタック順序の前のレイヤーのスタイルと実際のSource Textの両方の値を返す
var sourceTextProperty = thisComp.layer(index - 1).text.sourceText;
var newStyle = sourceTextProperty.getStyleAt(0,0);
newStyle.setText(sourceTextProperty);
ドロップダウンメニューを使用すると、テキストレイヤーを特定のフォントにロックするなど、テキストスタイルを制御できます。 これは、ブランドガイドライン、テンプレート、MoGRTS などに役立ちます。
// ドロップダウンメニューコントロールでテキストレイヤーを特定のフォントに固定
var dropDownMenu = thisComp.layer("LayerName").effect("Dropdown Menu Control")("Menu");
switch (dropDownMenu.value) {
case 1 :
text.sourceText.style.setFont("Georgia");
break;
case 2 :
text.sourceText.style.setFont("Impact");
break;
default :
text.sourceText.style.setFont("Tahoma");
}
複数のテキストレイヤーをメインのフォントコントローラーにリンクして、一度に複数のレイヤーのテキストスタイルを制御できます。 2 つのテキストレイヤーを作成し、その中の 1 つのソーステキストに次のエクスプレッションをペーストします。
// テキストレイヤーからすべてのテキストプロパティを取得
thisComp.layer("Text Layer 1").text.sourceText.style;
テキストレイヤーからスタイルを取得しつつも、set 関数で値を追加することで特定のテキストプロパティをオーバーライドできます。 塗りのカラーとフォントサイズを使った 2 つの例を次に示します。
// 「Text Layer 1」からすべてのテキストプロパティを取得し、塗りカラーとフォントサイズをハードコーディングされた値で上書き
var newStyle = thisComp.layer("Text Layer 1").text.sourceText.style;
newStyle.setFillColor(hexToRgb("FF0000")).setFontSize(100);
// 「Text Layer 1」からすべてのテキストプロパティを取得し、塗りカラーとフォントサイズをレイヤーの現在のテキストプロパティで上書き
var newStyle = thisComp.layer("Text Layer 1").text.sourceText.style;
var currentFillColor = thisProperty.style.fillColor;
var currentFontSize = thisProperty.style.fontSize;
newStyle.setFillColor(currentFillColor).setFontSize(currentFontSize);
以下に、エクスプレッションを含むテキストプロパティ値にアクセスして使用する方法の例を示します。
次の例は、テキストレイヤーのフォント、フォントサイズ、太字、斜体、字送り、行送りにアクセスする方法を示しています。
// テキストレイヤー自体のフォント名を返す
text.sourceText.style.font;
// 別のテキストレイヤーが使用しているフォント名を返す
var otherLayer = thisComp.layer("Other Layer Name");
otherLayer.text.sourceText.style.font;
// テキストレイヤー自体のフォントサイズの値を返す
text.sourceText.style.fontSize;
// 別のテキストレイヤーのフォントサイズの値を返す
var otherLayer = thisComp.layer("Other Layer Name");
otherLayer.text.sourceText.style.fontSize;
// レイヤーのテキストが疑似太字かどうかのブーリアン値を返す(trueまたはfalse)
text.sourceText.style.isFauxBold;
// レイヤーのテキストが疑似斜体かどうかのブーリアン値を返す(trueまたはfalse)
text.sourceText.style.isFauxItalic;
// テキストレイヤーのトラッキングの値を数値として返す
text.sourceText.style.tracking;
// テキストレイヤーの行送りの値を数値として返す
text.sourceText.style.leading;
次の例では、テキストレイヤーの塗りと塗りのカラーへのアクセス方法を示しています。
// レイヤーのテキストに塗りが適用されているかどうかのブーリアン値を返す(true または false)
text.sourceText.style.applyFill;
// テキストレイヤーの塗りカラーの値を返す
// デフォルトでは、0 ~ 1.0 スケールで RGB 値の配列を返します
text.sourceText.style.fillColor;
// setApplyFill と setFillColor でテキストレイヤーの塗りカラーを設定
// setFillColor の値は 0 ~ 1.0 スケールの RGB 配列として定義されます
var newStyle = style.setApplyFill(true);
newStyle.setFillColor([1.0, 1.0, 1.0]);
// 0 ~ 1.0 RGB 配列を hexToRGB に置き換えて、カラー値を Hex 値で定義してテキストレイヤーの塗りカラーを設定
var newStyle = style.setApplyFill(true);
newStyle.setFillColor(hexToRgb("FFFFFF"));
// 塗りカラーの赤(R)値を返す
text.sourceText.style.fillColor[0];
テキストレイヤーの塗りのカラーの R、G、B 値を返すには、それぞれ 0、1、または 2 を角括弧で囲んで追加します。
次の例は、テキストレイヤーの線、線のカラー、線幅にアクセスする方法を示しています。
// レイヤーのテキストにストロークが適用されているかどうかのブーリアン値を返す(TrueまたはFalse)
text.sourceText.style.applyStroke;
// テキストレイヤーの線カラーの値を返す
// デフォルトでは、0~1.0スケールでRGB値の配列を返します
text.sourceText.style.strokeColor;
// setApplyStrokeとsetStrokeColorでテキストレイヤーの線カラーを設定
// setStrokeColorの値は0~1.0スケールのRGB配列として定義されます
var newStyle = style.setApplyStroke(true);
newStyle.setStrokeColor([1.0, 0.0, 0.0]);
// 0~1.0RGB配列をhexToRGBに置き換えて、カラー値をHex値で定義してテキストレイヤーの線カラーを設定
var newStyle = style.setApplyStroke(true);
newStyle.setStrokeColor(hexToRgb("FF0000"));
// テキストレイヤーの線幅の値を数値として返す
text.sourceText.style.strokeWidth;
// 線カラーの緑(G)値を返す
text.sourceText.style.strokeColor[1];
テキストレイヤーの線のカラーの R、G、B 値を返すには、それぞれ 0、1、または 2 を角括弧で囲んで追加します。
特定の時間における特定の文字のスタイル値を返すには、この get 関数を使用します。 index には、スタイルが必要な文字のインデックスである数値を指定する必要があります。 atTime も数値を指定する必要があります。これは、スタイルがキーフレーム化され、時間的に変化する場合に、スタイルを取得するコンポジション内の時間を表します。
text.sourceText.getStyleAt(index, atTime);
text.sourceText.style を使用することは、text.sourceText.getStyleAt(0,0) を使用することと同じです。
// タイムラインの開始時の最初の文字のスタイルを取得
text.sourceText.getStyleAt(0,0);
個別に使用または互いに組み合わせて使用して、レイヤー全体にスタイルを適用できる追加の set 関数。 これらの関数は、それぞれソーステキストプロパティの style オブジェクトに対して呼び出されます。
// フォントをArialに設定
style.setFont("ArialMT")
// フォントサイズを80に設定
style.setFontSize(80);
// ブーリアンで疑似太字を有効にする
style.setFauxBold(true)
// ブーリアンで疑似斜体を有効にする
style.setFauxItalics(true)
// ブーリアンですべて大文字を有効にする
style.setAllCaps(true)
// ブーリアンでスモールキャップスを有効にする
style.setSmallCaps(true)
// トラッキングを数値として設定
style.setTracking(10);
// 行送りを数値として設定
style.setLeading(10);
// ブーリアンで自動行送りを有効にする
style.setAutoLeading(true);
// ベースラインシフトを数値として設定
style.setBaselineShift(10);
// ストロークの幅を数値として設定
style.setStrokeWidth(10);
// テキストレイヤーの最初の行を太字にして大きくする
text.sourceText.style.setFontSize(100, 0, 30).setFauxBold(true, 0, 30)
// 文字に上付き文字を設定する
text.sourceText.style.setBaselineOption("superscript",1,2).setBaselineOption("superscript", 9, 2)
次の例に示すように、テキストスタイルのすべての set 関数をつなげて使用すれば、毎回新しいスタイルを宣言しなくても、複数の属性を簡単に設定できます。
最後の属性が設定されるまで、セミコロンは使用されません。 属性ごとに別個の行に記述すると、チェーン全体が読みやすくなります。
// 塗りを有効にし、塗りカラーを設定、ベースラインを設定、トラッキングを設定、自動行送りを有効にする
text.sourceText.style
.setApplyFill(true)
.setFillColor(hexToRgb("FFFFFF"))
.setBaselineShift(10)
.setTracking(25)
.setAutoLeading(true);
コンポジションにテキストレイヤーを追加し、そのソーステキストプロパティにエクスプレッションを追加すると、他のレイヤーのプロパティ値が確認できて便利です。 例えば、ソーステキストプロパティに次のエクスプレッションを記述すると、すぐ次のレイヤーの不透明度プロパティの名前と値が表示されます。
var nextLayer = thisComp.layer(index + 1);
nextLayer.name + "
不透明度 = " + nextLayer.opacity.value;
以下の例では、ビデオスイッチが設定されている現時点で最上位の画像レイヤーのソースとして使用されているフッテージアイテムの名前が表示されます。
```json
{"translatedText": ["// sourceFootageName を空の文字列として作成
", " var sourceFootageName = \"\";
", "
", " // コンポジション内のすべてのレイヤーをループ
", " for (var i = 1; i <= thisComp.numLayers; i++) {
", "
", " // i がこのレイヤーのインデックスと一致する場合、次のループに続行
", " if (i == index) {
", " continue;
", " }
", "
", " // ループの現在の反復でmyLayerを設定
", " var myLayer = thisComp.layer(i);
", "
", " // myLayerにビデオがない、またはプライマリでない場合、次のループ/レイヤーに続行
", " if ( !myLayer.hasVideo || !myLayer.active ) {
", " continue;
", " }
", "
", " // myLayerが現在の時刻でプライマリの場合
", " if ( myLayer.active ) {
", " try {
", " // sourceFootageNameをmyLayerの引用元名に設定
", " sourceFootageName = myLayer.source.name;
", " } catch ( err ) {
", " // myLayerに引用元がない場合、
", " // sourceFootageNameをmyLayerの名前に設定
", " sourceFootageName = myLayer.name;
", " }
", "
", " // ループを停止
", " break;
", " }
", " }
", "
", " // sourceFootageNameを表示
", " sourceFootageName;"]}
```
エクスプレッションが追加されているソーステキストプロパティを選択します。 次に、アニメーション/アニメーションプリセットを保存を選択して、他のプロジェクトでエクスプレッションを再利用します。 アニメーションプリセットは、エフェクト&プリセットパネルに保存されます。
詳しくは、エフェクトおよびアニメーションプリセットの概要を参照してください。
ここまでで、エクスプレッションの背景となる概念を理解したので、今度はコミュニティにアクセスして実例を参考にしたり、自分の作品を共有したりしてください。
AE Enhancers フォーラムには、エクスプレッションとスクリプトやアニメーションプリセットの例や情報も多数公開されています。