本文へスキップ
Tuning

Three axes to define before tuning difficulty

A beginner guide to balancing failure rate, recovery room, and retry speed before changing raw enemy numbers.

公開日: 2026-06-24#Difficulty Tuning#Playtesting#Balance#Beginner

Quick Start

Start with a tiny working version

Most beginner balance work becomes messy because numbers are edited before the desired experience is defined. A more reliable starting point is to decide three things first: how often players should fail, whether they can recover after small mistakes, and how quickly they return to the next attempt.

Build it in small code pieces

1. 値を用意する

Inspectorで変更できる値と表示先を置きます。

DifficultyTuningTutorial.cs
csharp
    [SerializeField] private TextMeshProUGUI statusText;
    [SerializeField] private float enemyHp = 1f;
    [SerializeField] private float playerDeaths = 2f;
    [SerializeField] private float assistLevel = 3f;

2. 状態を変える

ボタンを押した時に、1つだけ状態を進めます。

DifficultyTuningTutorial.cs
csharp
    public void NextStep()
    {
        step = (step + 1) % 3;
        var label = step == 0 ? "標準値を見る" : step == 1 ? "失敗回数を見る" : "補助を上げる";
        if (statusText != null)
        {
            statusText.text = $"{label}\nenemyHp={enemyHp:0.##}\nplayerDeaths={playerDeaths:0.##}\nassistLevel={assistLevel:0.##}";
        }

3. 画面に表示する

変わった結果を画面に出して確認します。

DifficultyTuningTutorial.cs
csharp
        if (statusText != null)
        {
            statusText.text = $"{label}\nenemyHp={enemyHp:0.##}\nplayerDeaths={playerDeaths:0.##}\nassistLevel={assistLevel:0.##}";
        }
        Debug.Log($"難易度調整: {label}");

Complete script

DifficultyTuningTutorial.cs
csharp
using UnityEngine;
using TMPro;

public class DifficultyTuningTutorial : MonoBehaviour
{
    [SerializeField] private TextMeshProUGUI statusText;
    [SerializeField] private float enemyHp = 1f;
    [SerializeField] private float playerDeaths = 2f;
    [SerializeField] private float assistLevel = 3f;

    private int step;

    public void NextStep()
    {
        step = (step + 1) % 3;
        var label = step == 0 ? "標準値を見る" : step == 1 ? "失敗回数を見る" : "補助を上げる";
        if (statusText != null)
        {
            statusText.text = $"{label}\nenemyHp={enemyHp:0.##}\nplayerDeaths={playerDeaths:0.##}\nassistLevel={assistLevel:0.##}";
        }
        Debug.Log($"難易度調整: {label}");
    }
}

Inspector

Connect the UI reference in the Inspector, then use the button to confirm each value changes.

Summary

What to take away

A beginner guide to balancing failure rate, recovery room, and retry speed before changing raw enemy numbers.

The page is designed to help you move from reading to a small practical decision. Use the checklist above before jumping into the next related article.