UnityUnityメモ

Unityで簡単!キー入力でカメラのアングルを切り替える方法

Unity

1. はじめに

Unityでゲームを開発していると、カメラのアングルを変更したいシーンが出てくることがありますよね。例えば、プレイヤーの動きを背後から追う視点と、全体を俯瞰する視点を切り替えたい場合などです。この記事では、キー入力を使ってカメラのアングルを簡単に切り替える方法を解説します。

この記事では、Unity初心者にも分かりやすいように、基本的な手順をステップごとに説明します。必要なスクリプトはすべて提供しますので、コピペしながら進めていくだけでOK!完成後には、F5キーを押すたびにカメラのアングルが切り替わるシンプルな仕組みを作成できます。

Unity初心者でも安心して取り組める内容になっていますので、ぜひ最後まで読んで実際に試してみてください!

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



2. 環境準備

この記事では、キー入力を使用してカメラのアングルを切り替える方法を実装するために、Unityシーンを準備します。この手順では、床やプレイヤーオブジェクトを配置し、カメラが切り替わる動作をわかりやすくする環境を作成します。


1. Unityプロジェクトを作成

まずはUnityで新しいプロジェクトを作成しましょう。

  1. Unity Hubを開きます。
  2. 「新しいプロジェクト」をクリックします。
  3. テンプレートは「3D」を選択し、プロジェクト名を入力します(例: CameraSwitchProject)。
  4. 作成をクリックして、プロジェクトを開始します。

2. シーンのセットアップ

Unityのシーン内に、カメラ切り替えがわかりやすくなるオブジェクトを配置します。

(1) 床オブジェクトを配置
  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックし、「3D ObjectPlane」を選択します。
  2. 作成されたPlaneを床として配置します。
    • 床の大きさを調整する場合は、インスペクター(Inspector)ウィンドウScaleを変更します(例: X:10, Y:1, Z:10)。
  3. 名前を「Floor」に変更しておくと管理しやすくなります。
(2) プレイヤーオブジェクトを配置
  1. 再びヒエラルキーウィンドウを右クリックし、「3D ObjectSphere」を選択します。
  2. 作成されたSphereをプレイヤーとして配置します。
    • インスペクターウィンドウで、TransformのPositionを「X:0, Y:0.5, Z:0」に設定します。
    • 名前を「Player」に変更します。

3. カメラの位置を調整

  1. Main Cameraを選択します。
  2. インスペクターウィンドウでTransformを以下のように設定します。
    • Position: X:0, Y:5, Z:-10
    • Rotation: X:10, Y:0, Z:0
  3. カメラが床とプレイヤーをしっかりと捉えられる位置に調整してください。

4. 必要な素材の確認

準備ができたら、シーンには以下のオブジェクトが揃っているはずです。

  • Floor(床オブジェクト)
  • Player(プレイヤーオブジェクト)
  • Main Camera(カメラ)

これで環境の準備は完了です!次のステップでは、プレイヤーを動かすスクリプトを作成していきます。



3.プレイヤーを動かすスクリプトの作成

Unityでゲーム開発を始めるとき、まずプレイヤーを動かす方法を知るのはとても重要です。このステップでは、キー入力に応じてプレイヤー(ここではSphereオブジェクト)が前後左右に動く簡単なスクリプトを作成します。

1. スクリプトの作成

  1. プロジェクトウィンドウを開きます。
  2. ウィンドウ内で右クリックし、「Create」→「C# Script」を選択します。
  3. スクリプトに「PlayerMove」と名前を付けます。

2. スクリプトの編集

  1. 作成した「PlayerMove」スクリプトをダブルクリックして開きます。
  2. 以下のコードを入力してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public float speed = 0.1f; // プレイヤーの移動速度

    void Update()
    {
        // 上矢印キーで前進
        if (Input.GetKey(KeyCode.UpArrow))
        {
            transform.Translate(0f, 0f, speed);
        }
        // 下矢印キーで後退
        if (Input.GetKey(KeyCode.DownArrow))
        {
            transform.Translate(0f, 0f, -speed);
        }
        // 左矢印キーで左移動
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.Translate(-speed, 0f, 0f);
        }
        // 右矢印キーで右移動
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.Translate(speed, 0f, 0f);
        }
    }
}

3. スクリプトのアタッチ

  1. ヒエラルキーウィンドウで、プレイヤーとして配置したSphereオブジェクトを選択します。
  2. インスペクターウィンドウに、「PlayerMove」スクリプトをドラッグ&ドロップします。

4. スクリプトの確認

  1. Unityエディター上で「再生ボタン」を押してシーンを再生します。
  2. キーボードの矢印キーを押して、プレイヤーが前後左右に移動するか確認してください。

これで、キー入力でプレイヤーを動かす準備は完了です!次のステップでは、カメラのアングルを切り替えるスクリプトを作成していきます。



4. カメラ切り替えスクリプトの作成

このステップでは、キー入力によってカメラのアングルを切り替えるためのスクリプトを作成します。今回は F5キー を押すことで、プレイヤーの背後からの視点と上からの視点を切り替えられる機能を実装します。


スクリプトの作成手順

  1. 新しいスクリプトを作成
    • プロジェクトウィンドウを右クリックして、「Create」→「C# Script」を選択します。
    • スクリプトの名前を CameraSwitch と入力してください。
  2. スクリプトの編集 作成したCameraSwitchスクリプトをダブルクリックして開き、以下のコードを入力してください。
using UnityEngine;

public class CameraSwitch : MonoBehaviour
{
    public Transform player;  // プレイヤーのTransform
    private bool isTopView = false;  // 現在のアングル(背後か上からか)

