はじめに
こんにちは!今回はUnityで「オブジェクトをクリックすると重力がオンになる仕組み」を一緒に作っていきます。Unityの初心者でも簡単にできるように、ステップバイステップで丁寧に説明しますよ!
この仕組みを使えば、クリックするだけでオブジェクトが自然に落ちる動きを作れます。例えば、パズルゲームでオブジェクトを特定のタイミングで落としたり、シミュレーションゲームでクリックで操作できる仕掛けを作ったりするのに役立ちます。
Unityを触ったことがないという方はコチラの記事から見てみてください!
1.3Dオブジェクトを配置
今回は3Dプロジェクトを開きます。まずは、必要なオブジェクトをシーンに配置していきます。
1. 平面(Plane)を作成
- ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
- メニューから「3D Object」→「Plane」を選びます。
これで、シーンに平面が追加されました。
2. Cube(キューブ)を作成
- 同じくヒエラルキーウィンドウで右クリックします。
- メニューから「3D Object」→「Cube」を選びます。
これで、シーンにキューブが追加されました。
3. キューブに物理特性を追加
キューブに物理演算を適用するために、リジッドボディ(Rigidbody)コンポーネントを追加します。
- キューブを選択します。
- インスペクター(Inspector)ウィンドウで「Add Component」をクリックします。
- 「Rigidbody」を検索して追加します。
- 「Use Gravity」のチェックを外します。
2. スクリプトを作成
次に、キューブをクリックしたときに重力をオンにするスクリプトを作成します。
- ヒエラルキーウィンドウで右クリックして「Create」→「C# Script」を選びます。
- スクリプトの名前を「ActivateGravity」に変更します。
- スクリプトをダブルクリックして開き、以下のコードを入力します。
① using UnityEngine;
- Unityのエンジンを使いますよという宣言です。
このおかげで、Unityで使える便利な機能(例えばRigidbodyなど)が使えるようになります。
② public class ActivateGravity : MonoBehaviour
- このスクリプトの名前を決めています。
ActivateGravity
というクラスを作り、UnityのMonoBehaviour
(基本的な動作を管理するもの)を使っています。
これにより、このスクリプトをゲームオブジェクトに貼り付けられるようになります。
③ private Rigidbody rb;
- Rigidbody(物理演算の機能)を操作するための変数を作っています。
private
とあるので、このスクリプトの中だけで使う専用の変数です。
④ void Start()
- **ゲームが始まったときに1回だけ実行されるメソッド(関数)**です。
ここでは、初期設定を行います。
中身:
rb = GetComponent<Rigidbody>();
- このオブジェクトに付いているRigidbodyを探して、変数
rb
に入れています。
Rigidbodyを操作する準備をしているんですね。
rb.useGravity = false;
- 重力を無効にしています。
つまり、最初はこのオブジェクトが重力で落ちないように設定しています。
⑤ void OnMouseDown()
- **オブジェクトがクリックされたときに呼ばれるメソッド(関数)**です。
Unityには、このように特定の動き(イベント)に合わせて自動的に呼び出される関数がいくつかあります。
中身:
rb.useGravity = true;
- 重力をオンにしています。
これによって、オブジェクトが物理的に落下するようになります。
全体の動き
- ゲーム開始時:
- スクリプトをつけたオブジェクトは、最初に重力を無効化(
useGravity = false
)されます。つまり、空中で止まった状態です。
- スクリプトをつけたオブジェクトは、最初に重力を無効化(
- クリック時:
- オブジェクトをクリックすると、重力が有効化(
useGravity = true
)されます。これで、オブジェクトが下に落ちる動きが始まります。
- オブジェクトをクリックすると、重力が有効化(
using UnityEngine;
public class ActivateGravity : MonoBehaviour
{
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
// 初期状態では重力を無効にします
rb.useGravity = false;
}
void OnMouseDown()
{
// オブジェクトがクリックされたら重力をオンにします
rb.useGravity = true;
}
}
このスクリプトでは、キューブがクリックされたときにリジッドボディの重力をオンにします。
スクリプトをキューブにアタッチ
作成したスクリプトをキューブにアタッチします。
- ヒエラルキーウィンドウでキューブを選択します。
- プロジェクトウィンドウから「ActivateGravity」スクリプトをドラッグ&ドロップしてキューブにアタッチします。
プレイしてみよう!
すべての準備が整いました!今度はシーンを再生して、キューブをクリックしてみてください。キューブがクリックされると、重力がオンになって落下するはずです。
これで完成です!Unityでオブジェクトをクリックすると重力がオンになる仕組みを作る方法がわかりましたね。ぜひ他のオブジェクトでも試してみてください!
よくある質問
- QRigidbodyがありませんと表示される場合は?
- A
ヒエラルキーウィンドウでキューブを選択し、インスペクターの「Add Component」をクリック。検索バーに「Rigidbody」と入力して追加してください。
- Q他のオブジェクトでも動作しますか?
- A
もちろんです!スクリプトをアタッチするオブジェクトにRigidbodyが付いていれば動作します。
- Qこの仕組みは2Dオブジェクトでも使えますか?
- A
2Dの場合は「Rigidbody」ではなく「Rigidbody2D」を使用してください。また、コード内の
useGravity
をgravityScale
に変更して制御します。