スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unityでマウスドラッグの距離の長さでオブジェクトを動かす方法

Unity

Unityはゲーム開発において非常に人気のあるエンジンですが、初心者には少し難しい印象を与えることもあります。しかし、基本を学ぶことで、Unityの強力な機能を活用し、面白い動きや操作をゲームに取り入れることができます。今回は、マウスドラッグの距離をパワー数値に変換し、その力でCubeを移動させる方法を紹介します。この機能は、スリングショットのようなゲームや、何かを投げる動作をシミュレートするのに役立ちます。

基本概念の理解

まずは、Unityでオブジェクトを動かすための基本的な概念から理解しましょう。Unityでは、オブジェクト(この場合はCube)を動かすためには、スクリプトを使用して制御します。スクリプトは、C#言語で書かれ、オブジェクトにアタッチ(付加)して使用します。今回の目的では、マウスのドラッグ距離を測定し、それを力としてCubeに適用するスクリプトを作成します。

プロジェクトの準備

Unityを開き、新しいプロジェクトを作成します。プロジェクト名は何でも構いませんが、「DragToMoveCube」のようなわかりやすい名前を推奨します。プロジェクトが開いたら、シーンにCubeを追加しましょう。これは、Hierarchyウィンドウで右クリックし、「3D Object > Cube」と選択することで作成できます。

スクリプトの作成

Cubeが準備できたら、次はスクリプトを作成します。プロジェクトウィンドウで右クリックし、「Create > C# Script」と選択し、スクリプトに「DragToMove」という名前を付けます。スクリプトをダブルクリックして開き、以下のコードを記述します。

スクリプトの構成

  • 変数の宣言: マウス位置を捕捉し、それをワールドポイントに変換し、ドラッグの開始位置と終了位置を記録するために必要な変数が宣言されています。
  • Startメソッド: power変数を初期化します。
  • Updateメソッド: Input.mousePositionを使用してマウスの現在位置を取得し、Camera.main.ScreenToWorldPoint(pos)を通じてそのスクリーン位置をワールド座標に変換します。これにより、3D空間内でのマウスの位置を正確に取得できます。
    • Input.GetMouseButtonDown(0)は、マウスの左ボタンが押された瞬間にtrueを返します。この時点でのマウスのx座標をstartPosに記録します。
    • Input.GetMouseButtonUp(0)は、マウスの左ボタンが離された瞬間にtrueを返します。この時点でのマウスのx座標をendPosに記録し、startPosからの差分を計算してpowerに格納します。
    • powerを基にして、Rigidbodyに力を加えます。この力はrb.AddForce(0, 0, power * 0.05f, ForceMode.Impulse);として適用され、主にz軸方向に影響します(ゲームの設定によりますが、通常は前方向です)。ForceMode.Impulseは、瞬間的な力を加えるために使用されます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DragToMove : MonoBehaviour
{
    private float power;
    public Rigidbody rb;
    private float startPos;
    private float endPos;
    private Vector3 pos;
    private Vector3 screenToWorldPointPosition;

    void Start()
    {
        power = 0;
    }

    void Update()
    {
        pos = Input.mousePosition;
        screenToWorldPointPosition = Camera.main.ScreenToWorldPoint(pos);
        Debug.Log(power);
        if (Input.GetMouseButtonDown(0))
        {
            startPos = pos.x;
        }
        if (Input.GetMouseButtonUp(0))
        {
            endPos = pos.x;
            power = endPos - startPos;
            rb = GetComponent<Rigidbody>();
            rb.AddForce(0, 0, power * 0.05f, ForceMode.Impulse);
        }
    }
}

このスクリプトは、マウスボタンが押された瞬間の位置を記録し、離された瞬間にその距離を計算してパワーとしてCubeに力を加えます。力を加えるためには、CubeにRigidbodyコンポーネントを追加する必要があります。

CubeにRigidbodyを追加

Cubeを選択し、Inspectorウィンドウで「Add Component」ボタンをクリックし、「Physics > Rigidbody」と検索して選択します。これにより、Cubeは物理法則に従って動くようになります。

スクリプトのアタッチ

最後に、作成したスクリプトをCubeにアタッチします。これは、スクリプトファイルを選択し、ドラッグ&ドロップでCubeのInspectorウィンドウに移動させることで行えます。

これで準備は完了です。プレイボタンを押してゲームを開始し、マウスでドラッグしてみてください。ドラッグの距離に応じてCubeが動くのを見ることができます。

まとめ

Unityでマウスドラッグの距離をパワー数値に変換してCubeを移動させる方法を学びました。このシンプルな例を通して、Unityの基本的な操作やスクリプティングに慣れることができます。この知識を基に、さらに複雑な動きやゲームの機能を開発してみてください。Unityは学ぶほどにその可能性を広げてくれるツールです。楽しんで学習を続けましょう!

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました