UnityUnityメモ

Unityでカメラを操作!外部スクリプトからMainCameraを回転させる方法

Unity

1. はじめに

Unityでゲームを開発する際、カメラの動きはプレイヤーの体験に大きな影響を与えます。たとえば、キャラクターの視点を追従させたり、特定のイベントでカメラアングルを変えたりすることで、より臨場感のあるゲームを作ることができます。


特に、外部のスクリプトからカメラを操作する方法を学ぶことは、カメラに柔軟な動きを追加するための第一歩です。この方法をマスターすれば、以下のような効果を簡単に実現できます:

  • プレイヤーの操作に合わせてカメラを動かす
  • イベント時にカメラを特定のアングルに固定する
  • ダイナミックな演出でゲームの没入感を向上させる

この記事では、MainCameraにアクセスし、左右に回転させる基本的な仕組みを実装する方法を解説します。シンプルなコードとわかりやすい手順で進めますので、Unity初心者の方でも安心して学べますよ!

一緒にカメラを自在に操作できるスクリプトを作ってみましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!




2. 空のオブジェクトを作成しよう

Unityで外部スクリプトを使ってMainCameraを操作するためには、まず「空のオブジェクト」を作成する必要があります。この空のオブジェクトは、スクリプトを保持し、カメラを操作する役割を果たします。以下の手順で簡単に作成できます。

空のオブジェクトの作成手順

  1. Hierarchyウィンドウを開く
    Unityエディタの左側にある「Hierarchy」ウィンドウを確認してください。ここには、現在のシーンに存在するすべてのオブジェクトが表示されています。
  2. 右クリックして空のオブジェクトを作成
    • 「Hierarchy」ウィンドウ内で右クリックします。
    • 表示されるメニューの中から「Create Empty(空のオブジェクト作成)」を選びます。
    • これで新しい空のオブジェクトが作成されます。
  3. オブジェクト名を変更
    デフォルトでは「GameObject」という名前で作成されますが、用途に合わせてわかりやすい名前に変更しましょう。
    • 新しく作成したオブジェクトを選択します。
    • 「Inspector」ウィンドウの上部に表示される名前の部分をクリックし、「CameraController」と入力します。

確認ポイント

  • 空のオブジェクトが作成できたか
    「Hierarchy」ウィンドウで「CameraController」という名前のオブジェクトが表示されていれば成功です。
  • Transformの位置確認
    作成したオブジェクトの位置が気になる場合は、「Inspector」ウィンドウの「Transform」コンポーネントで位置を調整できます。特に問題がなければ、デフォルトの位置(0,0,0)のままで構いません。

なぜ空のオブジェクトが必要なのか?

空のオブジェクトは、シーン内の実体を持たない「コントローラー」として機能します。スクリプトをアタッチすることで、カメラなど他のオブジェクトを操作する「指揮役」として活躍します。この分離によって、コードの管理がしやすくなり、プロジェクトが整理されます。

これで準備は完了です!次は、この空のオブジェクトにスクリプトを追加していきます。



3. スクリプトを作成してアタッチ

カメラを操作するスクリプトを作成して、空のオブジェクト「CameraController」にアタッチしていきましょう。以下の手順で進めてください。

1. スクリプトを作成する

  1. Project(プロジェクト)ウィンドウを開きます。
  2. プロジェクトウィンドウ内で右クリックし、Create(作成) → C# Scriptを選びます。
  3. 新しく作成されたスクリプトの名前を「CameraController」に変更します。
    ※ 名前は正確に入力してください。コード内でこの名前が使われるため、誤字があるとエラーになります。

2. スクリプトをアタッチする

  1. Hierarchy(ヒエラルキー)ウィンドウで、先ほど作成した「CameraController」という名前の空のオブジェクトを選択します。
  2. スクリプトをProjectウィンドウから「CameraController」オブジェクトにドラッグ&ドロップします。
  3. Inspector(インスペクター)ウィンドウに「CameraController」というスクリプトが追加されていることを確認してください。

3. スクリプトを編集する

作成したスクリプトをダブルクリックして開き、以下のコードを入力します。

using UnityEngine;

public class CameraController : MonoBehaviour
{
    public float rotationSpeed = 100f; // 回転速度を設定
    private Transform cameraTransform; // カメラのTransformを取得するための変数

    void Start()
    {
        // MainCameraのTransformを取得
        cameraTransform = Camera.main.transform;
    }

    void Update()
    {
        // 左右の入力に応じてカメラを回転させる
        float horizontalInput = Input.GetAxis("Horizontal"); // 左右のキー(A,Dや矢印キー)を取得
        cameraTransform.Rotate(Vector3.up, horizontalInput * rotationSpeed * Time.deltaTime); // カメラを回転
    }
}

