상품 설명
SRPGの「範囲攻撃まわり」を丸ごと引き受けるC#モジュールです。
範囲攻撃を自作すると、だいたいこうなります。
・形状を1つ足すたびに、攻撃処理のif分岐が増えていく
・味方を巻き込むかどうかの制御が、攻撃ごとにベタ書きになる
・同時攻撃なのに、先に処理した側だけが有利になってしまう
・同じ敵に3発当たると、ダメージ数字が重なって読めない
・「追撃」を足したくても、既存の攻撃処理のどこに挟めばいいか分からない
本アセットは、これらをまとめて引き受けます。
あなたのユニットクラスにインターフェースを1つ実装するだけで導入できます。
━━━━━━━━━━━━━━━━━━━━
■ 7種類の範囲形状
━━━━━━━━━━━━━━━━━━━━
範囲の形はすべてScriptableObjectとして作成し、インスペクタで調整します。
・単体 … 単体攻撃も「形状の1種」。範囲攻撃と同じ処理を通るので分岐が消えます
・円形 … 距離の測り方を変えるだけで 菱形/正方形/真円 を作り分け。最小半径を1にすればリング状に
・十字 … +型/×型/8方向星型。腕の長さ・太さを調整可能
・直線 … 貫通レーザー・戦列艦の斉射。障害物に当たった時点で弾道を打ち切れます
・扇形 … ブレス・散弾・機銃掃射。角度ではなく「1歩ごとの広がり」で定義するため、グリッド上で狙い通りの形になります
・マス指定 … いわゆるマップ兵器。幾何式では書けない形を、インスペクタでマスを並べて手描き
・合成 … 上記をUnion/Intersection/Differenceで組み合わせ(例:正方形から十字を引く)
新しい形状が必要になっても、本体コードの改変は不要です。
基底クラスを継承してメソッドを1つ書けば、そのままインスペクタに現れます。
━━━━━━━━━━━━━━━━━━━━
■ 誰を巻き込むかの制御
━━━━━━━━━━━━━━━━━━━━
・フレンドリーファイア … 敵/味方/中立/自分自身の4つのチェックで指定
・遮蔽 … 範囲内でも障害物の陰にいる対象は自動的に除外(マス走査/Raycastの2実装を同梱)
・対象数の上限 … 「範囲内から最大3体だけ」を優先順位付きで(近い順/残HPが少ない順など)
・タグ条件 … 「対空兵装は飛行ユニットにのみ有効」などをタグ文字列で表現
・距離減衰 … 爆心地からの距離によるダメージ減衰をAnimationCurveで設計
━━━━━━━━━━━━━━━━━━━━
■ バッチ判定パイプライン
━━━━━━━━━━━━━━━━━━━━
「全ヒットを先に確定してから、一斉に適用する」という2段構えです。
これにより、次の3つが同時に手に入ります。
1. 同時攻撃で相打ちが正しく成立する(先に処理された側が有利になりません)
2. 同一対象への複数ヒットが1つの数値に合算される(ダメージ数字が重なりません)
3. 適用前に結果を覗ける(「追撃が3件来る」と分かってからカメラと尺を組み立てられます)
また「この攻撃ではHPを0にしない(必ず1残す)」フラグを用意しています。
一斉射撃で、捕獲予定の敵をうっかり倒してしまう事故を防ぐ安全弁です。
━━━━━━━━━━━━━━━━━━━━
■ マルチターゲット指名・連携技
━━━━━━━━━━━━━━━━━━━━
「対象をN回自由に指名する」タイプの技を実装できます。同じ相手を複数回選べるので、
1体に集中させて確実に沈めるか、3体へばら撒いて足並みを崩すか
というプレイヤーの判断が生まれます。選択状態はイベント駆動の純粋な状態機械として提供されるため、
バッジ表示やSEは購読するだけで配線できます。
さらに「近くに特定の仲間が居るときだけ発動できる連携技」の条件も定義できます。
・専用グループ型 … 決まった顔ぶれ同士でのみ成立する固有技
・資格+条件型 … 「隊長格を中心に、条件を満たす仲間がN人以内に居れば発動」
相方は既定では「その場に居るだけでよく、自分の行動を消費しない」設計です。
━━━━━━━━━━━━━━━━━━━━
■ 追撃(Follow-up)
━━━━━━━━━━━━━━━━━━━━
「初期攻撃 → 条件判定 → 追撃キュー生成 → 順次実行」をパイプライン化しています。
条件はScriptableObjectとして5種類を同梱。
速力差/HP閾値/タグ/確率/初撃の結果(命中・外れ・クリティカル・撃破・非撃破)
AND・ORで組み合わせられ、連鎖の最大段数を指定できるので暴走しません。
独自の条件(「背後から攻撃したとき」など)も、継承1クラスで追加できます。
━━━━━━━━━━━━━━━━━━━━
■ 演出のテンポを作れる進行役
━━━━━━━━━━━━━━━━━━━━
「予兆 → 発射 → 着弾 → 追撃」を、コルーチンで“間”を置きながら流します。
待ち時間はすべてインスペクタから調整できるため、コードを触らずにテンポを詰められます。
イベント(開始/1発ごと/ダメージ適用/追撃開始/完了)が用意されているので、
マズルフラッシュ・カメラワーク・ダメージ数値表示は購読するだけで繋がります。
━━━━━━━━━━━━━━━━━━━━
■ 導入は3ステップ
━━━━━━━━━━━━━━━━━━━━
【1】自分のユニットクラスにインターフェースを実装する
public class MyUnit : MonoBehaviour, IAoEAffectable
{
public GridCoord Cell => tilemap.WorldToCell(transform.position);
public int TeamId => teamId;
public int CurrentHealth => hp;
public CombatStats Stats => stats;
// アセットはHPを直接書き換えません。必ずこの2つを呼ぶだけです
public void ApplyDamage(int amount, in HitOutcome o) { hp -= amount; PlayHitEffect(); }
public void ApplyMiss(in HitOutcome o) { PlayDodgeEffect(); }
}
【2】初期化する
runner.Configure(
targets: registry,
relations: new TeamRelationResolver(),
lineOfSight: new GridLineOfSight(cell => walls.HasTile(cell.ToVector3Int())),
cellValidator: cell => board.Contains(cell));
【3】撃つ
StartCoroutine(runner.ExecuteAreaAttack(attacker, bombAttack, clickedCell));
対象決定 → 命中判定 → ダメージ適用 → 追撃まで、演出の“間”つきで自動的に流れます。
━━━━━━━━━━━━━━━━━━━━
■ ダメージ計算式は丸ごと差し替えられます
━━━━━━━━━━━━━━━━━━━━
標準的な命中率・ダメージ計算を同梱していますが、インターフェースを1つ実装するだけで
完全に置き換えられます。その場合も、範囲判定・バッチ処理・追撃パイプラインはそのまま動作します。
既存の戦闘システムをお持ちの方は、計算部分はご自身のコードのまま、
「範囲まわり」だけを本アセットに任せる、という使い方ができます。
攻撃1種ごとに計算式を変えることも可能です(魔法だけ別式にする等)。
━━━━━━━━━━━━━━━━━━━━
■ 実演デモシーンを同梱しています
━━━━━━━━━━━━━━━━━━━━
上の動画と同じものが、購入後はあなたの環境で動きます。
メニューを1回押すだけでシーンごと自動生成され、あとは再生ボタンだけで16機能が自動再生されます。
パラメータをその場でいじって挙動を確かめられるので、
「自分のゲームに合うか」をコードを書く前に判断できます。
デモのソースは、そのまま導入コードの見本にもなっています。
初期化処理・範囲プレビューの出し方・ダメージ数値の表示方法が、実際に動く形で読めます。
デモは外部アセットを一切使っていません(図形はすべてコード生成、画像・音声・フォントファイルは0個)。
確認が済んだらフォルダごと削除できます。本体には一切影響しません。
━━━━━━━━━━━━━━━━━━━━
■ 動作環境
━━━━━━━━━━━━━━━━━━━━
・Unity 2022.3 LTS 以降
・追加パッケージ不要(DOTween等のプラグインも不要)
・Input Systemはどちらの設定でも動作します
・2D/3Dどちらのプロジェクトでも動作します(グリッド実装に依存しません)
・専用のAssembly Definitionで隔離されているため、既存コードと名前空間・クラス名が衝突しません
━━━━━━━━━━━━━━━━━━━━
■ 収録内容
━━━━━━━━━━━━━━━━━━━━
・C#ソースコード一式(難読化なしのフルソース)
・Assembly Definition(Runtime/Demo/Samples)
・実演デモシーン(メニュー1クリックで構築・16機能を自動再生)
・動作確認用の最小構成サンプル3種
・README(日本語版・英語版)/デモ専用README(日本語版・英語版)
XMLドキュメントコメントとインスペクタのツールチップは、すべて日英併記です。
関数の意図・設計理由・注意点をコード内で読めるため、
「買ったはいいが使い方が分からない」を極力なくしています。
━━━━━━━━━━━━━━━━━━━━
■ よくあるご質問
━━━━━━━━━━━━━━━━━━━━
Q. ヘックスグリッドでも使えますか?
A. 座標型はグリッド実装に依存しないため使用できます。ただし同梱の幾何形状(円形・十字・扇形など)は
正方グリッド前提の計算です。ヘックス用の形状は継承1クラスで追加してください。
Q. 既存の戦闘システムに後から組み込めますか?
A. 想定している使い方です。ダメージ計算は差し替えでき、HPの書き換えも必ずあなたのコードを経由します。
撃破演出・スコア加算・セーブなどの副作用は、すべてあなたの管理下に残ります。
Q. UIは含まれますか?
A. 含まれません。本アセットはロジック層に専念しています。
範囲プレビュー用のセル一覧・選択回数・命中率はすべて取得できるので、
お手持ちのUIへ繋いでいただく形になります。
Q. ノードベース(マス目のない)マップでも使えますか?
A. 各ノードに一意な整数IDを割り当てて座標へ詰めることで使用できます。
その場合は幾何形状ではなく、マス指定形状または独自形状をご利用ください。
Q. マルチプレイ/ネットワーク対応はしていますか?
A. していません。判定は単一クライアント上で完結する設計です。
ただし「判定」と「適用」が分離されているため、判定結果を送受信する構成には組み込みやすい作りです。
━━━━━━━━━━━━━━━━━━━━
■ ライセンス・サポート
━━━━━━━━━━━━━━━━━━━━
・個人・法人を問わず、商用利用可能です
・購入者ご本人のプロジェクトでご利用ください。ソースコードの再配布・素材としての転売はご遠慮ください
・不具合のご報告・ご質問はBOOTHのメッセージよりお願いいたします
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기