UnityUnityメモ

Unityでマウスカーソルにオブジェクトを追従させる方法【初心者向けガイド】

Unity

1. はじめに

こんにちは!
Unityでゲームを作るとき、プレイヤーの操作に合わせてオブジェクトが動く仕組みはとても大事ですよね。今回ご紹介するのは、「マウスカーソルにオブジェクトを追従させる方法」です。

これを使えば、インタラクティブなゲームやアプリケーションを作ることができ、プレイヤーに直感的な操作感を提供できます。しかも、スクリプトを使えば簡単に実現できるので、プログラミング初心者の方にもおすすめです。

それでは、さっそく一緒にやってみましょう!

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



2. 必要な準備

マウスカーソルにオブジェクトを追従させるには、Unityプロジェクトをセットアップし、必要なオブジェクトとスクリプトを準備します。以下の手順で進めていきましょう!


ステップ1:Unityプロジェクトを開く

まずは、Unity Hubで新しいプロジェクトを作成するか、既存のプロジェクトを開いてください。
プロジェクトのテンプレートは 3D を選ぶのがおすすめです。


ステップ2:シーンのセットアップ

プロジェクトを開いたら、ヒエラルキー(Hierarchy)ウィンドウにシーンを設定します。今回は以下の手順で3Dキューブを追加します。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. **「3D Object」→「Cube」**を選択します。
    → シーンにキューブが追加されました!これが追従するオブジェクトになります!

これで、基本の準備は完了です!次はスクリプトを作成して、キューブがマウスカーソルを追従するように設定していきます。続きを見てみましょう!



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

ここでは、キューブがマウスカーソルに追従するようにスクリプトを作成します。UnityのC#スクリプトは簡単に作成できるので、安心してください!以下の手順に従って進めていきましょう。


ステップ1:新しいスクリプトを作成

  1. プロジェクト(Project)ウィンドウを右クリックします。
  2. 「Create」→「C# Script」 を選択します。
  3. 作成されたスクリプトの名前を MouseFollower に変更します。

ステップ2:スクリプトを編集

作成したスクリプトをダブルクリックして開きます。
Visual StudioやRiderなど、Unityに連携しているコードエディタが自動的に開きます。

以下のコードをスクリプトに貼り付けてください。

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

public class MouseFollower : MonoBehaviour
{
    private Vector3 mouse;  // マウスの位置を保存する変数
    private Vector3 target; // オブジェクトのターゲット位置

    void Update()
    {
        // マウスのスクリーン座標を取得
        mouse = Input.mousePosition;

        // スクリーン座標をワールド座標に変換
        target = Camera.main.ScreenToWorldPoint(new Vector3(mouse.x, mouse.y, 10));

        // オブジェクトの位置をターゲットに更新
        this.transform.position = target;
    }
}

ステップ3:コードのポイントを解説

このスクリプトでは以下のことを実現しています:

  • Input.mousePosition を使ってマウスのスクリーン座標を取得します。
  • Camera.main.ScreenToWorldPoint でスクリーン座標をワールド座標に変換します。z の値はカメラとの距離を示しており、今回は 10 としています。
  • オブジェクトの位置を transform.position で更新して、マウスカーソルに追従させます。

ステップ4:スクリプトをアタッチ

  1. ヒエラルキー(Hierarchy)ウィンドウで、シーン内のキューブを選択します。
  2. プロジェクト(Project)ウィンドウで作成した MouseFollower スクリプトをクリックします。
  3. スクリプトをドラッグ&ドロップして、キューブにアタッチします。
    → インスペクター(Inspector)ウィンドウに MouseFollower (Script) という項目が表示されれば成功です!



4. 実行して確認する

これまでの設定が完了したら、いよいよ動作確認です!Unityのプレイモードで、キューブがマウスカーソルに追従する動きをチェックしましょう。


ステップ1:プレイモードに入る

  1. Unityエディタ上部にある 「▶︎(再生ボタン)」 をクリックしてプレイモードに入ります。
  2. シーンビューではなく ゲームビュー に切り替えます。

ステップ2:マウスを動かして確認

  1. プレイモード中に、ゲームビュー内でマウスを動かしてみましょう。
  2. キューブがカーソルの動きに合わせて追従していれば成功です!




これで動作確認まで完了しましたね!お疲れさまでした🎉
簡単なコードでも、直感的な動きを実現できるのはUnityの魅力の一つです。次のアイデアに挑戦してみましょう!

オブジェクトを横方向(X軸)のみマウスカーソルに追従させる方法

キューブがすべての方向に動く代わりに、X軸方向(横方向)のみ追従するように設定する方法もご紹介します。この設定は特定のゲームやアプリのシナリオで便利です。


ステップ1:スクリプトを修正する

作成した MouseFollower スクリプトを編集して、X軸方向のみに動きを制限するコードを記述します。以下のコードに変更してください。

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

public class MouseFollower : MonoBehaviour
{
    private Vector3 mouse;  // マウスのスクリーン座標
    private Vector3 target; // オブジェクトのターゲット座標

    void Update()
    {
        // マウスのスクリーン座標を取得
        mouse = Input.mousePosition;

        // スクリーン座標をワールド座標に変換(Y軸とZ軸は固定)
        target = Camera.main.ScreenToWorldPoint(new Vector3(mouse.x, 0, 10));

        // オブジェクトの位置を更新(X軸のみ変更)
        this.transform.position = new Vector3(target.x, this.transform.position.y, this.transform.position.z);
    }
}

コードのポイント

  1. Y軸とZ軸の値を固定
    マウスの座標を変換する際に、Y軸を 0(または任意の固定値)に設定しています。
  2. オブジェクトの位置を更新する際にX軸のみ変更
    this.transform.position では、既存のY軸とZ軸の値を維持し、X軸のみ変更しています。

ステップ2:スクリプトを適用

  1. 修正した MouseFollower スクリプトを保存します。
  2. Unityエディタでプレイモードに入り、マウスを動かして確認します。
    • キューブがマウスカーソルの動きに合わせて横方向(X軸)のみ動くことを確認してください。

応用アイデア

  • Y軸のみに追従させたい場合は、mouse.y を利用して X軸を固定 します。
  • 追従速度を調整したい場合は、Vector3.Lerp を活用してスムーズな動きにカスタマイズできます。

これで、オブジェクトがX軸方向のみに追従する設定もバッチリです!
簡単に動きの制限ができるので、ゲームデザインに合わせた応用が可能ですね。試してみてください!