Menu
CoddyTech

おさらい:戦利品を抽選する

CoddyのUnityジャーニー「Unityのゲームアーキテクチャ」セクションの一部。レッスン 22/64。

この章では、シリアライズ可能なクラス、リスト、列挙型をインスペクターに配置し、宝箱のテーブルではその3つすべてを使用します。これで宝箱はそのテーブルを使って抽選します。

challenge icon

チャレンジ

簡単

Spaceキーで宝箱を開き、重みに応じてアイテムを1つドロップさせます。

  1. public LootEntry Pick(int roll)を記述します。tableを順に調べ、rollがその重みより小さい場合はエントリーを返し、そうでなければ重みを差し引きます。ループの後に、return null;を記述します。
  2. Spaceキーを押したとき、Random.Range(0, TotalWeight())で選び、宝箱より1.5単位上にそのprefabを生成し、entry.rarity + ": " + entry.itemNameをログに出力します。

「プレイ」を押してSpaceキーを押します。ほとんどの場合、Common: AppleまたはBreadが出ます。その後、「確認」を押します。

自分で試してみよう

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public enum Rarity { Common, Rare, Epic, Legendary }

[System.Serializable]
public class LootEntry
{
    public string itemName;
    public GameObject prefab;
    public Rarity rarity;
}

public class LootChest : MonoBehaviour
{
    public List<LootEntry> table;

    public int WeightOf(Rarity rarity)
    {
        switch (rarity)
        {
            case Rarity.Common: return 10;
            case Rarity.Rare: return 4;
            case Rarity.Epic: return 2;
            case Rarity.Legendary: return 1;
        }
        return 0;
    }

    public int TotalWeight()
    {
        int total = 0;
        foreach (LootEntry entry in table) total += WeightOf(entry.rarity);
        return total;
    }

    // ここにPick(int roll)と、Spaceで宝箱を開ける処理を記述する
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityのゲームアーキテクチャのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド