0

動的カメラを備えた 2D プラットフォーマーを作成しています。カメラは一度に 4 人のプレイヤーを追跡して、全員が画面に表示されるようにする必要があります。さらに、カメラは定義済みの長方形の境界を越えて移動してはなりません。私はそれを実装しようとしましたが、常に4つのオブジェクトにできるだけ近づくようにカメラをズームするプロセスを取得できないようです.

私がこれまでに持っている一般的なアルゴリズムは次のとおりです。追跡されている4つのオブジェクト位置を使用して2D軸に位置合わせされた境界ボックスを計算し、その中心をカメラ位置として使用する(または平均化する)ことにより、表示空間を定義します2.を使用して正投影サイズを計算しますカメラの位置から追跡されている各オブジェクトへのベクトルを使用した最大 x または y 値。

  1. カメラがカメラの境界を超えている場合は、超過量を計算し、反対方向に移動します。

これは紙の上では十分に単純に思えますが、正しく機能する実装が得られないようです。

4

1 に答える 1

0

4 人のプレイヤーの位置の平均を取り、それをカメラの位置として使用しないでください。また、プレイヤーが境界から外れていないかどうかを確認し、外れている場合はズームアウトします。

float x = 0;
float y = 0;

GameObject[] players = new GameObjects[5];
foreach(GameObject _ply in players)
{
  x += _ply.transform.position.x;
  y += _ply.transform.position.y;


}
x = x/players.Length;
y = y/players.Length;

foreach(GameObject _ply in players)
{
  if(_ply.transform.position.x > (x + (Screen.Width / 2)))
    //zoom out

  if(_ply.transform.position.y > (y + (Screen.Height / 2)))
    //zoom out


}

ただし、Zoomin を修正する必要があります。

于 2014-08-03T02:11:41.567 に答える