    // プレイヤーの背後からのアングル位置と上からのアングル位置
    private Vector3 behindOffset = new Vector3(0, 2, -5);
    private Vector3 topViewOffset = new Vector3(0, 10, 0);

    void LateUpdate()
    {
        // カメラの追尾位置を計算
        Vector3 targetPosition = player.position + (isTopView ? topViewOffset : behindOffset);

        // カメラをターゲット位置に設定
        transform.position = targetPosition;
        transform.LookAt(player);

        // F5キーでアングル切り替え
        if (Input.GetKeyDown(KeyCode.F5))
        {
            isTopView = !isTopView;  // アングル切り替え
        }
    }
}

コードのポイント解説

  • public Transform player; プレイヤーの位置を追尾するため、プレイヤーオブジェクトのTransformをInspectorで割り当てます。
  • Vector3 behindOffsetVector3 topViewOffset プレイヤーの背後からの視点と、上からの視点の相対位置を指定します。これらを切り替えることでカメラのアングルを変更します。
  • LateUpdate() カメラの追尾処理は通常のUpdateよりも後に行う必要があるため、このメソッドを使用します。
  • Input.GetKeyDown(KeyCode.F5) F5キーが押されたタイミングを検出し、isTopView の値を切り替えます。

スクリプトの適用

  1. ヒエラルキーウィンドウで Main Camera を選択します。
  2. CameraSwitch スクリプトをドラッグ&ドロップでMain Cameraにアタッチします。
  3. インスペクター内で、Playerフィールド にプレイヤーオブジェクト(Sphere)を割り当てます。

これでカメラの切り替え機能のスクリプトは完成です!次はスクリプトを適用した状態で動作確認を行いましょう。



5. 動作確認

ここでは、作成したスクリプトが正しく動作するかを確認する方法を説明します。


1. シーンを再生する

Unityエディター上部にある「▶(再生ボタン)」をクリックして、シーンを再生します。プレイヤーオブジェクト(Sphere)が画面に表示されていることを確認してください。


2. プレイヤーを移動させる

キーボードの矢印キー(↑, ↓, ←, →)を押して、Sphereが動くか確認します。スムーズに移動すれば「PlayerMove」スクリプトが正しく動作しています。

もし動かない場合

  • スクリプトがプレイヤーオブジェクトにアタッチされているか確認してください。
  • スクリプト内のエラーを確認してください(赤いエラーメッセージがコンソールに表示されている場合は修正が必要です)。

3. カメラの切り替えをテスト

F5キーを押して、カメラアングルが切り替わるか確認しましょう。

  • 最初はプレイヤーの背後のアングル(behindOffset)から始まり、F5キーを押すたびに上からのアングル(topViewOffset)と切り替わるはずです。
  • カメラがプレイヤーを追従していることも確認してください。

もし切り替わらない場合

  • 「CameraSwitch」スクリプトがMain Cameraにアタッチされているか確認してください。
  • 「Player」フィールドに正しくプレイヤーオブジェクトを割り当てているか確認してください。
  • スクリプト内で誤字や構文エラーがないか確認してください。

4. 動作の最終確認

  • プレイヤーが移動する際、カメラが追従しているか。
  • F5キーでカメラアングルがスムーズに切り替わるか。 これらの挙動が確認できれば、スクリプトは正常に動作しています!

ここまでで、プレイヤーの移動とカメラの切り替えが実現できました。これで、よりゲームらしい体験ができるようになりますね!次は、さらなる機能追加や演出に挑戦してみてください。



よくある質問(FAQ)

Q
F5キーを押してもカメラのアングルが切り替わらないのですが、どうすればいいですか?
A

以下の点を確認してください。

  • スクリプトが正しくアタッチされているか: CameraSwitchスクリプトがMain Cameraにアタッチされているか確認してください。
  • Playerフィールドが設定されているか: インスペクターでPlayerフィールドにプレイヤーオブジェクト(Sphereなど)が割り当てられているか確認してください。
  • キーボード入力の設定: F5キーが他のソフトウェアやシステムで使われていないか確認してください。他のキーで試す場合、スクリプト内のKeyCode.F5を別のキー(例: KeyCode.Space)に変更してください。
Q
プレイヤーが動かない場合、どこを確認すればいいですか?
A

次の項目を確認してください。

  • PlayerMoveスクリプトが正しくアタッチされているか: プレイヤーオブジェクトにPlayerMoveスクリプトをアタッチしてください。
  • スクリプト内のコードが正しいか: コピーしたコードが途中で欠けていないか確認してください。
  • Rigidbodyの有無: プレイヤーにRigidbodyコンポーネントが付いている場合、物理挙動が干渉する可能性があります。不要であれば削除してください。
Q
カメラの動きがスムーズではなく、カクカクしているように感じます。どうすれば改善できますか?
A

カメラの動きをスムーズにするには、以下の方法を試してください。

  • Lerpを使用: transform.positionを直接設定するのではなく、Vector3.LerpまたはVector3.SmoothDampを使用して、カメラの位置を滑らかに移動させるコードに変更してください。
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * 5f);
  • UpdateではなくLateUpdateを使用: カメラの位置更新はLateUpdateで行うことで、プレイヤーの動きの後にカメラを更新できます。この記事のスクリプトはすでにLateUpdateを使用していますが、不要なコードが他に入っていないか確認してください。

おすすめのアセット

「FPS Engine」は、FPSゲームのコアシステムを提供するテンプレートで、リアルな武器やキャラクター操作、カメラ機能を備えています。銃のアニメーション、敵AI、サウンドエフェクトなどが含まれ、UnityのBuilt-in、URP、HDRPの各パイプラインで利用可能です。カスタマイズ性が高く、初心者から経験豊富な開発者まで幅広く使えます。高品質なFPSのプロトタイプや完成品制作に最適です。