상품 설명
■ SRPG の戦闘が「殴って終わり」になっていませんか
自軍が敵を攻撃する。ダメージが出る。反撃が返ってくる。……その繰り返しだけだと、マスの上で誰をどこに置くかという「配置の面白さ」が戦闘に出てきません。
攻撃される側にも選択肢があれば、戦闘は駆け引きに変わります。
「反撃する? 防御して耐える? それとも回避に賭ける?」
「隣の味方を呼んで一緒に殴る?」
「前に出て、あの子の代わりに攻撃を受ける?」
このアセットは、その一連の駆け引き——**攻撃 → 受け手のリアクション → 周りの仲間の加勢 → 庇い → 反撃**——を丸ごと引き受けるモジュールです。
■ できること
●リアクション(反撃・防御・回避)
攻撃を受けた側が行動を選びます。防御なら被ダメージが減り、回避なら相手の命中率が下がり、反撃なら殴り返します。
●リアクションはデータで増やせます
「反撃/防御/回避」は列挙型ではなく ScriptableObject です。被ダメージ倍率・命中率補正・反撃の有無という 3 つの数字を決めるだけで、「パリィ(被ダメ半減+命中−10+反撃)」のような独自リアクションが **コードを一行も書かずに** 増やせます。ユニットごとに違うリアクション一覧を持たせれば、「重装兵は回避できない」「盾持ちだけがパリィできる」といった差別化もデータだけで表現できます。
●支援攻撃/支援反撃(最大 4 名)
周囲にいる仲間が加勢します。攻撃側にも防御側にも付き、主攻撃のあと・反撃の列に加わって順番に攻撃します。
●支援防御=庇い
仲間が前に滑り込み、身代わりになって攻撃を受けます。庇い手には防御リアクションが適用され、**続く支援攻撃も受け切ってから持ち場に戻ります**(主攻撃の直後に戻すと、後続の攻撃が守ったはずの相手へ素通りしてしまうためです)。
●戻れる選択
リアクション → 反撃手段 → 支援反撃 → 庇い手、と選択が進みます。いつでも 1 つ前に戻れ、**選択肢が無くて自動で飛ばされた段階は、戻るときも飛ばされます**。「キャンセルしたら選べない画面に戻ってしまった」という詰みが起きません。加勢の選択も「仲間を選ぶ → その仲間の武器を選ぶ → 取り消せる」を上限まで繰り返せます。
●交戦前の予測
誰が誰を何%で殴るのかを一覧で返します。確認パネル・行動予告・AI の損得計算にそのまま使えます。**表示に使う数字と実際に振られる数字は同じ計算から来ている**ので、「80% と出ていたのに当たらない」という食い違いが構造的に起きません。
●AI の自動編成
庇い手・リアクション・反撃手段・支援反撃を自動で決めます。手で選んだ場合とまったく同じ形(CombatExchange)に落ちるので、敵の連携も味方 NPC の連携もオート戦闘も、以降は同じ経路を通ります。
■ 導入は 3 ステップ
【1】ユニットに IReactiveUnit を実装する
public class MyUnit : MonoBehaviour, IReactiveUnit
{
public int TeamId => team; // 同じ値どうしが味方
public Vector3Int Cell => cell; // Tilemap 座標でも自前の座標でも可
public bool IsActive => hp > 0;
public int AssistRadius => moveRange; // この距離の仲間が加勢できる
// …ほか、HP とステータスと攻撃手段を返すだけ
public void ApplyDamage(int amount, in AttackOutcome outcome) { hp -= amount; }
}
既存のキャラクタークラスを書き換えたくない場合は、薄いアダプタを作って中身を委譲すれば十分です。
【2】交戦を組み立てる
var exchange = CombatExchange.Create(attacker, weapon, defender);
AssistAutoPlanner.PlanSupportAttacks(exchange, registry, AssistQueryOptions.Default);
AssistAutoPlanner.PlanDefense(exchange, registry, AssistQueryOptions.Default, policy, defendReaction);
【3】実行する
yield return runner.Run(exchange);
演出を挟まず一瞬で解決したい場合(AI の先読み・オート戦闘・バランス調整)は ExchangePipeline.RunImmediate を呼ぶだけです。同じ順序・同じ計算が使われます。
■ 既存の戦闘システムを作り直す必要はありません
「もうダメージ計算は自分で作ってある」という方こそ対象です。
IExchangeHitResolver を実装すれば、本アセットの計算式は一切使われません。借りるのは **リアクション・庇い・連携の進行** だけです。
public override AttackOutcome Resolve(in AttackContext context)
{
int damage = MyCombat.Calculate(context.Attacker, context.Target, context.Option);
return new AttackOutcome { IsValid = true, Damage = damage, HitChance = 90 };
}
演出も同様です。攻撃の各手は「まだ確定していない攻撃」として渡され、**着弾の瞬間に Commit() を呼ぶとそこでダメージが確定します**。カメラ・モーション・エフェクトはあなたのゲームのものをそのまま使えます。
■ 実演シーンを同梱
メニュー 1 クリックでシーンを構築し、再生するだけで 14 場面が字幕付きで自動再生されます(操作不要・無限ループ)。
通常攻撃/反撃/防御(軽減量の表示)/回避(命中率が下がる様子)/支援攻撃/支援反撃/庇い/庇い手が支援攻撃まで受け切る様子/反撃の順序/本体が倒れたときの打ち切り/選択の戻り/加勢の取り消し/独自リアクション/AI 自動編成——を、目で見て確認できます。
デモのソースはそのまま導入コードの見本にもなっています。外部素材はゼロで、図形はコード生成、文字は OS フォント参照です。
■ 動作環境
・Unity 2022.3 LTS 以降
・追加パッケージ不要(DOTween 等の外部プラグインにも依存しません)
・Input System はどちらの設定でも動作します(入力を一切使いません)
・2D / 3D どちらでも動作します
■ 収録内容
・Runtime(本体)… リアクション定義・交戦の組み立てと進行・連携候補の探索・選択状態機械・AI 自動編成・予測・命中/ダメージ計算・演出差し込み口
・Samples … 最小構成のコード例 4 本(ユニット実装/武器実装/導入の最短形/選択 UI の例)
・Demo … 実演シーン一式(メニューから自動生成。削除しても本体に影響しません)
・動作確認メニュー … 102 項目の自己診断をその場で実行できます
・README(日本語/英語)
・フルソース付属。改変して組み込めます
■ よくある質問
Q. UI は付いていますか?
A. 付いていません。選択の状態機械と、確認パネルに必要な予測データを提供します。ボタンやパネルはご自身のデザインで作ってください(Samples に IMGUI の例があります)。
Q. ヘックスグリッドでも使えますか?
A. 距離はマンハッタン距離/チェビシェフ距離から選べます。ヘックスの場合は距離計算を差し替えてください(1 箇所です)。
Q. 移動やターン進行も含まれますか?
A. 含まれません。「1 回の交戦」に特化したモジュールです。移動・ターン管理・勝敗判定はご自身のものをお使いください。
Q. 経路探索や射線判定は?
A. 含まれません。距離と射程のみを見ます。
Q. ネットワーク対戦に使えますか?
A. 同期の仕組みは含まれません。乱数源を差し替えれば決定的に再生できますが、同期はご自身で実装が必要です。
■ ライセンス
購入者ご自身の商用・非商用プロジェクトでご利用いただけます。アセット単体での再配布・販売はご遠慮ください。
모든 리뷰
더보기리뷰 등록
리뷰를 작성하려면 로그인이 필요합니다.
로그인하고 리뷰 쓰기