
1 実現したい機能:シールドスキルを作成する。ヒーローが【シールド】スキルを取得した際、そのシールドは1回のダメージをブロックできる。シールドには耐久値(1〜3)があり、耐久値が0になると、再びヒーローにダメージを与える。
2 多くの遠回りをしました。このロジックには複雑な操作が必要だと考えていたのです。GDコードを試したり、シールド用の独立した当たり判定ボックスを作成したり、新しいシールドオブジェクトを新規作成してダメージを個別に計算したり、当たり判定の状態をオンオフしたりしました。3日間の試行錯誤と考察の結果、AGMの強力な自動ダメージメカニズムを活用すれば、たった1つの操作でこれらの複雑そうに見える构想が実現できることがわかりました。
3 まず原理について説明します。AGMの自動ダメージ検出と、AGM独自の被撃判定ボックスを組み合わせることで、実質的に「anystate(任意の状態)」またはフレームごとの攻撃検出が実現されます。つまり、どのようなアクションを実行中であっても、被撃すると自動的にダメージ軽減やHP減少がトリガーされます(他のアクションと競合しません)。同時に、VS(Variable System)を使って手動で被撃条件アクションを設定した場合、この自動被撃は機能しなくなり、手動操作が優先されます。一方、手動操作の条件がトリガーされない場合、この自動被撃検出は自動的に有効になり、機能します。(このメカニズムはまさに神懸かり的です!
)
4 結果を直接示します:
(1)シールド変数(例えば3)を作成し、次のようなアクション条件を書くだけです:【シールド】> 0の場合、被撃時にシールドを1減らす。(これだけです。非常にシンプルで、非常に直接的です!!!!これ以上の余計な操作は不要です。)
(2)AGMは、シールドが0より大きい場合、自動HP減少を実行せずに、シールドを1減らす操作を優先して実行します。そして、シールドが0になると、自動ダメージがすぐに再び機能し始めます!
(3)シールドにクールダウン(CD)を設定したい場合は、シールドが被撃した際に、さらに0.5秒間のループ処理を追加できます。
実は私のVS設計は完全ではありません。これによりシールドと自動ダメージ軽減のシームレスな切り替えは実現しましたが、実際に実行すると、シールド-1の内部ループが解除されず、シールドは0になった後も減少し続けます。しかし、致命的な欠陥ではなく、機能の完璧な実現には十分です。後で最適化すればよいでしょう。
まとめ:「大巧若拙、大智若愚」。AGMを使い始めて1年、多くのユーザーがAGMの操作が不合理で煩雑、巧みさに欠けると不平を言っているのをよく見てきました。しかし、今回はAGMのある原理を深く研究したことで、その使いやすさと利便性を心から感じました。ここでAGMを称賛したいと思います。この設計は本当に素晴らしいです!


