UnityUnityメモ

Unity初心者必見!クリック位置にオブジェクトを向ける方法を徹底解説

Unity

はじめに

こんにちは!この記事では、Unity初心者の方でも簡単に挑戦できるスクリプトを使った機能の実装方法を解説します。今回のテーマは 「マウスでクリックした位置にオブジェクトを向ける方法」 です。

Unityを使ったゲーム開発では、マウス操作でオブジェクトを移動させたり向きを変えたりすることがよくあります。このような操作は、シンプルなパズルゲームやアクションゲームなど、さまざまなジャンルで活躍する基本テクニックの一つです。


この記事では以下の2つをゴールに設定しています。

  1. Sphereをクリックした位置に移動させる
  2. 棒状のオブジェクト(矢印など)をクリック位置に向かせる

これを学べば、シーン内でクリック位置を正確に取得し、それを使ってオブジェクトの動きや方向を制御するスクリプトの作成方法が理解できるようになります。

初めてスクリプトを書く方にもわかりやすいよう、ステップごとに詳しく解説しますので安心してください。では、さっそく準備から始めていきます!

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



ステップ1: 環境の準備

Unityを使ってマウスクリックに反応するオブジェクトを作る準備をしていきましょう。このステップでは、まずUnityプロジェクトを作成し、必要な3Dオブジェクトを配置します。


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

  1. Unity Hubを起動します。
  2. **「新しいプロジェクト」**をクリックします。
  3. テンプレートから**「3D(Core)」**を選択してください。
  4. プロジェクト名を「例:MouseControlExample」入力し、保存先を選択します。
  5. **「作成」**ボタンをクリックしてプロジェクトを開始します。

これで新しいUnityプロジェクトが作成されます。


2. Sphereを作成する

クリックした場所に移動するオブジェクトとして、3DオブジェクトのSphereを作成します。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. **「3D Object」→「Sphere」**を選択します。
  3. シーンビューに白い球体が表示されたら成功です!

このSphereが、クリックした位置に移動するオブジェクトになります。次のステップでは、このSphereをマウス操作で動かせるように設定していきます。



ステップ2: Sphereをクリック位置に移動させる

ここでは、マウスのクリック位置にSphereが移動するようにする方法を解説します。Unity初心者でも簡単に設定できるので、ぜひ一緒にやってみてください!


1. スクリプトを作成

次に、クリックした位置にSphereが移動するスクリプトを作成します。

  1. プロジェクト(Project)ウィンドウで右クリックします。
  2. 「Create」→「C# Script」を選択します。
  3. スクリプトに**「MousePoint」**と名前を付けます。
  4. 「MousePoint」スクリプトをダブルクリックして、スクリプトエディタを開きます。

以下のコードを入力してください:

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

public class MousePoint : MonoBehaviour
{
    private Vector3 mousePosition; // マウスの位置を格納
    private Vector3 spherePosition; // Sphereの新しい位置を格納

    void Update()
    {
        // 左クリックが押されたときに実行
        if (Input.GetMouseButtonDown(0))
        {
            // マウスのスクリーン座標を取得
            mousePosition = Input.mousePosition;
            // Z軸の深度を設定(ここではカメラから10ユニット先)
            mousePosition.z = 10.0f;

            // スクリーン座標をワールド座標に変換
            spherePosition = Camera.main.ScreenToWorldPoint(mousePosition);

            // Sphereの位置を更新
            this.transform.position = spherePosition;
        }
    }
}

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

次に、作成したスクリプトをSphereにアタッチします。

  1. ヒエラルキー(Hierarchy)ウィンドウでSphereを選択します。
  2. 「MousePoint」スクリプトをドラッグ&ドロップして、インスペクター(Inspector)ウィンドウのSphereにドロップします。

これで、スクリプトがSphereに適用されました!

スクリプトSphereにアタッチ

3. ゲームを実行して確認

最後に、実際に動作を確認してみましょう。

  1. Unityエディタの上部にある「再生(Play)」ボタンをクリックします。
  2. シーンビューまたはゲームビューで任意の場所を左クリックしてください。
  3. Sphereがクリックした位置に移動するはずです!

ポイント

  • Z軸の値に注意mousePosition.zの値を調整すると、Sphereがカメラからどれくらいの距離に配置されるかを変更できます。
  • スクリーン座標とワールド座標:Unityでは、クリックした位置(スクリーン座標)を3D空間(ワールド座標)に変換する必要があります。この部分がポイントです!

次のステップでは、棒状のオブジェクトを作成して、クリックした位置に向ける方法を解説します!まずはSphereの動作を確認してみてくださいね。



ステップ3: 棒状オブジェクトの作成

さて、クリックした位置に向かう棒状のオブジェクトを作っていきましょう!今回は棒状のオブジェクトとして「Cube」を使用します。さらに、そのCubeを親オブジェクトで管理しやすい形にまとめていきます。


1. 棒状のオブジェクト(Cube)の作成

まずはUnityで「Cube」を作成します。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. メニューから「3D Object」→「Cube」を選びます。
    • これでシーンに「Cube」が追加されます。

2. Cubeのサイズを棒状に調整

次に、このCubeを細長い棒状にします。

  1. ヒエラルキーウィンドウで作成した「Cube」を選択します。
  2. インスペクター(Inspector)ウィンドウで「Transform」コンポーネントの「Scale」を以下の値に変更します:
    • X: 0.5
    • Y: 4
    • Z: 0.5

