InputSystem版:UnityでのFireボタン連射サンプル資料

1. 概要

このサンプルでは、Unityの新しいInput Systemを利用し、ユーザーが「Fire」アクション(例:マウスクリックやキーボードのボタン)を押し続けた場合に、一定間隔(fireRateで指定)で弾を発射する機能を実現します。
InputActionを利用することで、従来のInput Managerよりも柔軟な入力設定が可能です。


2. サンプルコード

以下のC#スクリプトを作成し、対象のGameObjectにアタッチしてください。
このスクリプトは、インスペクタからInputAction(fireAction)を設定できるようになっています。
なお、InputActionの設定は、事前にInput Action Assetで「Fire」アクションを定義しておく必要があります。

using UnityEngine;
using UnityEngine.InputSystem;

public class RapidFireInputSystem : MonoBehaviour
{
    // 発射する弾のプレハブをインスペクタからアサイン
    public GameObject bulletPrefab;
    // 弾の発射位置となるTransformをインスペクタからアサイン
    public Transform firePoint;
    // 弾の連射間隔(秒)
    public float fireRate = 0.2f;

    // 次の発射可能な時間
    private float nextFireTime = 0f;

    // 新Input System用のInputAction。インスペクタから割り当てるか、コード上で初期化してください。
    public InputAction fireAction;

    private void OnEnable()
    {
        // InputActionを有効化
        if (fireAction != null)
        {
            fireAction.Enable();
        }
    }

    private void OnDisable()
    {
        // InputActionを無効化
        if (fireAction != null)
        {
            fireAction.Disable();
        }
    }

    void Update()
    {
        // fireActionが押されているかどうかを確認
        // InputAction.IsPressed()で入力状態を取得できます
        if (fireAction != null && fireAction.IsPressed() && Time.time >= nextFireTime)
        {
            Fire();
            nextFireTime = Time.time + fireRate;
        }
    }

    void Fire()
    {
        // bulletPrefabをfirePointの位置・角度で生成
        Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
    }
}

3. 使用方法

  1. スクリプトのアタッチ
    • 上記のスクリプトを「RapidFireInputSystem.cs」として保存し、シーン内の任意のGameObjectにアタッチします。
  2. 弾のプレハブの準備
    • 発射する弾のPrefab(bulletPrefab)を作成します。必要に応じて、一定時間後に自動削除する処理を追加してください。
  3. 発射位置の設定
    • 弾の発射位置を示すTransform(例:銃口オブジェクト)をシーン上に作成し、スクリプトのfirePointに割り当てます。
  4. InputActionの設定
    • 新Input System用のInput Action Assetを作成し、「Fire」アクションを定義します。
    • 作成したInput Action(fireAction)をスクリプトのインスペクタ上にドラッグ&ドロップするか、コード上で初期化してください。
    • 例えば、Keyboardのスペースキーやマウス左クリックに割り当てることが可能です。
  5. プロジェクト設定の確認
    • UnityのPackage Managerから「Input System」パッケージがインストールされていることを確認してください。
    • 必要に応じて、Project Settingsの「Active Input Handling」を「Both」または「Input System Package (New)」に設定します。

4. カスタマイズのポイント

  • 連射速度の調整
    fireRateの値を変更することで、弾の発射間隔を簡単に調整できます。値を小さくすれば連射速度は速くなります。
  • InputActionのイベント利用
    このサンプルではUpdate()内でIsPressed()を利用していますが、InputActionのperformedイベントやcanceledイベントを利用して、より洗練された入力管理も可能です。
  • 拡張機能の実装
    ・発射された弾に物理演算を適用するためにRigidbodyコンポーネントを使用する
    ・発射エフェクトやサウンドの追加
    ・弾のライフタイム管理や消滅処理の実装

この資料をもとに、新Input Systemを利用した連射機能を実装し、用途に合わせた拡張・カスタマイズを行ってください。

Input System,Unity

Posted by hidepon