AIゲーム制作ラボ

Unityボス予告の作り方:砲座破壊で攻撃予約を取り消す

救助ゲーム「灰都の救難艇」の巡洋艦を例に、予告する砲座と攻撃範囲の固定、中断中の時間停止、破壊と被害が同じTickで起きる処理順を解説。C#サンプルと実入力による二つの攻略結果を掲載します。

Libra

公開 2026年10月1日

この記事の要点3項目

予告開始時に砲座と空域を固定する。 予告後の追尾を止め、表示と被害の判定に同じ矩形を使う。

残り2つの要点を読む
  • 砲座の破壊を被害より先に判定する。 同じTickで実弾が砲座を壊したら、その砲座の攻撃予約を取り消す。
  • 砲座を残して退避する攻略と、先に砲座を壊す攻略を確認。 単純な牽引を持ち込むと必須カプセルを失った。
目次8章
検証した環境最終確認 2026年10月1日
  • Unity 6000.6.0f1 / WebGL / Codex制作のv1.0.1
  • 独立Core: Windows / .NET SDK 10.0.401 / 60Hz固定刻み

書いてあるのは、この環境で実際に試した結果です。ツールの仕様や料金は変わるので、重要な判断の前には公式の情報も確認してください。

予告を出した砲座が壊れたら、予約していた攻撃も取り消します。 私が制作している救助ゲーム「灰都の救難艇」の最終任務では、双砲座の巡洋艦が航路を封鎖します。艇が外へ逃げるだけでなく、牽引中のカプセルも予告された空域から出す必要があります。

この記事はv1のボス予告と取消のCoreの作り方です。汎用の敵AIやアニメーション全体を説明するものではありません。ゲームを直接遊ぶか、操作と制作意図を見るから開始できます。最終任務は前の二つの任務を救助すると解放されます。

灰都の救難艇の巡洋艦が西側の航路を金色で予告し、艇はその外側へ退避している
375px幅の実画面。金色の空域はこの予告で固定した範囲。空域、残り時間、砲座の耐久はCoreから描く。

C#サンプルで三つの操縦を再現する

Coreと検査操縦のZIPを展開し、.NET 10 SDKで実行します。画面・素材・音は含みません。

dotnet run --project HaitoSample.csproj -c Release
展開したサンプルの出力から抜粋成功
Boss direct tow Lost health 2 rescued 0 seconds 8.65004 damage 6
Boss flank tow Won health 5 rescued 2 seconds 58.382614 damage 0 turrets 8,8
Boss turret-first Won health 3 rescued 2 seconds 60.465916 damage 2 turrets 0,0
Checks 69

上の時間は固定刻みの検査操縦です。人の初見プレイ時間ではありません。Program.csには、従来の牽引経路を持ち込む操縦、冷却を待って外側を通る操縦、砲座を壊してから救助する操縦を入れています。

予告を始めるときに、攻撃元と空域を決める

  1. 手順 01

    見張り

    2.5秒

  2. 手順 02

    予告

    1.6秒・範囲固定

  3. 手順 03

    砲撃

    2.4秒

  4. 手順 04

    冷却

    3.5秒

発射までの待ち時間だけでなく、攻撃できない冷却時間も救助の判断に使う。

開始位置では敵を動かさず、艇が警戒域のY9より北へ進んだら見張りを始めます。予告開始時には、生きている砲座のうち艇に近い方を選び、その砲座番号をReservedGunに保存します。左側・右側・中央のどこにいるかでReservedAreaも固定します。

ReservedGun = Guns[0].Health > 0 &&
    (Guns[1].Health <= 0 ||
     (Guns[0].Position - Ship).Length <= (Guns[1].Position - Ship).Length)
    ? 0 : 1;
ReservedArea = Ship.X < 7
    ? new Block(3.5f, 8, 3.5f, 22)
    : Ship.X > 18 ? new Block(18, 8, 3, 22)
                  : new Block(7, 18, 11, 12);
Reservation++;
Blockade = BlockadePhase.Warning;
BlockadeClock = 1.6f;

この後に艇が動いても範囲を追いかけません。艇を空身で使って予告を誘い、冷却に入ってから拾うという攻略が成立します。描画も別の範囲を計算せず、ReservedAreaをそのまま使います。見えている危険と実際の被害をずらさないためです。

同じTickの砲座破壊を、被害より先に処理する

重要なのは、予告の状態が進むことと、被害の適用を分ける順番でした。

AdvanceBlockade(dt);    // 予告から砲撃へ進む可能性がある
Combat(dt);            // 実弾を動かし、砲座の耐久を更新する
ValidateReservation(); // 壊れた砲座の予約を取り消す
ApplyBlockade();       // 残っている有効な予約だけ被害を出す

砲座を壊した直後にも予約が残っていれば、その一手で相打ちになります。そこで実弾の処理後に再度検査します。ReservedGunが壊れていたら番号を−1にし、取消回数を増やし、冷却へ進めます。両方が壊れた場合はDisabledにして封鎖を終了します。

if (ReservedGun >= 0 && Guns[ReservedGun].Health <= 0)
{
    ReservedGun = -1;
    CancelledReservations++;
    Blockade = BlockadePhase.Recovery;
    BlockadeClock = 3.5f;
}

独立Coreでは、実際に移動した弾が砲座を壊す条件を用意し、同じTickの封鎖被害を受けないことを確認しました。ブラウザでもPC・375pxの実入力で砲座を先に破壊し、どちらも予約取消1回、両砲座の耐久0、艇耐久3・損傷2で全2個を救助しました。所要時間は60.49925秒と60.93258秒です。予約取消の数字だけを、無傷だったという意味には使いません。

ただし、この「空域内に止まって撃つ」操縦がいつも成功するわけではありません。追加の375px実入力では18.39989秒で艇を失い、二つ目の砲座は耐久1、中央空域の砲撃中でした。敵の耐久を下げず、予告されている中央と側方の空域を見て、その外へ移りながら撃つ操縦も確認しました。PC64.94939秒・375px65.16611秒で全員救助、両幅艇耐久3・損傷2です。固定刻みで成功する操縦を、そのまま人に安全な攻略として保証しません。

中断は残り時間だけでなく予約全体を止める

Tickの入口はPhase.Active以外なら処理を返します。停止中も描画は続きますが、ゲーム時刻・予告時間・砲座番号・範囲を更新しません。予告の点滅や着弾の演出にもゲーム時刻を使い、停止中だけ外見が進むことを避けました。

PCと375px幅で予告中に中断し、時間を置いても時刻・予約番号・予告残り時間が変わらないことを確認しました。再開後は同じ予約から続きます。両砲座を破壊した成功から「出動する」を押すと、同じ任務の艇耐久5、救助0、砲座8/8、予約番号0へ戻ることも検査しています。

短い封鎖では、以前の攻略がそのまま通った

01

ボスを置いても判断が増えていなかった

症状
最初の短い封鎖では、従来の大回りで48.93276秒・艇耐久5・損傷1の成功になった。
原因
左右の航路のY8〜18だけを1.2秒封鎖し、予告を読まずに通過できる範囲だった。
対処
外側の退避路を残して封鎖範囲を長くし、冷却を待つ接続と砲座先行破壊の二つの有効攻略を比較した。

封鎖を広げるだけでは逃げ場がなくなります。左右の予告空域のさらに外に航路を残し、未接続カプセルは固定具で保護しました。何もせずに待っている間に救助対象が壊れないようにし、拾う時機と拾ってからの航路を判断にしています。

先に砲座を壊す攻略は被害を受けますが、その後の封鎖が消えます。砲座を残す攻略は無傷で成功でき、救助を優先できます。固定盤面で二つの有効な操縦を確認した結果であり、全攻略を列挙したわけではありません。人の初見難度とスマホ実機での操作感は未評価です。

まとめ

  • 予告の開始時に砲座と空域を固定し、そのデータから危険範囲を描く。
  • 実弾で砲座の耐久を更新した後に予約を検査し、残る攻撃だけ被害を適用する。
  • 以前の経路が通るかと、複数の有効な攻略があるかを分けて比較する。

よくある質問

よくある質問

予告中も自機を追尾しますか?

本作では追尾しません。予告開始時の艇の位置から空域と砲座を選び、砲撃が終わるか砲座を破壊するまで固定します。

中断中に予告の残り時間は減りますか?

減りません。CoreのTickを進めず、ゲーム時刻・予告時間・予約番号・範囲を保持します。予告演出もゲーム時刻で描きます。

ボスを倒さなくても成功できますか?

できます。冷却を待って接続し、封鎖される航路の外側を通る攻略で、両砲座を耐久8のまま残して2個を救助し帰還しました。

砲座を壊した後も一度だけ被弾することはありませんか?

実弾の移動と砲座の耐久更新後に予約を検査し、その後に封鎖の被害を適用します。破壊した同じTickでその砲座の被害が残らない条件を独立Coreで確認しました。

出典

出典

  1. 01.NET 10.0 のダウンロードMicrosoft2026-10-01にSDKの用途とWindows向け10.0.401を確認。配布Coreの展開実行に使用した。

この記事は役に立ちましたか?

関連記事