UnityUnityメモ

Unity初心者でも簡単!マウスクリックした座標に向けて横移動するオブジェクトを作成する

Unity

1. はじめに

Unityを使ったゲーム開発を始めたばかりの方にとって、「オブジェクトを動かす」という課題は非常に楽しく、かつ学びが多いテーマです。本記事では、**マウスクリックした座標に向けて、横方向にだけ移動するSphere(球体)**を作る方法を解説します。


このプロジェクトでは、以下のことを学べます:

  • マウスのクリック位置を取得する方法
    プレイヤーがクリックした場所をUnityのワールド座標に変換し、ターゲットを動かす仕組みを実装します。
  • オブジェクトをターゲットに向かって動かす方法
    Sphereがターゲットに向かって移動し、到達したら停止する動きを作ります。

Unity初心者でも安心して進められるように、すべてのステップを丁寧に説明していきます。完成すると、クリック操作に反応して動く仕組みを簡単に実現できるので、今後のプロジェクトにも応用できる知識が身につきますよ!さあ、一緒に楽しみながら作っていきましょう! 🎮

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



2. 必要な準備

このステップでは、Unityでプロジェクトを準備し、基本的なシーンの設定を行います。初めてUnityを使う方でも安心して進められるように、わかりやすく説明します。


2.1 Unityプロジェクトの作成

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

  1. 新規プロジェクトを作成
    • Unity Hubの「Projects」タブを開きます。
    • 右上の「New Project」ボタンをクリックします。
    • テンプレートを選択
      「3D Core」テンプレートを選択してください。このテンプレートは3Dプロジェクトを作成するための基本設定が整っています。
    • プロジェクト名を入力
      「MouseClickMove」といった名前を入力し、保存先フォルダを選びます。
    • 「Create Project」をクリックしてプロジェクトを作成します。

2.2 シーンの初期設定

新しいプロジェクトが開いたら、Unityのシーンに基本的な設定を行いましょう。

  1. デフォルトのシーンを確認
    プロジェクトを開くと、Unityには以下のようなデフォルトオブジェクトが含まれています。
    • Main Camera: シーンを映し出すカメラです。
    • Directional Light: シーンを照らすライトです。
  2. 不要な要素を削除しない
    Main CameraやDirectional Lightは、このチュートリアルの中で使用します。そのため、削除せずにそのまま残しておきましょう。
  3. シーンの名前を変更
    ヒエラルキーウィンドウの上部にある「SampleScene」を右クリックし、「Rename」を選択します。シーン名を「MainScene」などに変更しましょう。
    Ctrl + S (Windows) または Command + S (Mac) を押して、シーンを保存します。

準備が完了したら、いよいよオブジェクトを配置してスクリプトを作成していきます!



3. 空のGameObject(ターゲット)の作成

このステップでは、マウスクリックした座標を示す「ターゲット」となる空のGameObjectを作成します。このターゲットは、Sphere(球体)が移動する目標地点として機能します。


空のGameObjectを作成する手順

  1. ヒエラルキー(Hierarchy)ウィンドウを開く
    Unityエディターの左上にあるヒエラルキーウィンドウを確認します。ここでシーンに配置するオブジェクトを管理します。
  2. 右クリックしてメニューを開く
    ヒエラルキーウィンドウ内の任意の場所で右クリックをすると、メニューが表示されます。
  3. 「Create Empty」を選択
    表示されたメニューから「Create Empty」をクリックします。この操作でシーンに空のGameObjectが作成されます。
  4. GameObjectの名前を変更する
    作成されたGameObjectのデフォルト名は「GameObject」になっています。これを「Target」に変更します。
    • GameObjectを選択し、インスペクター(Inspector)ウィンドウで名前を「Target」と入力します。
    • または、ヒエラルキーウィンドウ内で名前を右クリックして「Rename」を選択し、「Target」と入力します。

作成したターゲットの役割

この「Target」オブジェクトは、マウスクリックした位置に移動する目標地点として使用されます。次のステップで作成するスクリプトを適用すると、クリックした座標にターゲットが移動する仕組みが完成します。


補足:
空のGameObjectは見た目には何も表示されませんが、位置やスクリプトの参照点として非常に重要です。操作に慣れない場合は、インスペクターウィンドウの「Transform」セクションで位置が正しく設定されていることを確認してください(初期位置は(0, 0, 0)でOKです)。


このステップが完了したら、次のステップ「Sphere(球体)の作成」に進みましょう!簡単な操作なので、すぐに終わりますよ。



4. Sphere(球体)の作成

マウスクリックした座標に向かって動くオブジェクトを作るために、シーン内にSphere(球体)を配置します。このSphereが実際に動作するメインキャラクターとなります。


