こんにちは、くんちゃんです!
今回は、Unityでゲームを作るときによく使う「カメラがキャラクターを追いかける仕組み」を、自作スクリプトで実装してみましょう。
カメラの動きって意外と奥が深いのですが、まずはキャラクターの後ろから追いかけるTPS風カメラを作って、仕組みをしっかり理解していきます。
今回のチャレンジは、Cube(キューブ)オブジェクトを使って気軽に試せる内容になっています。
ぜひ一緒に手を動かしていきましょう!
はじめに

Unityでキャラクターを操作できるようになってくると、「カメラをどう動かすか?」という課題にぶつかる方も多いのではないでしょうか?
今回は、キャラクターを後ろから追いかけるTPS(三人称視点)風のカメラを、Cinemachineを使わずスクリプトで作る方法をご紹介します。
「なんとなくCinemachineを使っているけど、カメラの仕組みを自分で理解しておきたい…」
そんな方にもピッタリのミニチャレンジです!
これまでの内容を引き継いで、前回作ったCubeプロジェクトをそのまま使っていきますので、ぜひ手元のUnityを立ち上げて一緒に試してみてください。
前回のおさらい:プロジェクトとCubeの準備
今回は前回の記事「【Unity入門】Cubeで動きを確認するプロジェクトを作ろう」の続きになります。
すでに前回のプロジェクトがある方は、特別な準備は不要です。
ヒエラルキーには、次のようなオブジェクトがあることを確認しておきましょう。

- Player(Cube):動くキャラクター役として使用
- Main Camera:今回はこのカメラに追従処理を追加します
プロジェクトがない方は、前回の記事を参考に、Cubeを設置したシーンを準備しておいてください。

カメラ追従の仕組みを理解しよう

TPS視点とは?
今回のカメラは、いわゆる「TPS(Third Person Shooter)視点」です。
これはキャラクターの後ろから少し離れた位置にカメラを置き、キャラクターの動きを常に見ながら操作する視点のことです。
市販の3Dアクションゲームやアドベンチャーゲームでよく使われているので、馴染みがある方も多いかもしれませんね。
なぜカメラを追従させるの?
プレイヤーがキャラクターを操作する際に、カメラがキャラクターを見失ってしまうと操作しづらくなってしまいます。
そのため、キャラクターの移動にあわせてカメラも位置を更新し、常にキャラクターが画面の中心近くにいるようにしておくのがポイントです。
特にUnityでは、スクリプトでカメラの Transform
を操作することで、こうした追従カメラを簡単に作ることができます。
LateUpdate()
と LookAt()
の意味
今回のカメラ処理では、LateUpdate()
と LookAt()
という2つの命令が重要な役割を果たします。
🔁 LateUpdate()
カメラ処理は Update()
でも動かせますが、キャラクターの動きが終わった後に処理することで、カメラの追従がよりスムーズになります。
そのため、毎フレームの最後に呼ばれる LateUpdate()
を使います。
👀 LookAt()
transform.LookAt(target)
を使うことで、カメラが常に対象(プレイヤー)を向くようになります。
斜め上の視点からでも、キャラクターを見失うことなく視界に入れ続けることができます。
イメージで確認しよう
以下の画像は、カメラがプレイヤーの少し後方かつ上方に位置し、常にキャラクターを見ている状態のイメージです。

次のセクションでは、実際にこの仕組みをスクリプトで作ってみましょう!Main Camera
にカメラ制御用のスクリプトを追加していきます。
カメラ用のスクリプトを作ろう

Main Camera にスクリプトを追加する
それではいよいよ、カメラがプレイヤー(Cube)を追いかけるようにするためのスクリプトを作っていきます。
このスクリプトは Main Camera にアタッチすることで動作します。
まずは Main Camera
を選択し、以下の手順でスクリプトを作成します。
スクリプトファイルの作成手順

