UnityUnityメモ

Unityでオブジェクト間の距離に応じてカメラを動かす方法!初心者向けガイド

Unity

1. はじめに

Unityでゲームを開発する中で、カメラの操作は非常に重要な要素のひとつです。今回のチュートリアルでは、 Cube(プレーヤー)Sphere(球体) の間にカメラを配置し、両オブジェクトが動くとカメラが近づいたり離れたりする仕組みを作成します。

この仕組みを使えば、プレーヤーキャラクターと敵キャラクターの動きに応じてカメラが動くようなダイナミックなゲーム体験を提供することができます。Unity初心者の方でも、この記事を読めば簡単に理解できるよう、手順を一つずつわかりやすく解説していきます。

一緒にゲーム開発のスキルをレベルアップしていきましょう!

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



2. 必要な準備

始める前に、以下の準備を行いましょう。これらのステップを完了すれば、チュートリアルをスムーズに進めることができます。


1. 新規プロジェクトの作成

  1. Unity Hubを開き、[新しいプロジェクト]をクリックします。
  2. テンプレートは「3D Core」を選択してください。
  3. プロジェクト名を入力し、「作成」をクリックします。

2. 基本設定の確認

  1. プロジェクトを開いたら、シーンビューに「Main Camera」と「Directional Light」があることを確認します。
  2. シーンを保存しておきましょう。
    • メニューバーから File > Save As を選び、シーン名を「MainScene」として保存します。

以上で、必要な準備が整いました!次は、具体的なオブジェクトを作成していきます。準備ができたら次に進みましょう!



3. オブジェクトの作成

ここでは、今回のチュートリアルに必要なオブジェクトをUnityのシーンに追加します。以下の手順に従って、それぞれのオブジェクトを作成してください。


1. Cube(プレーヤー)の作成

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. 3D ObjectCube を選択して、Cubeを作成します。
  3. 作成されたCubeを選択し、Inspectorウィンドウで以下のように設定を変更します。
    • 名前: Player
    • 位置 (Position): X = 0, Y = 0.5, Z = 0
    • サイズ (Scale): X = 1, Y = 1, Z = 1(デフォルトのままでOK)

2. Sphere(球体)の作成

  1. 再度ヒエラルキーウィンドウを右クリックします。
  2. 3D ObjectSphere を選択して、Sphereを作成します。
  3. 作成されたSphereを選択し、以下のように設定を変更します。
    • 名前: Sphere
    • 位置 (Position): X = 3, Y = 0.5, Z = 0
    • サイズ (Scale): X = 1, Y = 1, Z = 1(デフォルトのままでOK)

3. GameObject(中心)の作成

  1. ヒエラルキーウィンドウを右クリックします。
  2. Create Empty を選択して、空のゲームオブジェクトを作成します。
  3. 作成されたオブジェクトを選択し、以下のように設定を変更します。
    • 名前: Center
    • 位置 (Position): X = 0, Y = 0.5, Z = 0(デフォルトのままでOK)
    • サイズ (Scale): X = 1, Y = 1, Z = 1(デフォルトのままでOK)

これで、シーンに必要なオブジェクトが揃いました!次は、それぞれのオブジェクトにスクリプトをアタッチして機能を追加していきましょう。



4. スクリプトの作成

ここでは、オブジェクトを動かしたりカメラを制御するために必要なスクリプトを作成します。それぞれのスクリプトを手順に従って作成し、適切なオブジェクトにアタッチしましょう。


1. プレーヤーの移動スクリプト

  1. プロジェクト(Project)ウィンドウで右クリックします。
  2. CreateC# Script を選択し、新しいスクリプトを作成します。
  3. スクリプトの名前を PlayerMove とします。
  4. スクリプトをダブルクリックして開き、以下のコードを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    void Update()
    {
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f;
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
        transform.position = new Vector3
        (
            transform.position.x + dx, 0.5f, transform.position.z + dz
        );
    }
}
  1. 作成したスクリプトを ヒエラルキー(Hierarchy)ウィンドウPlayer にドラッグ&ドロップしてアタッチします。

