今回のとても短い Unity 2D プログラミングチュートリアルでは、カメラがメインキャラクターを即座に追従するのではなく、わずかな遅延を伴って追従するようにして、より滑らかなトランジションを作成する方法を紹介します。
動画の書き起こし
みなさん、こんにちは。今回のとても短い Unity 2D プログラミングチュートリアルでは、カメラがメインキャラクターを即座に追従するのではなく、わずかな遅延を伴って追従するようにして、より滑らかなトランジションを作成する方法を紹介します。
このチュートリアルは、Unity における Delta Time の概念や、Slerp などの補間についてすでに理解している方を対象としています。これらの概念については、すでに他の基礎チュートリアルで解説しており、英語版はチャンネルの動画として、また複数の言語による文章版は私のウェブサイトで公開しています。
これから示す例では簡単のために X 軸方向の移動に関するコードのみを記述しますが、同様の方法で Y 軸方向の垂直移動にも容易に拡張できます。

まずは、カメラの位置を追従対象キャラクターの位置に拘束する基本スクリプトから始めます。このスクリプトはここでは Camera Controller と呼ばれており、追従対象オブジェクトをエディターで割り当てる必要のある private な Transform 型の変数を最初に含んでいます。これにより、その位置を取得できるようになります。
Update 関数では、player の位置の X 座標を取得する float 型の変数を使用し、その値を Camera X という値としてカメラ自身の X 座標の代わりにカメラの位置に適用することで、カメラがキャラクターに即座に追従するようになります。
最初の変更として Lerp を使用します。そのため、Follow Time という名前の private な float 型変数を追加し、エディターで調整できるようにします。Update 関数では option number 2 を使用してカメラの X 座標を定義しますが、この値は теперь Lerp 関数の結果によって決まります。
Lerp は Unity に標準で用意されている関数で、Transform Position によって与えられるオブジェクトの現在位置と、Player Position によって与えられる目標位置との間で線形補間を行います。補間パラメータは Delta Time と Follow Time 変数の比率で表され、この値によってカメラが目標位置に徐々に近づく速度を制御できます。また、この挙動は実行中でもエディター上で簡単に調整できます。
Lerp 関数では、各フレームごとにカメラの位置が更新され、目標位置へ徐々に近づいていきます。このようにして、カメラの移動は瞬間的な移動と比べて急激さが抑えられます。ただし Lerp は到達直前の速度を減衰させない線形補間を行うため、接近の最終段階ではやや不自然に見える場合があります。より滑らかなトランジションを得るために Smooth Damp メソッドを使用します。
次に Smooth Time と Velocity という 2 つの新しい変数を用意します。Smooth Time は private な float 変数で、Lerp の場合の Follow Time と同様に補間の調整に使用します。一方 Velocity 変数は float 型で、Smooth Damp メソッドに渡され、実行中の現在の速度を保持するために使用されます。
標準の Smooth Damp メソッドを使用すると、カメラが目的位置に近づくにつれて速度が徐々に減少する、より緩やかで減衰のある移動を実装できます。Velocity 変数は対象となる軸方向におけるカメラの現在速度を表します。Velocity は参照渡しでメソッドに渡され、補間の実行中に各フレームごとに自動的に更新されます。
コードでは、カメラの X 座標は Smooth Damp によって行われる補間の結果になります。これは 2 つの値の間を補間するという点で概念的には Lerp と似ていますが、より滑らかなトランジションを生成し、さらにメソッドのシグネチャでは float 型の Velocity 変数も使用します。
Smooth Damp は、速度の段階的な減衰を導入することで移動をより自然にする、Lerp の発展形として考えることができます。
以上でこの動画は終わりです。この内容が役に立った場合は、Like とチャンネル登録で応援してください。それではまた次回お会いしましょう。