はじめに
Unityでマウスを長押ししている間にパワーをため、離したときにそのパワーを放出する仕組みを作ってみましょう。ここでは、簡単なスクリプトを使ってキューブを前方に飛ばす方法を解説します。
Unityを触ったことがないという方はコチラの記事から見てみてください!
シーンにオブジェクトを配置しよう
シーンにはキューブを置いて、これをパワーをためて動かすオブジェクトにします。
- ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
- メニューから「3D Object」→「Cube」を選びます。
- 同じように「3D Object」→「Plane」を選び、床を作成します。

Rigidbodyを追加する
- ヒエラルキーの「Cube」を選択します。
- インスペクター(Inspector)ウィンドウで「Add Component」ボタンをクリックして「Rigidbody」を追加します。
スクリプトを作成しよう
次に、キューブにパワーをためるスクリプトを作成します。
- プロジェクト(Project)ウィンドウで右クリックします。
- 「Create」→「C# Script」を選びます。
- スクリプト名を「ClickPower」に変更します。
スクリプトをダブルクリックして開き、以下のコードを入力します。
全体の説明
このスクリプトは、マウスのクリックに応じてオブジェクトに力を加えるものです。クリックしている間、力が徐々に増えていき、マウスを離すとその力を使ってオブジェクトを前方に押し出します。
各部分の説明
- using System.Collections; using System.Collections.Generic; using UnityEngine;
- これは、C#で使える標準の機能や、Unity特有の機能を使うための宣言です。
- public class ClickPower : MonoBehaviour
- ここでは
ClickPower
という新しいクラスを作っています。このクラスはMonoBehaviour
というUnityの基本的なクラスを継承しています。
- ここでは
- private float power;
- 力を表す
power
という名前の変数を作っています。この変数はクラスの中だけで使われます。
- 力を表す
- public Rigidbody rb;
- オブジェクトの物理的な動きを扱うための
Rigidbody
コンポーネントを保持する変数です。public
なので、Unityのインスペクターで設定できます。
- オブジェクトの物理的な動きを扱うための
- void Start()
- ゲームが始まると最初に呼ばれる関数です。ここでは
power
の初期値を0にしています。
- ゲームが始まると最初に呼ばれる関数です。ここでは
- void Update()
- 毎フレーム呼ばれる関数です。ここで、マウスの入力をチェックし、力を増やしたりオブジェクトを動かしたりします。
- if (Input.GetMouseButton(0))
- マウスの左ボタンが押されている間、
power
を少しずつ増やしています。
- マウスの左ボタンが押されている間、
- if (Input.GetMouseButtonUp(0))
- マウスの左ボタンが離された瞬間に実行されます。ここで
Rigidbody
コンポーネントを取得し、蓄積されたpower
を使ってオブジェクトに力を加え、前方に押し出します。そしてpower
を0にリセットします。
- マウスの左ボタンが離された瞬間に実行されます。ここで
- 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);
}
}
このスクリプトは、マウスの左ボタンを押している間にパワーをため、離したときにそのパワーを前方に放出する仕組みです。
スクリプトをアタッチする
作成したスクリプトをキューブにアタッチします。
- プロジェクト(Project)ウィンドウで「ClickPower」をドラッグします。
- ヒエラルキー(Hierarchy)ウィンドウの「PowerCube」にドロップします。
これでスクリプトがキューブにアタッチされました。
シーンを再生してみよう
これで準備完了です!シーンを再生して、マウスの左ボタンを長押ししてパワーをためてみましょう。離すと、キューブがそのパワーで前方に飛び出します。
よくある質問
- Qパワーの増加速度を変更するにはどうすればいいですか?
- A
power += 0.1f;
の部分を変更します。例えば、0.1f
を0.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);
とします。