武器三すくみは、SRPGの戦略性を高めます。
剣・槍・斧の相性を実装すれば、選択の楽しさが生まれます。
この記事では、実装方法を詳しく解説します。
✨ この記事でわかること
- 三すくみ相性テーブルの設計
- 相性倍率の実装
- UI表示の実装
- 相性のバランス調整
- 実装例とコード

三すくみ相性は、データテーブルで管理しましょう。これにより、調整が簡単になり、拡張もしやすくなります。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
あなたのオリジナルゲーム、今年こそ完成させませんか?
RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。
実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。
三すくみ相性テーブルの設計

三すくみ相性テーブルは、SRPGにおける「武器同士の有利・不利」を明確に定義するための設計要素です。
単にダメージ倍率を設定するだけでなく、プレイヤーに戦術的な判断を促す役割を持ちます。
ここでは、拡張性と調整のしやすさを重視した三すくみ相性テーブルの設計方法を紹介します。
相性データ構造
三すくみを実装する際は、相性関係をコードに直接書き込むのではなく、データとして管理する設計が重要です。
以下は、UnityのScriptableObjectを利用して、「攻撃側の武器」「防御側の武器」「相性倍率」を定義する例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using UnityEngine; [CreateAssetMenu(fileName = "NewWeaponTriangle", menuName = "SRPG/Weapon Triangle")] public class WeaponTriangleData : ScriptableObject { public WeaponType attacker; public WeaponType defender; public float multiplier; // 相性倍率 } public enum WeaponType { Sword, // 剣 Lance, // 槍 Axe // 斧 } public class WeaponTriangleSystem : MonoBehaviour { public WeaponTriangleData[] triangleData; public float GetMultiplier(WeaponType attacker, WeaponType defender) { // 相性データを検索 WeaponTriangleData data = System.Array.Find(triangleData, d => d.attacker == attacker && d.defender == defender); if (data != null) { return data.multiplier; } // デフォルトは1.0 return 1.0f; } } |
このように相性をデータテーブルとして管理することで、数値調整や武器追加が容易になります。
また、プランナーやデザイナーがInspector上で直接調整できる点も大きなメリットです。
三すくみの関係
三すくみでは、各武器に必ず「有利・不利・相殺」の関係が生まれるように設計します。
これにより、どの武器にも役割が生まれ、特定の武器だけが強くなりすぎる状況を防げます。
代表的な三すくみ相性の例
- 剣 → 斧:有利(1.2倍)
- 斧 → 槍:有利(1.2倍)
- 槍 → 剣:有利(1.2倍)
- 逆方向の組み合わせ:不利(0.8倍)
- 同じ武器同士:相殺(1.0倍)
この循環構造によって、プレイヤーは「どの武器で攻撃するか」を常に考える必要が生まれ、SRPGならではの戦略性が自然と高まります。
三すくみを導入するメリット
三すくみ相性を導入する最大のメリットは、戦闘に明確な判断軸を与えられる点です。
単純な攻撃力・防御力の比較ではなく、武器の組み合わせそのものが戦術になります。
具体的には、以下のような効果が期待できます。
- 部隊編成や出撃前の準備に意味が生まれる
- 不利な状況でも武器選択による逆転が可能になる
- 敵ユニットの配置や武器構成を読む楽しさが増す
このように三すくみは、SRPGの「考える楽しさ」を支える基本設計として、非常に相性の良いシステムです。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
相性倍率の実装

三すくみ相性を実際の戦闘に反映させるためには、武器の有利・不利を数値としてダメージ計算に組み込む必要があります。
ここでは、相性倍率を用いてダメージを調整する、シンプルかつ扱いやすい実装方法を紹介します。
ダメージ計算への組み込み
相性倍率は、基本ダメージに対して乗算する形で適用するのが一般的です。
これにより、既存の攻撃力・防御力の計算ロジックを大きく変更せずに、三すくみの影響を追加できます。
以下は、攻撃側と防御側の武器タイプから相性倍率を取得し、最終ダメージを算出する例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public class WeaponTriangleDamageCalculator : MonoBehaviour { public WeaponTriangleSystem triangleSystem; public int CalculateDamage(Unit attacker, Unit defender) { // 基本ダメージ int baseDamage = attacker.attack - defender.defense; // 相性倍率を適用 float multiplier = triangleSystem.GetMultiplier(attacker.weaponType, defender.weaponType); int finalDamage = Mathf.RoundToInt(baseDamage * multiplier); // 最低ダメージは1 return Mathf.Max(finalDamage, 1); } public string GetAffinityText(WeaponType attacker, WeaponType defender) { float multiplier = triangleSystem.GetMultiplier(attacker, defender); if (multiplier > 1.0f) { return "有利"; } else if (multiplier < 1.0f) { return "不利"; } else { return "相殺"; } } } |
この実装では、まず通常の攻撃力と防御力から基本ダメージを算出し、その後に相性倍率を掛けることで最終ダメージを決定しています。
最低ダメージを1に固定しているため、不利な状況でも「まったくダメージが入らない」事態を防げます。
これは、SRPGにおけるストレス軽減の観点でも重要な設計です。

相性倍率は、1.2倍(有利)と0.8倍(不利)が標準的です。
数値差を控えめにすることで、相性が重要でありながら、
ステータスや戦術の工夫が無意味にならないバランスを保てます。
相性倍率をこの程度に抑えることで、「相性がすべてを決める戦闘」ではなく、位置取りや編成と組み合わせた戦略性の高いバトルを実現できます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
UI表示の実装

三すくみ相性は、内部ロジックだけで完結させるのではなく、プレイヤーに分かりやすく伝えることが重要です。
UI表示が不十分だと、相性の存在に気づけなかったり、「なぜこのダメージになったのか」が理解できず、戦略性が正しく伝わらない原因になります。
相性表示UI
相性表示UIでは、「有利・不利・相殺」を一目で判断できることを最優先に設計します。
テキストだけでなく、色やアイコンを組み合わせることで、プレイヤーの思考負荷を軽減できます。
以下は、攻撃側と防御側の武器タイプから相性を判定し、テキストと色で結果を表示するシンプルな実装例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using UnityEngine; using UnityEngine.UI; using TMPro; public class WeaponTriangleUI : MonoBehaviour { public TextMeshProUGUI affinityText; public Image affinityIcon; public Color advantageColor = Color.green; public Color disadvantageColor = Color.red; public Color neutralColor = Color.white; public WeaponTriangleSystem triangleSystem; public void UpdateAffinityDisplay(WeaponType attacker, WeaponType defender) { float multiplier = triangleSystem.GetMultiplier(attacker, defender); if (multiplier > 1.0f) { affinityText.text = "有利"; affinityText.color = advantageColor; } else if (multiplier < 1.0f) { affinityText.text = "不利"; affinityText.color = disadvantageColor; } else { affinityText.text = "相殺"; affinityText.color = neutralColor; } } } |
このコードでは、相性倍率に応じて表示テキストと色を切り替えています。
複雑な処理を行わず、ロジックとUIの責務を明確に分離している点が特徴です。
UI実装時の注意点
相性表示UIを実装する際は、見た目だけでなく、プレイヤー体験全体への影響を考慮する必要があります。
- 情報を出しすぎない
常に相性を強調しすぎると、プレイヤーが数値だけで判断するようになり、戦術や位置取りの重要性が薄れる可能性があります。 - 色覚多様性への配慮
色だけに依存せず、テキストやアイコン形状でも状態を区別できる設計が望まれます。 - 表示タイミングを限定する
攻撃選択時やターゲット選択時など、判断が必要な場面に絞って表示すると、情報が整理されます。

UIは「正解を教えるための仕組み」ではなく、プレイヤーが判断しやすくなるための補助として設計することが重要です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
相性のバランス調整

相性のバランスは、ゲームの戦略性を決めます。
調整方法を紹介します。
バランス調整のコツ
- 倍率の範囲:1.1倍〜1.3倍が標準(高すぎると強すぎ)
- 不利の倍率:0.7倍〜0.9倍が標準(低すぎると弱すぎ)
- 相殺の倍率:1.0倍(変更不要)
この範囲で、バランスを保てます。
拡張:四すくみ以上の相性
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public enum ExtendedWeaponType { Sword, // 剣 Lance, // 槍 Axe, // 斧 Bow, // 弓 Magic // 魔法 } public class ExtendedWeaponTriangle : MonoBehaviour { public float GetMultiplier(ExtendedWeaponType attacker, ExtendedWeaponType defender) { // 四すくみ以上の相性を実装 // 実装は省略 return 1.0f; } } |
武器の種類を増やすことで、相性の複雑さを高められます。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
実装例:完全な三すくみシステム

実際に使える、完全な三すくみシステムの実装例を紹介します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using UnityEngine; public class CompleteWeaponTriangleSystem : MonoBehaviour { [Header("システム")] public WeaponTriangleSystem triangleSystem; public WeaponTriangleDamageCalculator damageCalculator; public WeaponTriangleUI uiDisplay; public void OnAttack(Unit attacker, Unit defender) { // 相性を表示 uiDisplay.UpdateAffinityDisplay(attacker.weaponType, defender.weaponType); // ダメージを計算 int damage = damageCalculator.CalculateDamage(attacker, defender); // ダメージを適用 defender.TakeDamage(damage); } } |
このコードで、完全な三すくみシステムが実装できます。
相性テーブル、ダメージ計算、UI表示を統合しています。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
よくある質問(FAQ)

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

三すくみ相性は、データテーブルで管理しましょう。
これにより、調整が簡単になり、拡張もしやすくなります。
✅ 今日から始める3ステップ
- ステップ1:三すくみ相性テーブルを設計する(所要1時間)
- ステップ2:相性倍率をダメージ計算に組み込む(所要2時間)
- ステップ3:UI表示を実装する(所要2時間)
本格的にUnityを学びたい方は、Unity入門の森で実践的なスキルを身につけましょう。
あなたのペースで、少しずつ進めていけば大丈夫です。
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる



コメント