回答:
これは、パーティクルシステムとシェーダーを使用して簡単に実行できます。Xミリ秒ごとに1つの粒子を放出し、最大3つの粒子を放出するように粒子システムをセットアップします。(トレーリングスプライトの距離に基づいてXを選択します。)パーティクルには、キャラクターの現在のスプライトと同じイメージを使用しますが、マテリアルは異なります。マテリアルでアルファブレンドシェーダーをいくつか試して、後続のパーティクルに必要な効果を取得します。
もっとおしゃれにしたい場合は、キャラクターの現在の速度に基づいてパーティクルの最大数やその他の設定を調整できます。
これは、クワッドが1つ、スプライトが1つ、マテリアルが2つ、パーティクルシステムだけで実行できる例です。
パーティクルシステムをQuadに接続し、Sonicスプライトを使用するようにQuadを設定しました。パーティクルシステムのエミッション、寿命にわたる色、およびレンダラー設定のみを使用しています。
最大粒子:5
シミュレーションスペース:ワールド
ライフタイムの開始:1
開始速度:0
寿命にわたる色:白(Alpha 255)から黒(Alpha 0)へのフェード
レンダラーマテリアル:オリジナルと同じイメージを使用しますが、「Particles / Alpha Blended」シェーダーを使用します。
パーティクルシステムソリューションと同様に、2dtoolkitを使用して同じ効果を作成できます。スプライトのみがアタッチされている3つの子供用ゲームオブジェクトをキャラクターに追加します。必要に応じてアルファと色を変更します。次に、キャラクターの速度に応じてスプライトのローカル位置を変更できます。
myTransform.localPosition = characterSpeed * distanceFactor;
描画コールを(パーティクルと比較して)保存し、スムーズまたはスタガードにしたい場合は、エフェクトの広がりを完全に制御できます。
LVBenが提供するパーティクルシステムソリューションは機能しますが、スプライトに2D Toolkitを使用する場合には最適なソリューションではありません。主な理由は、パーティクルシステム内のゴーストトレイルマテリアルをメインプレハブの現在のスプライトアニメーションに同期できないことです。
これが、私が最終的に使用した2D Toolkitフレンドリーなソリューションです。
ゴーストトレイルを作成するプレハブの場合は、空のゲームオブジェクトをそこにアタッチして、ルートとして機能させます。このルートの下に、任意の数のtk2dSpriteまたはtk2dSpriteAnimator(アニメーションスプライトが必要かどうかに応じて)ゲームオブジェクトをアタッチし(4を追加)、ゴースト/フェードアウェイ効果を達成するために必要に応じてカラーアルファ値を調整します。
最上位の親の更新
// AmountToMove is a Vector3 of the amount we will translate this gameobject.
float y = (int)AmountToMove.y == 0 ? 0 : -AmountToMove.y;
float distanceFactor = 0.05f;
for (int i = 0; i < GhostingRoot.childCount; ++i) {
// Based on the player's current speed and movement along the x and y axes,
// position the ghost sprites to trail behind.
Vector3 ghostSpriteLocalPos = Vector3.Lerp(
GhostingRoot.GetChild(i).localPosition,
new Vector3((-CurrentSpeed * distanceFactor * i),
(y * distanceFactor * i), 0),
10f * Time.deltaTime);
// GhostingRoot is the root gameobject that's parent to the ghost sprites.
GhostingRoot.GetChild(i).localPosition = ghostSpriteLocalPos;
// Sync the animations.
// _ghostSprites is a List of the tk2dSpriteAnimator ghost sprites.
_ghostSprites[i].Play(SpriteAnimator.CurrentClip.name);
_ghostSprites[i].Sprite.FlipX = Sprite.FlipX;
}
このソリューションは、ゴーストスプライトのアニメーションをメインスプライトと同期させながら、後続のゴースト効果を作成します。