序文
カメラ追従について、本記事では2つの実装方法を紹介します。
1 つは Unity の初期カメラをスクリプト用に制御する方法、もう 1 つは Unity でカメラ プラグインを呼び出す方法です。
1. 要件分析と目標実現
a. 2D パースペクティブでは、カメラは常にプレーヤーを表示画面内に保つ必要があります。
b. カメラはプレーヤーを画面の中央に厳密に配置することはできません。
c. 元々描いた地図の境界を越えた場合、カメラの可視範囲外に出てはならない. つまり、カメラの移動境界を設定する.
2.スクリプト制御を使用する
a.主に3つの機能を使用しています
(1) GameObject内のFindGameObjectWithTag を使用して、対応するオブジェクトを検索し、オブジェクトにタグを設定してから、この関数を使用してオブジェクトを決定します。これは、オブジェクトのパラメーターを呼び出して変更するのに便利です。
(2) Mathf.Clamp、特定の範囲内の値を制御するために使用されるクランプ関数、特定の使用法Mathf.Clampp(vlue,min.max)。
(3) Vector2.Lerp、次の 2 次元、特定の使用法Vector2.Lerp (始点、終点、移動速度)。
b. 基本ロジック
カメラの次の速度 (プレイヤーの移動速度よりも少し遅く設定することをお勧めします)、カメラが到達できる最大および最小の座標 (移動境界)、カメラのターゲット位置、プレイヤーの位置を取得する際に作成します。初期化、カメラの初期位置の設定、LateUpdateで( Updateの後に呼び出されます)、カメラの境界を制限し、同時にフォローを設定します。
c. コードの実装
public float followSpeed = 2.0f;
public float minX;
public float maxX;
public float minY;
public float maxY;
private Transform PlayerTransform;
prive Vector2 targetPosition;
void start
{
PlayerTransform = GameObject.FindGameObjectWithTag("Player").transform;//提前在外面把Player标签给对象挂上
transform.position = PlayerTransform.position;
}
private void LateUpdate
{
if(PlayerTransform != null)
{
targetPosition.x = Mathf.Clamp(PlayerTransform.position.x,minX,maxX);
targetPosition.y = Mathf.Clamp(PlayerTransform.position.y,mixY,maxY);
transform.position = Vector2.Lerp(transfrom.position,targetPosition,followSpeed*Time.deltaTime);
}
}
3. Cinemachine プラグインを使用してフォローする
- Windowsのパッケージ マネージャーから検索して、直接ダウンロードできます。
図 3.1
- ダウンロードした後、プロジェクト バーの基本的なインターフェイス (図 3.3)で新しいVirtualCameraを直接作成し、 Follow列にキャラクター オブジェクトを追加すると、自動的にフォローできます。
図 3.2
図 3.3
- 実際、このプラグインは、より多くの機能を実現することもできます. たとえば、プレーヤーが特定の範囲内を移動するときにカメラが追従することによって影響を受けないようにしたい場合があります. プレーヤーがこの範囲外に移動すると、カメラは再び追従します.また、次のパラメータを調整できます (図 3.2 )。
3.4
- 調整後 (図 3.3)、カメラはプレイヤー オブジェクトが中間範囲から移動した場合にのみ次のアクションを実行します。
3.5
4. まとめ
実際、私たちがゲームを作るときは、シネマシーンのプラグインを使用することがほとんどで、実装されている機能はより便利ですが、実際には、事前にパッケージ化されたプラグインまたは機能またはエンジンには限界があり、私たちの考えは無限です。,したがって、何を行うか、何を使用するかに関係なく、動作原理とその背後にあるプロセスを理解することが最も重要であり、多くの場合、自分で実装する必要があります。自分を信じることも最も重要なことです。