これで、縦に細長い棒状のオブジェクトが完成しました!


3. 空のGameObjectの作成とCubeの親子設定

次に、Cubeを管理しやすいように空のGameObjectを親として設定します。

  1. ヒエラルキーウィンドウを右クリックします。
  2. Create Empty」を選び、空のGameObjectを作成します。
  3. 作成した空のGameObjectを選択し、インスペクター(Inspector)ウィンドウで以下の設定を変更します:
    • Position.Y: 2
    • Rotation.X: 90
  4. Cubeをこの空のGameObjectの子オブジェクトに設定します。
    • ヒエラルキーウィンドウでCubeをドラッグし、空のGameObjectの上にドロップします。

これで、Cubeが空のGameObjectの子オブジェクトとして登録されました。この設定により、後で親オブジェクトを中心にCubeを動かせるようになります。


4. 確認ポイント

ここまでできたら、一度シーンを確認しましょう。

  • ヒエラルキーウィンドウでGameObjectとその子オブジェクトの構造を確認。
  • シーンビューでCubeが細長い棒状になっているかを確認。
  • Cubeが空のGameObjectの子オブジェクトとして正しく設定されているかを確認。

次のステップでは、この棒状のオブジェクトがクリックした位置に向くよう、スクリプトを作成して設定していきます! 😊



ステップ4: 棒状オブジェクトをクリック位置に向ける

ここでは、棒状のオブジェクト(Cube)がクリックした位置に向くように設定していきます。具体的には、LookAt関数を使ったスクリプトを作成します。


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

棒状オブジェクトがクリック位置に向くようにするために、スクリプトを作成します。

  1. プロジェクトウィンドウで右クリックして、「Create」→「C# Script」を選びます。
  2. スクリプトに「StickRotate」という名前を付けます。
  3. 「StickRotate」スクリプトをダブルクリックして開き、以下のコードを記述してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StickRotate : MonoBehaviour
{
    public Transform target;

    void Update()
    {
        // target(目的地)を向く
        transform.LookAt(target);
    }
}

2. スクリプトを設定する

作成したスクリプトをUnity内で設定します。

  1. ヒエラルキーウィンドウで、空のGameObjectを選択します。
  2. 「StickRotate」スクリプトをドラッグして、インスペクターウィンドウのGameObjectにドロップします。
StickRotate
  • インスペクターで、スクリプト内の「Target」欄に「Sphere」をドラッグ&ドロップして指定します。

3.Sphereを透明にする

  1. プロジェクトウィンドウで、適当なフォルダ(例:「Materials」)を選択します。
  2. フォルダの中で右クリックし、「Create(作成)」→「Material(マテリアル)」を選びます。
  3. inspector画面からRenderingModeを「Fade」に変更し透明度を調整します。
  4. 作成した「Material」をドラッグ&ドロップでオブジェクトにアタッチします。

4. 実行して確認する

  1. 上部メニューの「Play」ボタンをクリックして、ゲームを実行します。
  2. シーンビューまたはゲームビューで左クリックしてみましょう。
    • Sphereがクリックした位置に移動し、それに合わせて棒状のオブジェクト(Cube)が向くのを確認できます!

これで、クリック位置に棒状オブジェクトを向ける設定が完了しました!この手法は、矢印やポインタを使ったゲームシステムに応用できます。次は見た目をカスタマイズして、さらに魅力的なオブジェクトに仕上げていきましょう!



よくある質問(Q&A)

Q
Sphereがクリック位置に移動しません。原因は何でしょうか?
A

主な原因として以下が考えられます:

  1. カメラの設定が正しくない場合
    • Camera.main.ScreenToWorldPointを使用する際、カメラが正しい位置に配置されていないと、座標変換がうまくいきません。カメラのPositionを確認し、Z軸がSphereの移動範囲をカバーする位置に設定してください。
  2. スクリプトのミス
    • MousePointスクリプトに誤字や抜けがないか確認してください。また、mousePosition.z = 10.0f;のZ値を調整すると結果が改善する場合があります。
Q
棒状のオブジェクト(Cube)がクリック位置を向きません。どうすればよいですか?
A

いくつかのポイントを確認してください:

  1. スクリプトのtargetが正しく設定されていない場合
    • StickRotateスクリプトのtargetフィールドに、Sphereオブジェクトをドラッグ&ドロップで指定しましたか?これが設定されていないと、Cubeが向く対象を認識できません。
  2. Cubeの親子関係
    • Cubeを空のGameObjectの子オブジェクトとして設定していますか?親子関係が正しくないと、意図した位置や向きにならないことがあります。
Q
マウスクリックの位置がずれる原因は何ですか?
A

クリック位置がずれる主な原因は次の通りです:

  1. Z値の設定ミス
    • mousePosition.z = 10.0f;の値を調整する必要があります。この値はカメラからの距離を表しますので、距離が適切でない場合、Sphereの位置がクリック位置とずれてしまいます。
  2. PerspectiveカメラとOrthographicカメラの違い
    • Camera.main.ScreenToWorldPointはPerspectiveカメラを基準としています。Orthographicカメラを使用している場合は別のアプローチが必要です。

おすすめのアセット

Squad Shooter Template + Editorは、Unityで手軽にシューティングゲームを作成するためのテンプレートです。このアセットは、キャラクターの操作やチーム戦闘の基本的な機能を提供し、初心者でも簡単にカスタマイズ可能です。使いやすいエディタツールが含まれており、直感的にレベルデザインやキャラクター設定ができます。