2. 中間地点取得スクリプト

  1. 同じように新しいスクリプトを作成し、名前を HalfPoint とします。
  2. 以下のコードを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HalfPoint : MonoBehaviour
{
    public GameObject cube;
    public GameObject sphere;
    public float dis;

    void Update()
    {
        this.transform.position = (cube.transform.position + sphere.transform.position) / 2;
        Vector3 cubePos = cube.transform.position;
        Vector3 spherePos = sphere.transform.position;
        dis = Vector3.Distance(cubePos, spherePos);
    }
}
  1. 作成したスクリプトを ヒエラルキーCenter にドラッグ&ドロップしてアタッチします。
  2. Inspectorウィンドウ で以下を設定します。
    • Cube フィールド: Player をドラッグして設定します。
    • Sphere フィールド: Sphere をドラッグして設定します。

3. カメラの移動スクリプト

  1. 新しいスクリプトを作成し、名前を CameraMove とします。
  2. 以下のコードを記述します。
using UnityEngine;

public class CameraMove : MonoBehaviour
{
    public GameObject target;
    HalfPoint targetPos;

    void Start()
    {
        target = GameObject.Find("Center");
        targetPos = target.GetComponent<HalfPoint>();
    }

    void Update()
    {
        transform.LookAt(target.transform);
        this.transform.position = new Vector3(0, 0, -targetPos.dis);
    }
}
  1. このスクリプトを Main Camera にドラッグ&ドロップしてアタッチします。

これで必要なスクリプトの作成が完了しました!次に、プレイモードで動作を確認し、期待通りに動くかチェックしてみましょう。



5. 実行と確認

ここでは、Unityエディターでプレイモードを実行し、作成した仕組みが正しく動作するか確認します。以下の手順に従って進めてください。


1. プレイモードの開始

  1. Unityエディター上部にある「▶」ボタン(プレイボタン)をクリックしてプレイモードを開始します。
  2. シーンビューまたはゲームビューに、作成したCube(プレーヤー)、Sphere(球体)、およびカメラの動作が反映されます。

2. Cubeを動かして確認

  1. キーボードの 矢印キー または W/A/S/Dキー を使って、Cube(Player)を動かしてみましょう。
  2. Cubeが動くと、Sphereとの距離に応じてカメラが以下のように動作するはずです。
    • CubeとSphereが離れると、カメラが引いて全体を表示します。
    • CubeとSphereが近づくと、カメラが寄って詳細を表示します。

3. 問題が発生した場合

よくある問題と解決方法を以下にまとめます。

  • Cubeが動かない場合
    • 「PlayerMove」スクリプトが Player に正しくアタッチされているか確認してください。
    • Input設定で「Horizontal」と「Vertical」が正しく動作しているか確認します。
  • カメラが動かない場合
    • 「CameraMove」スクリプトが Main Camera にアタッチされているか確認してください。
    • 「Center」に「HalfPoint」スクリプトがアタッチされ、CubeとSphereが正しく割り当てられているか確認してください。
  • エラーメッセージが表示される場合
    • Unityコンソール(エディター下部のウィンドウ)を確認し、エラーの内容をチェックします。
    • スクリプトのスペルミスや設定ミスがないか再度確認してください。

4. プレイモードの終了

動作確認が終わったら、もう一度「▶」ボタンをクリックしてプレイモードを終了します。プレイモード中に行った変更は保存されないため、必要な場合はプレイモード外で修正してください。


動作確認ができたら、スクリプトや設定をカスタマイズして、さらに複雑な動作を追加してみましょう。例えば、カメラの回転を加えたり、Sphereも移動できるようにしてみたりすると、さらに面白い動きが実現できます!



よくある質問

Q
Cubeが動かないのですが?
A

「PlayerMove」スクリプトが正しくアタッチされているか確認してください。

Q
カメラが正しく動きません。
A

「CameraMove」スクリプトがカメラにアタッチされているか、また「Center」が正しいターゲットとして設定されているか確認してください。

Q
スクリプトでエラーが出ます。
A

コードを正しくコピーしたか確認し、不明な場合はエラーメッセージを参考に修正してください。

おすすめのアセット

Mass Camera Systemは、Unityで複数のカメラを簡単に管理・制御できるツールです。これを使えば、ゲームやアプリの中で複数の視点をシームレスに切り替えることが可能になります。特に、カットシーンやリプレイシステム、マルチプレイヤーゲームに最適です。

このツールは、カメラの配置や設定を簡単に行えるインターフェースを提供し、複雑なコードを書かなくても直感的に操作できます。さらに、各カメラのパラメータを個別に調整できるため、細かいニーズにも対応できます。