- Hierarchyビューで「Main Camera」を選択
- Inspectorの「Add Component」ボタンをクリック
- 「New Script」を選び、スクリプト名に
CameraFollow
と入力して作成
スクリプトの中身を書き換えます
生成された CameraFollow.cs
をダブルクリックして開き、以下のように書き換えてください。
using UnityEngine;
public class CameraFollow : MonoBehaviour
{
// 対象となるプレイヤー(Cube)
public Transform target;
// カメラの相対位置(Yが高さ、Zが後ろ)
public Vector3 offset = new Vector3(0f, 3f, -5f);
void LateUpdate()
{
if (target == null) return;
// プレイヤーの位置にオフセットを加えてカメラ位置を決定
transform.position = target.position + offset;
// 常にプレイヤーの方向を向く
transform.LookAt(target);
}
}
target
にプレイヤーを指定しよう
スクリプトを保存してUnityに戻ると、Main Camera のインスペクターに Target
と Offset
の項目が表示されているはずです。
Target
の欄に、ヒエラルキー内のPlayer(Cube)
をドラッグ&ドロップOffset
はデフォルト(0, 3, -5)のままでOKです

これで準備は完了です!
次のセクションでは、実行してカメラがプレイヤーを追いかける様子を確認してみましょう。
ゲームを再生して動きを確認しよう

ここまでの設定ができたら、Unityエディターの上部にある「▶︎ 再生ボタン」をクリックしてゲームを実行してみましょう。
すると、カメラがプレイヤー(Cube)を少し斜め後ろ上から見下ろすような視点で追いかけるようになっているはずです。
視点が自然になっているかチェック!
確認しておきたいポイントは以下の通りです
- プレイヤーを移動させても、常に画面内に表示されている
- 視点がプレイヤーの少し後方+上方向にある
- カメラがプレイヤーの方向を常に向いている(LookAt動作)
この視点になっていれば、TPS(三人称視点)カメラの基本動作は完成です!
トラブルシューティング(もしうまくいかない場合)
target
にプレイヤー(Cube)が設定されていないと、カメラは動きません- プレイヤーのTransformが動いていないと、カメラの追従も見た目には変わりません
- Main Cameraにスクリプトを付け忘れていないか確認しましょう
おまけ:カメラの視点位置を変更してみよう

カメラがキャラクターを追いかけるようになったら、次はカメラの位置(offset)を変えて、いろいろな視点を試してみましょう!
offset
はスクリプト内で指定されていますが、Unityのインスペクター上でも簡単に数値を編集できます。
offsetを変えるとどうなるの?
以下の表のように offset
の値を変えることで、カメラの見え方がガラッと変わります!
視点の種類 | offset の値(X, Y, Z) | 特徴・用途 |
---|---|---|
標準TPS視点(本記事の初期値) | (0, 3, -5) | 斜め後ろ上からキャラを見下ろす |
真後ろ視点 | (0, 1, -3) | キャラのすぐ後ろから。迫力あり |
見下ろし視点(トップビュー) | (0, 10, 0) | 真上から。2D風や戦略系に向いている |
横からの視点(サイドビュー) | (5, 1.5, 0) | 横スクロール風ゲームでよく使われる |
💡 インスペクターでの編集方法:
Main Camera を選択 → CameraFollow コンポーネント内の「Offset」の数値を自由に変更!
いろいろ試してみよう!
たったこれだけで視点の印象が大きく変わるのは面白いですよね!
ゲームに合ったカメラの視点を、数値をいじってプレビューしながら探すのもUnityの楽しみ方のひとつです。
まとめ

今回のミニチャレンジでは、UnityでTPS風の追従カメラをスクリプトで実装する方法を学びました。
Transform.position
とoffset
を使って、カメラをキャラクターの後ろに配置LateUpdate()
を使って、キャラクターの動きに合わせてカメラが滑らかに追従LookAt()
で常にプレイヤーを注視offset
の値を変更することで、いろんな視点を試せる
Cinemachineを使わず、自分の手でカメラを動かすロジックを体験することで、カメラの仕組みがよく理解できたのではないでしょうか?
この体験は、今後Cinemachineを使うときにも「中で何が起こっているか」がイメージできるようになる土台になります。
次回予告とおわりに

次回は、マウスでカメラの向きを操作したり、ホイールでズームしたりといった、より自由なカメラ操作にチャレンジしていきます!
Unityでのカメラ制御は、慣れてくると本当に面白いです。
今回のようなミニチャレンジを通じて、一歩ずつカメラマスターへの道を進んでいきましょう!
お疲れさまでした✨