UnityUnityメモ

Unityで簡単!クリック長押しでサイズが変わるボール発射システムの作り方

Unity

1. はじめに

Unityを使ってゲームを作りたいけど、どこから始めればいいか分からない…なんて思っていませんか?そんなあなたにぴったりのチュートリアルをお届けします!

今回作るのは、**「左クリックを押すとボールが発射され、クリックを押し続けるほどボールのサイズが大きくなる仕組み」**です。このシンプルだけど楽しい仕組みは、シューティングゲームやミニゲームなど、いろんなゲームに応用できますよ。

Unity初心者でも安心!スクリプトやプレハブの基本から丁寧に解説していきます。「なんか難しそう…」と思ったら、まずはこの記事を読み進めてみてくださいね。楽しく学びながら、Unityの基礎スキルを身につけちゃいましょう!

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



2. 準備

それでは、仕組みを作るための準備をしていきましょう!必要なものを揃えたら、あっという間に動く仕組みが完成しますよ。


Unityプロジェクトのセットアップ

まずはUnityプロジェクトを作成しましょう。

  1. Unityを起動し、「新しいプロジェクト」をクリックします。
  2. テンプレートは「3D」を選びます。
  3. プロジェクト名を「BallShooter」に設定し、保存場所を選んで「作成」ボタンを押します。

これでプロジェクトのセットアップが完了です!


必要なオブジェクトの作成

次に、クリックで発射される「ボール」と「空のオブジェクト」を作成します。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックし、「3D Object」→「Sphere」を選びます。
    • これでシーン内に球体(Sphere)が追加されます。
    • 球体の名前を「Ball」に変更しましょう(オブジェクトを選択してF2キーを押すと名前を編集できます)。
  2. 作成した球体をプロジェクト(Project)ウィンドウにドラッグ&ドロップします。
    • これで球体がプレハブとして保存され、再利用できるようになります。
  3. ヒエラルキーウィンドウで右クリック「Create Empty」を選び、空のオブジェクトを作成します。
    • 名前を「BallShooterManager」に変更しておきましょう。

Rigidbodyの追加

ボールを物理的に動かすために「Rigidbody」を追加します。

  1. プロジェクトウィンドウに保存した「Ball」プレハブをダブルクリックして開きます。
  2. インスペクター(Inspector)ウィンドウで「Add Component」をクリックし、「Rigidbody」を検索して追加します。
    • これにより、ボールに重力や物理的な動きが適用されます。

ここまでで、ボールを発射するための基本的な準備が整いました!次は、スクリプトを書いてこの仕組みを動かしていきますよ。準備万端ですね!



3. スクリプトの作成

準備ができたので、いよいよボールを発射するスクリプトを作っていきましょう!マウスの左クリックを検知してボールを発射し、クリックを押し続けた時間に応じてボールのサイズが変わる仕組みをスクリプトで実現します。


スクリプトを作成する

  1. プロジェクトウィンドウのScriptsフォルダ(ない場合は新しく作成)を右クリックします。
  2. Create」→「C# Script」を選び、スクリプト名を「BallShooter」とします。
  3. 作成したスクリプトをダブルクリックして開きます。

コードを記述する

以下のコードをスクリプトにコピーして貼り付けてください。

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

public class BallShooter : MonoBehaviour
{
    public GameObject prefab; // 発射するボールのプレハブ
    private float power; // ボールのサイズを調整するための変数
    private Vector3 mousePosition; // マウスの位置を記録するための変数

    void Start()
    {
        power = 0; // 初期のパワーを0に設定
    }

    void Update()
    {
        // 左クリックを押している間、パワーを増やす
        if (Input.GetMouseButton(0))
        {
            if (power < 5) // パワーの上限を設定(ここでは5)
            {
                power += 0.1f; // 少しずつ増やす
            }
        }

        // 左クリックを離したとき、ボールを発射
        if (Input.GetMouseButtonUp(0))
        {
            // プレハブから新しいボールを生成
            GameObject ball = GameObject.Instantiate(prefab) as GameObject;

            // カメラからマウスの位置に向かう方向を計算
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector3 dir = ray.direction;

            // ボールのサイズを調整
            ball.transform.localScale = new Vector3(power, power, power);

            // ボールに力を加えて発射
            ball.GetComponent<Rigidbody>().AddForce(dir * 2000);

            // パワーをリセット
            power = 0;
        }
    }
}

スクリプトのポイント解説

  1. power の増加
    • Input.GetMouseButton(0)を使って左クリックが押されている間、power を少しずつ増やします。
    • 上限値(5)を設定して制御しています。
  2. ボールの発射
    • Input.GetMouseButtonUp(0)を使って左クリックを離したタイミングでボールを生成し発射します。
    • ボールの大きさは transform.localScale で、力は Rigidbody.AddForce で設定しています。
  3. 方向計算
    • Camera.main.ScreenPointToRayでカメラの位置からマウスカーソルの方向を計算し、ボールがその方向に飛ぶようにしています。



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

スクリプトを書き終えたら、Unity内でスクリプトをオブジェクトにアタッチし、ボールを発射する仕組みを完成させましょう!


手順1: スクリプトをアタッチする

  1. ヒエラルキーウィンドウで「BallShooterManager」オブジェクトを選択します。
  2. プロジェクトウィンドウの「BallShooter」スクリプトをドラッグ&ドロップし、「BallShooterManager」にアタッチします。
    • スクリプトが正常にアタッチされると、インスペクターウィンドウに「BallShooter」スクリプトのフィールドが表示されます。

手順2: プレハブを割り当てる

スクリプトが動作するためには、ボールのプレハブをスクリプトに割り当てる必要があります。

  1. インスペクターウィンドウで「BallShooter」スクリプトの「Prefab」フィールドを確認します。
  2. プロジェクトウィンドウにある「Ball」プレハブを、「Prefab」フィールドにドラッグ&ドロップします。
    • この操作でスクリプトにボールの情報が渡されます。

これでスクリプトのアタッチは完了です!次はプレイモードで実行して、左クリックを使ったボール発射システムが正しく動作するか確認してみましょう!



5. 実行と確認

すべての準備が整ったら、いよいよシステムが正しく動作するかプレイモードでテストしてみましょう!


手順1: プレイモードを開始する

  1. Unityの上部にある「▶ Play」ボタンをクリックして、プレイモードを開始します。
  2. シーンビューがゲームビューに切り替わり、テスト環境が起動します。

これで、マウスクリックでボールを発射する仕組みのテストが完了しました!
このシステムを使えば、シューティングゲームやインタラクティブなミニゲームの制作がさらに楽しくなりますよ。
次は、この仕組みを応用したゲームの作成にチャレンジしてみましょう!




よくある質問 Q&A

Q
ボールが動かない原因は何ですか?
A

Rigidbodyコンポーネントがボールのプレハブに追加されているか確認してください。

Q
ボールが正しい方向に飛ばない場合は?
A

カメラが正しく配置されているか、Camera.main.ScreenPointToRayが正しく機能しているか確認してください。

Q
ボールの速度を調整する方法は?
A

スクリプト内のAddForceで使用している力の値(例:2000)を調整してください。

おすすめのアセット

Falling Ballsは、ボールを使ったシンプルで楽しいゲームテンプレートです。このアセットは、Unityでのゲーム開発を始めたばかりの方でも簡単に利用できるように設計されています。