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. 使用方法
- スクリプトのアタッチ
- 上記のスクリプトを「RapidFireInputSystem.cs」として保存し、シーン内の任意のGameObjectにアタッチします。
- 弾のプレハブの準備
- 発射する弾のPrefab(
bulletPrefab
)を作成します。必要に応じて、一定時間後に自動削除する処理を追加してください。
- 発射する弾のPrefab(
- 発射位置の設定
- 弾の発射位置を示すTransform(例:銃口オブジェクト)をシーン上に作成し、スクリプトの
firePoint
に割り当てます。
- 弾の発射位置を示すTransform(例:銃口オブジェクト)をシーン上に作成し、スクリプトの
- InputActionの設定
- 新Input System用のInput Action Assetを作成し、「Fire」アクションを定義します。
- 作成したInput Action(
fireAction
)をスクリプトのインスペクタ上にドラッグ&ドロップするか、コード上で初期化してください。 - 例えば、Keyboardのスペースキーやマウス左クリックに割り当てることが可能です。
- プロジェクト設定の確認
- 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を利用した連射機能を実装し、用途に合わせた拡張・カスタマイズを行ってください。
ディスカッション
コメント一覧
まだ、コメントがありません