ダメージ計算式を作りたい。でも、どうやって実装すればいいか分からない。
多くの学生が最初に感じるのが、この疑問です。
実は、ダメージ計算式には、いくつかのパターンがあります。
この記事では、ダメージ計算式の作り方について、固定・割合・防御計算まで完全まとめます。
✨ この記事でわかること
- 固定ダメージの計算方法
- 割合ダメージの計算方法
- 防御計算の実装方法
- アクションゲーム向けのダメージ処理パターン

ダメージ計算式は、ゲームのバランスに大きく影響します。まずは、基本的なパターンから始めましょう。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
固定ダメージの計算方法

固定ダメージは、最もシンプルなダメージ計算式です。
以下のコードで、固定ダメージが実装できます。
|
1 2 3 4 5 |
int CalculateDamage(int attackPower) { return attackPower; } |
このコードで、攻撃力そのままのダメージが計算されます。
固定ダメージは、ダメージに影響する変数が攻撃力だけなので、数値調整が直感的に行えます。
ダメージが強すぎる場合は攻撃力を下げ、弱すぎる場合は上げるだけで調整が完結します。
割合ダメージや防御計算のように複数の数値が絡まないため、ゲーム全体のバランスを崩しにくいのが特徴です。

特に、アクションゲームの通常攻撃や序盤の敵には、固定ダメージが向いています。
割合ダメージの計算方法

割合ダメージは、最大HPに対する割合でダメージを計算します。
以下のコードで、割合ダメージが実装できます。
|
1 2 3 4 5 |
int CalculatePercentageDamage(int maxHP, float percentage) { return Mathf.RoundToInt(maxHP * percentage); } |
このコードで、最大HPの一定割合のダメージが計算されます。
例えば、percentage が 0.1f の場合、最大HPの10%分のダメージになります。
割合ダメージの特徴は、敵のHPが高いほど与えるダメージも大きくなる点です。
そのため、HPの多いボス敵でも一定の削り効果を持たせることができ、戦闘が長引きすぎるのを防ぐ目的で使われることが多くあります。
防御計算の実装方法

防御計算は、防御力に応じてダメージを減らします。
以下のコードで、防御計算が実装できます。
|
1 2 3 4 5 6 |
int CalculateDamageWithDefense(int attackPower, int defense) { int damage = attackPower - defense; return Mathf.Max(1, damage); // 最低でも1ダメージ } |
このコードでは、攻撃力から防御力を差し引いた値をダメージとして計算します。
防御力が高いほど受けるダメージが減り、キャラクターの成長や装備の効果を数値として分かりやすく表現できます。
また、Mathf.Max(1, damage) によって、防御力が攻撃力を上回っても 必ず最低1ダメージは発生するようにしています。
これは、防御を極端に高くした場合に「まったくダメージを受けない状態」になってしまうのを防ぐためです。

防御計算は、ゲームのバランスに大きく影響します。実際に動かしながら、調整していきましょう。
アクションゲーム向けのダメージ処理パターン

アクションゲームでは、固定ダメージが使いやすい場合が多いです。
アクションゲームでは、ダメージは単なる数値ではなく、「当たったときの手応え」や「爽快感」を演出する重要な要素です。

ここでは、アクションゲームでよく使われるダメージ処理パターンを、具体的な使いどころとあわせて整理します。
代表的なダメージ処理パターン一覧
| パターン | 特徴 | 向いている場面 |
|---|---|---|
| 固定ダメージ | 毎回同じダメージを与えるため、手応えが安定する | 通常攻撃・雑魚敵戦・コンボ主体のアクション |
| 割合ダメージ | 敵の最大HPに応じてダメージが変わる | ボス戦・必殺技・チャージ攻撃 |
| 防御計算 | 防御力によってダメージが減少し、成長や装備を表現できる | 装備要素のあるゲーム・硬い敵の演出 |
| 複合型 | 固定・割合・防御を組み合わせて使う | 多段攻撃・スキル・個性のある技 |
「どの技に使うか」を想像してみよう
例えば、以下のように使い分けることで、技ごとの個性やゲームらしい手触りが生まれます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 通常攻撃:固定ダメージ int NormalAttack(int attackPower) { return attackPower; } // 必殺技:割合ダメージ int SpecialAttack(int maxHP) { return Mathf.RoundToInt(maxHP * 0.2f); // 最大HPの20% } // 硬い敵向け:防御計算 int AttackWithDefense(int attackPower, int defense) { return Mathf.Max(1, attackPower - defense); } |
数値を少し変えるだけで、「サクサク倒せる」「硬くて手強い」「一発逆転が狙える」など、ゲームの印象は大きく変わります。
どの計算式が正解かではなく、どんな体験をプレイヤーに与えたいかを考えながら選ぶのがポイントです。
Unityでの実装例

ここでは、これまで紹介してきたダメージ計算式を、Unityのスクリプトとしてまとめるための基本構造を紹介します。
個別の計算ロジックはこのクラスに直接書くのではなく、外から計算結果を受け取って処理する形にするのがポイントです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using UnityEngine; public class DamageReceiver : MonoBehaviour { [SerializeField] private int currentHP = 100; public void ReceiveDamage(int damage) { currentHP -= damage; currentHP = Mathf.Max(0, currentHP); } } |
このクラスは、「ダメージを受け取る役割」だけを持ちます。
どの計算式を使うかは、攻撃側やスキル側で決める想定です。
役割を分けると、拡張しやすくなる
ダメージ計算とHP管理を分けておくことで、
- 通常攻撃・必殺技・スキルで計算式を切り替えられる
- 将来的に割合ダメージや補正を追加しやすい
- 敵・味方どちらにも同じ仕組みを使える
アクションゲームでは、「どう計算するか」と「どう反映するか」を分離する設計が、後々の調整や拡張を楽にしてくれます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実践的なダメージ計算を学ぶには

ここまで、ダメージ計算式の作り方について解説してきました。
ただし、実際のゲーム制作では、さらに多くの要素が必要になります。
アニメーション、エフェクト、UI、サウンドなど、全体を体系的に学ぶには、専門の講座が効率的です。
Unity入門の森では、アクションゲームの作り方を、基礎から完成まで丁寧に解説しています。
コードの意味から、なぜその実装方法を選ぶのかまで、しっかり理解できる内容になっています。
アクションゲーム制作に特化した講座なら、効率的にスキルアップできます。
ゲーム制作でスキルを上げたい方は、ぜひチェックしてみてください。
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
まとめ

ダメージ計算式の作り方について解説しました。
要点のまとめ
- 固定ダメージは、シンプルで調整しやすい
- 割合ダメージは、最大HPに応じてダメージが変わる
- 防御計算は、防御力に応じてダメージが減る
- 用途に応じて選ぶ
基本を押さえれば、あとは応用していくだけです。
まずは、ここで紹介したコードを実際に動かしてみてください。
動かしながら理解を深めていくのが、上達への近道です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント