放置ゲームの乱数処理と猫の出現ロジックの設計【Unity開発】

プログラミング

放置型ゲームでは、プレイヤーが介入しなくてもゲーム内のイベントが進行するため、乱数を活用した出現ロジックが重要になります。特に「ねこあつめ」のようなゲームでは、猫の出現や帰還の処理、滞在時間の計算が鍵となります。本記事では、Unityを使用して放置ゲームの乱数処理を設計する方法を解説します。

1. 放置ゲームにおける乱数処理の基本

放置ゲームでは、以下のようなポイントを考慮して乱数を用いることが重要です。

  • 一貫性のあるシード値:ランダムな要素がありつつも、プレイヤーごとに異なる結果を得られるようにする。
  • 状態の保存:ゲームが閉じられても、猫の出現状況や報酬の計算が継続できる。
  • 非同期処理の考慮:時間経過によって変化する要素を適切に処理する。

2. 猫の出現ロジックの設計

猫の出現を決定する際、いくつかの方法が考えられます。

① 餌とグッズの影響を考慮した乱数生成

猫が出現するかどうかを決定する際に、餌の種類やグッズの影響を考慮します。例えば、以下のようなルールを設定できます。

  • 餌ごとに「出現確率の重み」を設定
  • グッズごとに「特定の猫が出現しやすくなる補正値」を付与
  • 乱数を用いて出現の可否を決定

以下のようなコードを用いることで、Unityで乱数を生成できます。


public class CatSpawner
{
    public static CatData GenerateCat(FoodData food, GoodsData goods)
    {
        float baseChance = food.spawnChance;
        float adjustedChance = baseChance + goods.catSpawnBonus;
        if (Random.value < adjustedChance)
        {
            return CatDatabase.GetRandomCat();
        }
        return null;
    }
}

② 猫の滞在時間を考慮した処理

猫がどのくらいの時間滞在するかを決めるため、以下のようなルールを設定できます。

  • 餌の種類ごとに「持続時間」を設定し、それに応じて猫の滞在時間を決定する。
  • 時間経過をシミュレーションするため、Unixタイムスタンプを保存し、次回ログイン時に経過時間を計算する。

以下のコードで猫の滞在時間を設定できます。


public class CatStayManager
{
    public static float GetStayTime(FoodData food)
    {
        return food.duration * Random.Range(0.8f, 1.2f); // 滞在時間にランダム要素を加える
    }
}

3. 既に帰った猫の処理

猫が帰った後に報酬を受け取る処理を設計します。

  • 猫が滞在し終えたら、一定の報酬(煮干しなど)を残す。
  • 報酬量は猫の種類や滞在時間によって変化させる。
  • データの保存方法として、JSONファイルやPlayerPrefsを活用する。

以下のコードで、猫の滞在が終了した際の報酬を処理できます。


public class RewardManager
{
    public static int CalculateReward(CatData cat, float stayTime)
    {
        return (int)(cat.baseReward * stayTime / 60f); // 1分ごとに報酬を加算
    }
}

4. 放置後のデータ復元

プレイヤーがゲームを閉じた後、再度起動した際に正しくデータを復元する必要があります。

  • ゲーム終了時に「最後にアクセスした時間」を保存
  • 次回起動時に「現在時間 - 最終アクセス時間」を計算し、猫の滞在状況や報酬を再現

以下のようなコードで最終アクセス時間を保存・取得できます。


public class TimeManager
{
    public static void SaveLastLoginTime()
    {
        PlayerPrefs.SetString("LastLoginTime", DateTime.UtcNow.ToString());
        PlayerPrefs.Save();
    }

    public static TimeSpan GetElapsedTime()
    {
        string lastLogin = PlayerPrefs.GetString("LastLoginTime", DateTime.UtcNow.ToString());
        DateTime lastTime = DateTime.Parse(lastLogin);
        return DateTime.UtcNow - lastTime;
    }
}

まとめ

Unityで放置ゲームを開発する際、猫の出現や滞在時間を乱数で制御するには、以下のポイントが重要です。

  • 餌とグッズの種類に応じた乱数処理を行う
  • 猫の滞在時間をランダムに設定し、持続時間に応じて報酬を変化させる
  • データを保存し、放置後も適切に復元する仕組みを作る

このロジックを活用し、魅力的な放置ゲームを開発してみてください。

コメント

タイトルとURLをコピーしました