Skip to main content

主人公を追いかけるカメラ

Timmyの移動できたとしても、操作が確認しにくいので、プレーヤーを追いかけるカメラ(三人称視点)を作りましょう

単純なアプローチ

一番簡単なのは「カメラの位置を主人公の位置にしろ!」の仕組みである。これがすぐ試せるので、「CameraController」スクリプトを作成してみましょう:

スクリプト

// 主人公を追いかけるカメラ
public class CameraController : MonoBehaviour
{
    // 追いかけるオブジェクトのTransform
    [SerializeField] 
    private Transform target;

    private void Update()
    {
        // 自分の位置をターゲットの位置にするだけ
        transform.position = target.position;
    }
}

このスクリプトをカメラにアタッチし、確認しましょう。なお、Unity でカメラの「target」を「Player」にしてください。

image.png

改善:セルフィスティック

今の処理はとても単純で、カメラはプレーヤーの足元に行ってしまいました。もう少し賢い作戦を考えてみましょう。「三人称」といえば:

image.png

セルフィスティックは良いでしょう!シーンにあるカメラの親子関係を変えて、同じ仕組みになるようにしましょう。具体的に:

INSERT ILLUSTRATION OF Base->Height->Stick->Camera

  • Base(基礎)  :主人公を追いかける根。セルフィスティックなら、「人間が立っている場所」
  • Height(高さ) :地面からの高さ。だいたいTimmyの頭までにすれば良いでしょう。
  • Pole(ポール) :スティックのそのもの。上がるか下がることにより、撮影角度を変えられる
  • Camera(カメラ):スティックの端にあるカメラ。適切な距離にし、Timmyが全身が見えるようにしましょう。

これはヒエラルキー(とその位置)はこうなる:

image.png


image.png

image.png

image.png

image.png

なお、「CameraController」のスクリプトは、カメラではなく、実際に動く基礎(Base)アタッチすべき。Main Camera からスクリプトを削除するのは、右側にある「」を押し、「Remove Component」(コンポーネントを削除)でできる。

image.png

では、「CameraController」をBaseにアタッチし、もう一度確認しましょう。

カメラをマウスで回転

カメラは主人公に追いかけても、周りを自由に見たいので、マウスでカメラを回転させたい。今のカメラの作りだと簡単に責任を分けることができる!

  • Height オブジェクトをY軸まわりに回転させると、360度の回転ができる。
  • Pole オブジェクトをX軸まわりに回転させると、上下の角度を変えることができる。

IMAGE: Height rotating and Pole pivoting

そして、WASDの入力は Input.GetAxis("Horizontal");Input.GetAxis("Vertical"); で取得できたが、同じようにカメラの回転 Input.GetAxis("CamRotY"); とカメラの上下角度 Input.GetAxis("CamRotX"); を取れれば良いけど、この入力軸が定義されていない。

新しい入力を定義する

"Horizontal" (水平入力)と "Vertical" (垂直入力)が魔法の言葉ではなく、プロジェクト設定として定義されている入力である、