UnityUnityメモ

Unityでマウスを押している間チャージしてパワーをためるしくみ

Unity

はじめに

Unityでマウスを長押ししている間にパワーをため、離したときにそのパワーを放出する仕組みを作ってみましょう。ここでは、簡単なスクリプトを使ってキューブを前方に飛ばす方法を解説します。

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

シーンにオブジェクトを配置しよう

シーンにはキューブを置いて、これをパワーをためて動かすオブジェクトにします。

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. メニューから「3D Object」→「Cube」を選びます。
  3. 同じように「3D Object」→「Plane」を選び、床を作成します。

Rigidbodyを追加する

  • ヒエラルキーの「Cube」を選択します。
  • インスペクター(Inspector)ウィンドウで「Add Component」ボタンをクリックして「Rigidbody」を追加します。



スクリプトを作成しよう

次に、キューブにパワーをためるスクリプトを作成します。

  1. プロジェクト(Project)ウィンドウで右クリックします。
  2. 「Create」→「C# Script」を選びます。
  3. スクリプト名を「ClickPower」に変更します。

スクリプトをダブルクリックして開き、以下のコードを入力します。

全体の説明

このスクリプトは、マウスのクリックに応じてオブジェクトに力を加えるものです。クリックしている間、力が徐々に増えていき、マウスを離すとその力を使ってオブジェクトを前方に押し出します。

各部分の説明

  1. using System.Collections; using System.Collections.Generic; using UnityEngine;
    • これは、C#で使える標準の機能や、Unity特有の機能を使うための宣言です。
  2. public class ClickPower : MonoBehaviour
    • ここでは ClickPower という新しいクラスを作っています。このクラスは MonoBehaviour というUnityの基本的なクラスを継承しています。
  3. private float power;
    • 力を表す power という名前の変数を作っています。この変数はクラスの中だけで使われます。
  4. public Rigidbody rb;
    • オブジェクトの物理的な動きを扱うための Rigidbody コンポーネントを保持する変数です。public なので、Unityのインスペクターで設定できます。
  5. void Start()
    • ゲームが始まると最初に呼ばれる関数です。ここでは power の初期値を0にしています。
  6. void Update()
    • 毎フレーム呼ばれる関数です。ここで、マウスの入力をチェックし、力を増やしたりオブジェクトを動かしたりします。
  7. if (Input.GetMouseButton(0))
    • マウスの左ボタンが押されている間、power を少しずつ増やしています。
  8. if (Input.GetMouseButtonUp(0))
    • マウスの左ボタンが離された瞬間に実行されます。ここで Rigidbody コンポーネントを取得し、蓄積された power を使ってオブジェクトに力を加え、前方に押し出します。そして power を0にリセットします。
  9. Debug.Log(power);
    • 現在の power の値をコンソールに表示します。デバッグ用です。

全体の動き

ゲームが始まると、まず power の値は0にリセットされます。プレイヤーがマウスの左ボタンを押し続けると、power の値が徐々に増えていきます。マウスの左ボタンを離すと、その時の power の値を使ってオブジェクトを前方に押し出します。そして、power は再び0に戻ります。

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

public class ClickPower : MonoBehaviour
{
    private float power;
    public Rigidbody rb;

    void Start()
    {
        power = 0;
    }

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            power += 0.1f;
        }
        if (Input.GetMouseButtonUp(0))
        {
            rb = GetComponent<Rigidbody>();
            rb.AddForce(0, 0, power, ForceMode.Impulse);
            power = 0;
        }
        Debug.Log(power);
    }
}

このスクリプトは、マウスの左ボタンを押している間にパワーをため、離したときにそのパワーを前方に放出する仕組みです。

スクリプトをアタッチする

作成したスクリプトをキューブにアタッチします。

  1. プロジェクト(Project)ウィンドウで「ClickPower」をドラッグします。
  2. ヒエラルキー(Hierarchy)ウィンドウの「PowerCube」にドロップします。

これでスクリプトがキューブにアタッチされました。



シーンを再生してみよう

これで準備完了です!シーンを再生して、マウスの左ボタンを長押ししてパワーをためてみましょう。離すと、キューブがそのパワーで前方に飛び出します。



よくある質問

Q
パワーの増加速度を変更するにはどうすればいいですか?
A

power += 0.1f;の部分を変更します。例えば、0.1f0.2fに変更するとパワーの増加速度が2倍になります。

Q
マウスの左ボタン以外のキーでパワーをためるにはどうすればいいですか?
A

Input.GetMouseButton(0)の部分を他の入力に変更すればできます。例えば、スペースキーの場合はInput.GetKey(KeyCode.Space)に変更します。

Q
パワーの最大値を設定するにはどうすればいいですか?
A

スクリプトに最大値のチェックを追加しましょう。例えば、powerが10を超えないようにするには以下のようにします。

if (power > 10)
{
    power = 10;
}
Q
パワーをためる方向を変えるにはどうすればいいですか?
A

rb.AddForce(0, 0, power, ForceMode.Impulse);の部分で、AddForceのパラメータを変更します。例えば、上方向に飛ばすにはrb.AddForce(0, power, 0, ForceMode.Impulse);とします。