4.1 Sphereの作成手順

  1. ヒエラルキーウィンドウを開く
    Unityエディターの左側にある「ヒエラルキー(Hierarchy)」ウィンドウを開きます。
  2. Sphereを追加する
    • ヒエラルキーウィンドウ内で右クリックしてメニューを表示します。
    • 表示されたメニューから「3D Object」→「Sphere」を選択します。
      → シーン内に球体が追加されます。

4.2 名前の変更

  1. 名前を変更する理由
    「Sphere」というデフォルト名は他のオブジェクトと混同しやすいため、わかりやすい名前に変更します。
  2. 変更手順
    • ヒエラルキーウィンドウで「Sphere」を選択します。
    • 再度名前をクリックするか、右クリックして「Rename」を選択します。
    • 新しい名前として「Player」と入力します。

4.3 配置を確認・調整

  1. 初期位置の確認
    作成されたSphereの初期位置は、デフォルトで(0, 0, 0)に設定されています。
  2. 位置の調整方法
    • ヒエラルキーで「Player」を選択します。
    • インスペクター(Inspector)ウィンドウ内の「Transform」コンポーネントで、PositionのX、Y、Z値を確認します。
    • 必要に応じて数値を変更して配置を調整します。今回はデフォルトのままで問題ありません。

4.4 Sphereを見やすくする(任意)

  1. 新しいマテリアルを作成する
    • プロジェクトウィンドウで右クリック →「Create」→「Material」を選択します。
    • 作成されたマテリアルに「PlayerMaterial」という名前を付けます。
  2. マテリアルの色を変更する
    • インスペクターウィンドウで「Albedo」の色を変更し、Sphereが見やすくなるよう好きな色を設定します。
  3. マテリアルをSphereに適用する
    • 作成したマテリアルをヒエラルキー内の「Player」にドラッグ&ドロップして適用します。

Sphereの作成と基本設定が完了しました!次は、マウスクリックした座標にターゲットを移動させるスクリプトを作成していきましょう。続けて進めてみてください!



5. マウスクリック位置にターゲットを移動させるスクリプト

このステップでは、マウスクリックした位置にターゲットを移動させるスクリプトの作成手順を解説します。以下の手順に従えば、ターゲットがマウスクリックしたX座標へ移動するようになります。


ステップ 1: スクリプトの作成

  1. プロジェクトウィンドウでスクリプトを作成
    • プロジェクトウィンドウで右クリック →「Create」→「C# Script」を選択します。
    • スクリプトに「MousePoint」と名前をつけます。
  2. スクリプトをターゲットにアタッチ
    • ヒエラルキーで「Target」を選択します。
    • 作成したスクリプト「MousePoint」をドラッグ&ドロップして「Target」にアタッチします。

ステップ 2: コードの記述

作成した「MousePoint」スクリプトをダブルクリックして開き、以下のコードを入力してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MousePoint : MonoBehaviour
{
    private Vector3 mousePosition;
    private Vector3 objPosition;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            mousePosition = Input.mousePosition;
            mousePosition.z = 10.0f;
            objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
            this.transform.position = new Vector3(objPosition.x, 0, 0);
        }
    }
}

ステップ 3: コードの解説

  • Input.GetMouseButtonDown(0): マウスの左クリックが押された瞬間を検出します。
  • Input.mousePosition: マウスカーソルの位置を取得します(スクリーン座標系)。
  • Camera.main.ScreenToWorldPoint(): スクリーン座標をワールド座標に変換します。
  • this.transform.position: 「Target」の位置を更新します。この場合、X座標のみを変更しています。



6. Sphereをターゲットに向かって移動させるスクリプト

ここでは、Sphere(球体)をターゲット(Target)に向かって移動させるスクリプトを作成します。クリックで移動させたターゲットにSphereが追いかけるように動き、接触したら停止する仕組みを実装します。


1. スクリプトの作成と設定

  1. 新しいスクリプトを作成する
    • プロジェクトウィンドウで右クリックし、「Create」→「C# Script」を選択。
    • 新しいスクリプトに「SphereMove」という名前を付けます。
  2. スクリプトをSphereにアタッチする
    • 作成したスクリプトをSphere(名前を「Player」に変更している場合はPlayer)にドラッグ&ドロップしてアタッチします。

2. スクリプトのコードを記述する

以下のコードを「SphereMove」スクリプトに記述してください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SphereMove : MonoBehaviour
{
    public GameObject target;  // ターゲットへの参照
    public float speed;        // 移動速度
    public bool isTouch;       // ターゲットに接触しているかどうか

    void Start()
    {
        // 初期設定
        speed = 0.1f;  // Sphereの移動速度
        target = GameObject.Find("Target");  // ターゲット(Target)オブジェクトを取得
        isTouch = false;  // 接触状態の初期値を設定
    }

    // 衝突時に呼ばれるメソッド
    private void OnCollisionEnter(Collision collision)
    {
        // 衝突したオブジェクトがターゲットの場合
        if (collision.gameObject.name == "Target")
        {
            isTouch = true;  // 接触フラグを立てる
        }
    }

    void Update()
    {
        // ターゲットに接触していない場合のみ移動
        if (!isTouch)
        {
            transform.position = Vector3.MoveTowards(
                transform.position,                      // 現在位置
                target.transform.position,              // ターゲット位置
                speed                                   // 移動速度
            );
        }
    }
}

