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で変更できる値と表示先を置きます。
[SerializeField] private TextMeshProUGUI statusText;
[SerializeField] private float enemyHp = 1f;
[SerializeField] private float playerDeaths = 2f;
[SerializeField] private float assistLevel = 3f;2. 状態を変える
ボタンを押した時に、1つだけ状態を進めます。
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. 画面に表示する
変わった結果を画面に出して確認します。
if (statusText != null)
{
statusText.text = $"{label}\nenemyHp={enemyHp:0.##}\nplayerDeaths={playerDeaths:0.##}\nassistLevel={assistLevel:0.##}";
}
Debug.Log($"難易度調整: {label}");Complete script
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
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.
