UnityUnityメモ

Unityでオブジェクトをクリック位置に移動する方法を解説!初心者向けガイド

Unity

はじめに

Unityでゲームを作るとき、「クリックした場所にオブジェクトを移動させたい!」と思ったことはありませんか?たとえば、パズルゲームでピースを動かしたり、アクションゲームでキャラクターをクリック地点に移動させたりするような仕組みは、ゲーム制作に欠かせない基本テクニックです。

この記事では、初心者でも簡単にできる「クリックした位置にオブジェクトを移動させる方法」を、スクリプトの作成から設定までわかりやすく解説します!Unityを触ったことがないという方はコチラの記事から見てみてください!


1.オブジェクトの配置

まずは、Unityプロジェクトを開いて3Dオブジェクトを作成します。

1. 平面の作成

  • ヒエラルキー(Hierarchy)ウィンドウ内で右クリックします。
  • メニューから「3D Object」→「Plane」を選択します。
  • 画面中央に平面が表示され、ヒエラルキーに「Plane」という名前で追加されます。

作成されたPlaneは、オブジェクトが移動するエリアになります。

2. 移動させるオブジェクトの作成

  1. ヒエラルキー(Hierarchy)ウィンドウ内で右クリックします。
  2. メニューから「3D Object」→「Cube」を選択します。
  3. 画面中央にキューブが表示され、ヒエラルキーに「Cube」という名前で追加されます。

これがクリックした位置に移動するオブジェクトです。

3.色を変更する(任意)

わかりやすいように「Cube」の色を変更します。

  • プロジェクトウィンドウを右クリック、「Create」→「Material」を選択します。
  • インスペクターで色を変更して「Cube」にアタッチします。



2. 移動させるスクリプト

次に「Cube」を移動させるスクリプトを作成します。

1.スクリプトの作成

  • プロジェクトウィンドウで右クリック、「Create」 → 「C# Script」を選択してください。
  • スクリプト名を「MoveOnClick」にします。

2. スクリプトの編集

  1. 作成した「MoveOnClick」スクリプトをダブルクリックして、開きます。
  2. 以下のコードを入力します。
  3. 編集したコードを保存して、Unityエディタに戻ります。

コード全体の説明

このスクリプトは、Unityのゲームオブジェクトがマウスクリックした場所に移動するようにするものです。具体的には、画面上でマウスの左ボタンをクリックした場所にターゲットオブジェクトを移動させます。

各部分の説明

  1. 最初の部分
    • ここでは必要なライブラリをインポートしています。System.CollectionsSystem.Collections.Genericはリストやコレクションを扱うためのものです。UnityEngineはUnityの基本機能を使用するために必要です。
  2. クラス宣言
    • これは新しいクラスPutTargetを宣言しています。このクラスはMonoBehaviourを継承しており、Unityでのスクリプト作成に必要です。
  3. Updateメソッド
    • Updateメソッドは毎フレーム呼び出されるメソッドです。
    • Input.GetMouseButtonDown(0)はマウスの左ボタンが押されたかをチェックします。
    • RaycastHit hitはレイキャストの結果を格納するための変数です。
    • Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition)はカメラからマウスの位置に向かってレイを飛ばします。
    • if (Physics.Raycast(ray, out hit))はレイキャストが何かに当たったかを確認し、当たった場合はhitに情報を格納します。
    • transform.position = new Vector3(hit.point.x, 0.5f, hit.point.z)はゲームオブジェクトの位置を、レイが当たった地点のx座標とz座標、y座標を0.5に設定して移動させます。

全体の動き

このスクリプトは次のように動作します:

  1. 毎フレーム、Updateメソッドが呼び出されます。
  2. マウスの左ボタンが押されたかどうかをチェックします。
  3. 押された場合、カメラからマウス位置に向けてレイを飛ばします。
  4. レイが何かに当たった場合、ヒットした地点の情報を取得します。
  5. そのヒット地点のx座標とz座標、y座標を0.5に設定して、ゲームオブジェクトの位置を更新します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class MoveOnClick : MonoBehaviour
{
     void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
             RaycastHit hit;
             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
             if (Physics.Raycast(ray, out hit))
                {
                    transform.position = new Vector3 (hit.point.x, 0.5f, hit.point.z);
                }
        }
    }
}

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

  • ヒエラルキー(Hierarchy)ウィンドウでCubeオブジェクトを選択します。
  • 「MoveOnClick」スクリプトをドラッグ&ドロップしてCubeにアタッチします。



3.動作の確認

それでは動作確認をしてみましょう!以下の手順で進めてみてください。

  • プレイモードを開始する
    • Unityエディター上部の「▶︎」ボタンをクリックしてプレイモードに入ります。
  • 画面をクリックしてみる
    • ゲームビューで画面を左クリックしてください。クリックした位置にオブジェクト(キューブ)が移動するはずです。
  • 動作を確認するポイント
    • クリックした場所に正確にオブジェクトが移動しているか。

これで、クリックした位置にオブジェクトを移動させる機能が完成しました!動作確認が終わったら、次の機能を追加することも考えてみてください。たとえば、クリック位置に移動するアニメーションを加えると、さらにゲームが面白くなりますよ!


おすすめのアセット

Unityでクリックした位置にオブジェクトを移動させる機能を実装する際、スムーズなアニメーションを追加したいと思ったことはありませんか?そこでおすすめしたいのが DOTween Pro です。

DOTween Proのおすすめポイント

  1. 簡単に実装可能
    難しいコードを書かなくても、直感的にオブジェクトの移動や回転、スケールのアニメーションを実現できます。例えば、クリック位置にオブジェクトを「ふわっと」移動させたり、「滑らかに」移動させたりするのも簡単です。
  2. 高性能で柔軟性が高い
    DOTween Proは軽量かつ高速で、ゲームのパフォーマンスに影響を与えません。さらに、Timelineとの連携も可能なので、複雑なアニメーションシーケンスを作るのにも最適です。
  3. Unity公式アセットストアで高評価
    ユーザーのレビューでも高い評価を得ており、プロジェクトで広く活用されています。
  4. ゲームのクオリティを底上げ
    アニメーションに「動きの質感」を加えるだけで、ゲーム全体の印象が格段に向上します。クリックした位置に移動するだけでも、DOTween Proなら簡単にプロフェッショナルな仕上がりに!

簡単な設定で、あなたのゲームにプロのような動きを追加できます。「あともう少しの工夫で、ゲームのクオリティを上げたい」と感じている方に、ぜひ試していただきたいアセットです!

よくある質問

Q
オブジェクトが正しく移動しません。どうしたらいいですか?
A

スクリプトや設定を再確認してください。特に、Cubeオブジェクトに「MoveOnClick」スクリプトが正しくアタッチされているかを確認しましょう。また、Planeオブジェクトが正しい位置に配置されているかもチェックしてください。

Q
複数のオブジェクトを移動させたい場合はどうしたらいいですか?
A

複数のオブジェクトを管理するために、それぞれのオブジェクトに個別のスクリプトをアタッチするか、リストを使用してオブジェクトを管理し、クリック時に適切なオブジェクトを移動させるように設定します。

Q
クリックした位置にエフェクトを追加するにはどうしたらいいですか?
A

ヒエラルキーウィンドウでエフェクト用のオブジェクトを作成し、スクリプト内でエフェクトを生成する処理を追加します。例えば、Instantiateメソッドを使用してエフェクトプレハブをクリック位置に生成します。