3. コードの解説

  1. 変数の役割
    • target: Sphereが追いかける対象のターゲット(Targetオブジェクト)。
    • speed: Sphereが移動する速度。
    • isTouch: Sphereがターゲットに接触したかどうかを判定するフラグ。
  2. Startメソッド
    • 最初に移動速度(speed)とターゲット(target)を設定。
    • GameObject.Find("Target")でヒエラルキー内の「Target」を検索して参照を取得。
  3. OnCollisionEnterメソッド
    • ターゲットにSphereが接触するとisTouchtrueになり、移動が停止します。
  4. Updateメソッド
    • 毎フレーム、Vector3.MoveTowardsを使用してターゲットに向かって移動。
    • isTouchtrueの場合は移動を停止。

4. ヒントと補足

  • 速度の調整
    speedの値を増やすとSphereの移動が速くなり、減らすとゆっくりになります。適切な値を試して調整してください。
  • ターゲット名の一致確認
    GameObject.Find("Target")の部分はヒエラルキー上の名前と一致する必要があります。名前が異なる場合はスクリプトを修正してください。
  • 接触判定が動かない場合
    SphereとTargetの両方に「Collider」コンポーネントが必要です。また、どちらかに「Rigidbody」コンポーネントがアタッチされているか確認してください。



7. 動作確認とポイント

動作確認の手順

ここまでの手順が完了したら、いよいよ作成した仕組みが正しく動作するかを確認しましょう!以下の手順でテストを行います。

  1. プレイモードを開始
    • Unityエディターの上部にある「▶(再生ボタン)」をクリックしてプレイモードを開始します。
  2. シーンビューで確認
    • マウスカーソルをシーンビューに移動させます。
    • 左クリックすると、クリックした位置に「Target」が移動します。
  3. Sphereの動作確認
    • 「Target」が移動した後、Sphere(球体)がゆっくりとその「Target」に向かって移動しているか確認してください。
    • Sphereが「Target」に接触したタイミングで、動作が止まれば成功です!

動作確認時のポイント

テスト中に何らかの問題が発生した場合、以下のチェックポイントを確認してください。

  1. スクリプトのアタッチ
    • 「MousePoint」スクリプトが「Target」オブジェクトにアタッチされているか確認します。
    • 「SphereMove」スクリプトが「Player」オブジェクトにアタッチされていることを確認してください。
  2. オブジェクトの名前
    • 「Target」オブジェクトや「Player」オブジェクトの名前が正確に設定されているか確認します。
    • スクリプト内で名前が参照されるため、名前が間違っていると動作しません。
  3. スクリプトのエラー
    • Unityエディターのコンソールにエラーが表示されていないか確認してください。
    • もしエラーがあれば、該当するスクリプトのコードを再確認し、タイポや欠落がないかを確認します。

動作の改善ポイント

さらにプロジェクトを改善するためのアイデアをいくつかご紹介します。

  1. 移動速度の調整
    • 「SphereMove」スクリプト内のspeed変数を変更して、移動速度を調整できます。例えば、speed = 0.5f;とすることで、移動速度を速くできます。
  2. 到達時の演出追加
    • Sphereが「Target」に接触したタイミングで、エフェクトやサウンドを追加すると、より魅力的な仕組みにできます。
    • サウンドの場合は、AudioSourceコンポーネントをSphereに追加し、スクリプトでPlay()メソッドを呼び出してください。
  3. 複数のターゲット対応
    • ターゲットを複数生成し、クリックごとに動きを変える仕組みを追加すると、さらに楽しい体験を作れます。

これで動作確認とポイントの解説は完了です!次は、自分だけのオリジナルな動きや演出を追加して、さらに学びを深めてみてください!



よくある質問(Q&A)

Q
マウスクリックでターゲットが動きません。どうすればいいですか?
A

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

Q
Sphereがターゲットを追いかけません。原因は?
A

「SphereMove」スクリプトのtargetフィールドが正しく設定されているかチェックしてください。

Q
クリックした位置が変な場所になります。
A

カメラのZ座標を適切に設定してください。mousePosition.zの値を調整すると改善する場合があります。

おすすめのアセット

「Candy Pinball – Complete Game Template」は、シンプルで楽しいハイパーカジュアルなピンボールゲームをすぐに作成できるUnityアセットです。プレイヤーは、タイミングよくボールを発射してカップを満たすことを目的としたゲームを楽しめます。このテンプレートは、30の既存レベルが含まれており、3Dオブジェクトを使ってシーンを簡単に拡張することもできます。

タイトルとURLをコピーしました