Unityでゲームのガチャ機能の作成方法を完全解説

Unityでゲームのガチャ機能の作成方法を完全解説_アイキャッチ
目次

はじめに

ゲームでよく出てくるガチャ機能。今回は簡単にガチャの機能を作成してみようと思います。

ガチャ機能の概要

まずは今回作成するガチャ機能の仕様を決めましょう。

・お金がなければ引けない
・レア度は4種類
・それぞれのレア度、複数のアイテムからランダムに排出
・今回は簡易的な機能のみ(天井システムなどは実装しない)

簡単に仕様を決めたところで実際に作成してみましょう。

ガチャ機能の作成方法

まずはガチャを引いたら出てくるアイテムを作成しましょう。今後のことを考えてScriptableObjectを使用します。

using UnityEngine;

public enum Rarity
{
    None = 0,
    Normal = 1,
    Rare = 2,
    SuperRare = 3,
    Legend = 4,
    Max = 5,
}

[CreateAssetMenu(menuName = "Gacha/GachaItem")]
public class GachaItem : ScriptableObject
{
    public string itemName;
    public Rarity rarity;        // レア度(例: 1〜5)
    public Sprite icon;
    public int weight;        // 排出確率用の重み
}

スクリプトを作成すると以下のメニューからScriptableObjectを作成できるようになります。

gachaImage_01342857

作成できるようになったら後ほど使うので何個か作成しておいてください。
作成したら今度はガチャ機能を作成していきます。

using System.Collections.Generic;
using UnityEngine;

public class GachaSystem : MonoBehaviour
{
    [Header("ガチャから排出されるアイテムリスト")]
  [SerializeField] private List<GachaItem> gachaItems_N;
  [SerializeField] private List<GachaItem> gachaItems_R;
  [SerializeField] private List<GachaItem> gachaItems_SR;
  [SerializeField] private List<GachaItem> gachaItems_LD;

  // ガチャ1回引くのに必要なお金
    [SerializeField]
    private int gachaCost = 5;

    // お金
    private int money = 100;

    public void DropGacha()
    {
        // お金チェック
        if (money < gachaCost)
        {
            Debug.Log("お金が足りません");
            return;
        }

        // お金払う
        money -= gachaCost;

        // 抽選
        GachaCharacter result = Lottery();
        Debug.Log($"ガチャ結果: {result.itemName}(★{result.rarity})");

        // TODO: 演出・UI表示・所持リスト追加
    }

    private GachaItem Lottery()
    {
        float rand = Random.value;
        Debug.Log(rand);
        // LD 3%
        if (rand < 0.03f)
        {
            return gachaItems_LD[Random.Range(0, gachaItems_LD.Count)];
            // PU 75%
            //if (Random.value < 0.75f)
            //    return ssrPickupCards[Random.Range(0, ssrPickupCards.Count)];
            //else
            //    return ssrNormalCards[Random.Range(0, ssrNormalCards.Count)];
        }

        // SR 18%
        if (rand < 0.21f)
        {
            return gachaItems_SR[Random.Range(0, gachaItems_SR.Count)];
        }

        // SR 29%
        if (rand < 0.50f)
        {
            return gachaItems_R[Random.Range(0, gachaItems_R.Count)];
        }

        // R 50%
        return gachaItems_N[Random.Range(0, gachaItems_N.Count)];
    }
}

スクリプトを作成できたら適当なオブジェクトにアタッチしてDropGacha()関数を呼べるようにしておきましょう。

自分はボタンオブジェクトにアタッチして呼べるようにしておきました。

gachaimage_214234

アタッチしたらコンポーネントにあるガチャアイテムリストに先程作成したScriptableObjectをそれぞれのレア度に入れてガチャコストを設定しましょう。

実行確認するなら0にして何回でも引けるようにすることも多分できるはずです。

準備ができたら実行してボタンを押してみましょう。うまくいけばログに引いたアイテムとレア度が出力されます。

おわりに

うまく作成できたでしょうか。基本的なガチャシステムを作成してしまえば、あとはピックアップ機能や天井機能などを追加作成することも比較的簡単にできるので自分の作りたいゲームに合わせて調整してみましょう。

よかったらシェアしてね!
目次