見出し画像

[Unity] カメラリセットの実装

 今回は、カメラリセット機能についてのメモです。

 TPSなどで、常にプレイヤーの向いている方向にカメラが向いてしまうと、相手を捉え続けられてないので、やっぱりカメラリセットは必須かなと。
 そこで、実装を考えてみました。

 考え方としては、プレイヤーの位置を基準(原点)に、相対的なカメラの位置を算出していきます。手書きでお見苦しいですが、以下の図1のように考えました。

図1 手書きのメモ

 簡単に言うと、

  • カメラの水平位置は、進行方向の真逆にある。どのくらい遠いかはお好みで

  • カメラの垂直位置はお好みで

って感じです。(カメラはプレイヤーを見下ろせるように回転済み)

 プレイヤーにアタッチするコードの一部を以下に記します。(コーディングのルールは、未学習のためスルーしてます。ゆるして)

public GameObject mainCamera;
 
public int H_Adjust = 15; // C_{pH}の部分
public int V_Adjust = 5; // C_{pV}の部分
private float c_x, c_y, c_z; // cameraの座標

void Start(){
  // 初期位置はプレイヤー基準で設定
  c_x = -H_Adjust * transform.forward.x;
 c_y = V_Adjust;
 c_z = -H_Adjust * transform.forward.z;
}

void FixedUpdate () {
  // 移動に合わせてカメラ移動できるように(Update()にすべきかは未検討)
 mainCamera.transform.position = new Vector3(
   c_x + transform.position.x,
    c_y + transform.position.y,
    c_z + transform.position.z
  );

 // 左ctrlでカメラリセット
 if (Input.GetKey(KeyCode.LeftControl)){
   
   // 位置リセット
   c_x = -H_Adjust * transform.forward.x;
   c_y = V_Adjust;
   c_z = -H_Adjust * transform.forward.z;
   
   // プレイヤーの向きとカメラの向きを同じに
   mainCamera.transform.forward = transform.forward;

 }

}

 これで、カメラのリセットはできてそうです。

 カメラの位置をc_x, c_y, c_zで表記しているのは、分かりやすいかなーと思っただけです。

 カメラリセットにより、プレイヤーの操作がしづらくなってしまったので、
 次は、カメラの向きと、それに対応したプレイヤーの移動について検討していきます!

(初心者向けの、コピペでコードが動くようになる!とかじゃなく、著者の理解をただまとめているだけなので注意してください。)




いいなと思ったら応援しよう!