コードのポイント

  • Camera.main.transform
    MainCameraのTransform(位置や回転などを管理するコンポーネント)を取得します。これにより、カメラの回転を操作できます。
  • Input.GetAxis("Horizontal")
    Aキー・Dキーや矢印キーの左右入力を検出します。入力値は-1(左)から1(右)の範囲で変化します。
  • Rotate(Vector3.up, ...)
    カメラをY軸(垂直軸)周りに回転させます。rotationSpeedで回転速度を調整できます。

4. 保存してUnityに戻る

スクリプトの編集が完了したら保存(Ctrl+S / Command+S)し、Unityエディタに戻ります。Unityがスクリプトを自動的にコンパイルし、エラーがないことを確認してください。

次はテストプレイで動作を確認してみましょう!



4. テストプレイ

いよいよ、スクリプトが正しく動作するかを確認する時間です!以下の手順に従って、Unityエディター上でテストプレイをしてみましょう。


1. シーンを保存する

まず、現在のシーンを保存しておきましょう。これは、不測の事態で作業内容が失われないようにするためです。

  • メニューから「File」→「Save As」を選択します。
  • シーン名を「CameraRotationTest」などわかりやすい名前にして保存します。

2. 再生ボタンをクリック

Unityエディターの上部にある「▶」(再生)ボタンをクリックして、ゲームを再生します。


3. 入力を試す

ゲームが再生されたら、以下の操作を試してみましょう。

  • キーボードの「A」キー または 左矢印キー を押す → カメラが左に回転します。
  • キーボードの「D」キー または 右矢印キー を押す → カメラが右に回転します。

カメラがスムーズに回転することを確認してください。


4. 問題が発生した場合

もし、以下のような問題が起きた場合は、解決策を試してみてください。

  • カメラが動かない
    • スクリプト内の cameraTransform = Camera.main.transform; の行を確認してください。MainCameraタグが外れている場合、カメラが見つからないことがあります。
    • シーン内のカメラオブジェクトを選択し、Inspectorウィンドウで「Tag」を「MainCamera」に設定してください。
  • 回転が速すぎる/遅すぎる
    • スクリプト内の rotationSpeed の値を調整してください。例えば、50f にすると回転が遅くなり、200f にすると速くなります。

5. 動作が確認できたら

テストが正常に動作したら、再生を停止(「■」ボタンをクリック)して編集モードに戻りましょう。

これでテストプレイは完了です!お疲れさまでした。次は、このカメラ操作を使った応用例を試してみてもいいかもしれませんね。カメラの視点を動かす方法などを組み合わせれば、より自由度の高い操作が実現できますよ!



よくある質問(FAQ)

Q
MainCameraが見つからないエラーが出ます。どうすれば解決できますか?
A

このエラーは、シーン内にMainCameraタグが付いたカメラが存在しない場合に発生します。以下の手順で確認・修正してください:

  1. Hierarchyウィンドウでカメラオブジェクトを選択します。
  2. Inspectorウィンドウで「Tag」を確認します。
  3. 「Tag」を「MainCamera」に設定してください。 これでスクリプトが正しくカメラを認識できるはずです。
Q
カメラの回転速度を調整したいです。どこを変更すればいいですか?
A

スクリプト内の rotationSpeed 変数を調整することで、カメラの回転速度を変更できます。たとえば、以下のように値を変更してください:

public float rotationSpeed = 200f; // 回転速度を上げる

値を大きくすると速く回転し、小さくするとゆっくり回転します。Inspectorウィンドウで直接値を変更することも可能です。

Q
他のカメラにも同じ回転処理を適用したい場合はどうすればいいですか?
A

Camera.main はシーン内のMainCameraタグが付いたカメラ1つだけに対応します。複数のカメラを操作したい場合、以下のように変更してください:

  1. スクリプト内で cameraTransform を配列やリストに変更します。
  2. 必要なカメラオブジェクトを直接指定またはタグや名前で取得します。

例:

public Transform[] cameras; // 操作対象のカメラを格納する配列

void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
foreach (Transform cam in cameras)
{
cam.Rotate(Vector3.up, horizontalInput * rotationSpeed * Time.deltaTime);
}
}

Inspectorでカメラの参照を追加すれば、複数のカメラを同時に操作できます。

おすすめのアセット

「60 Games Bundle」は、パズル、カジュアル、レトロ、サバイバル、プラットフォーマー、アドベンチャーなど多様なジャンルの60種類のゲームテンプレートを含むパックです。個別のジャンルごとに用意されたテンプレートを使用して、迅速にゲームを構築でき、Unityプロジェクトに応じた柔軟なカスタマイズも可能です。小規模から大規模なゲーム開発まで幅広く活用できます。