サイコロ抽選

サイコロ抽選 画像1

サイコロ抽選をUnityのゲーム内で行いたい!そんな方への記事です。

『サイコロ抽選』とネットで調べてみると意外と記事が少なく、コードの内容も複雑だったので、自作で作ってみました。

サイコロオブジェクトについては、こちらからダウンロードすることも出来るので是非使ってみてくださいね。


サイコロ抽選処理

まずはサイコロ用のスクリプトを用意します。
スクリプトは以下のように記述します。

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

public class DiceManager : MonoBehaviour
{
    public int diceNumber; 

    private void OnTriggerEnter(Collider collision)
    {
        // タグがついたオブジェクトと衝突した場合
        if (collision.gameObject.CompareTag("Dice1"))
        {
            diceNumber = 1;
        }
        else if (collision.gameObject.CompareTag("Dice2"))
        {
           diceNumber = 2;
        }
        else if (collision.gameObject.CompareTag("Dice3"))
        {
            diceNumber = 3;
        }
        else if (collision.gameObject.CompareTag("Dice4"))
        {
            diceNumber = 4;
        }
        else if (collision.gameObject.CompareTag("Dice5"))
        {
            diceNumber = 5;
        }
        else if (collision.gameObject.CompareTag("Dice6"))
        {
            diceNumber = 6;
        }
        else
        {
            Debug.Log("判定不可");
            diceNumber = 7;
        }
    }

    public int DiceNumber(){
        return diceNumber;
    }
}

OnTriggerEnterを使う事で別のオブジェクト(地面)と衝突した際に呼ばれます。

処理が呼ばれたら、diceNumberに触れた面の反対側の値を代入。
何故反対側なのかと言うと、上にきた出目をプレイヤーに判定した欲しいからです。

例えば、下が6なら1が出たことになります。
下が2なら5が出たことになります。

タグの設定も忘れてはいけません。出目が6の方にTag1を、付けます。他の5つの面も同じようにTag2~6を付けていきます。

public int DiceNumber()は、別のスクリプトで使ってあげると、diceNumberの値を参照することが出来るようになってます。

サイコロ抽選処理のスクリプトはサイコロにアタッチします。


判定処理

以下のコードは、実際にメダルゲームのサイコロ抽選で使用しています。

public IEnumerator DiceJudgement(){
        yield return new WaitForSeconds(11f);
        diceNumber = diceManager.DiceNumber();
        if(diceNumber ==1){
            //777獲得処理
            slotRewards.Generate7777Medals();

        }
        else if(diceNumber ==2){
            //アタックボール獲得
            GenerateAttackballs();
        }
        else if(diceNumber ==3){
            //BossBall獲得
            GenerateJPCBall();
        }
        else if(diceNumber ==4){
            //EnemySlot獲得
            attackBallManager.NumberSelect();
            attackBallManager.DisplayReward();
            StartCoroutine(attackBallManager.DisplayReward());
        }
        else if(diceNumber ==5){
            //仲間3体獲得
            StartCoroutine(Companion());
        }
        else if(diceNumber ==6){
            //ゴールドメダル獲得処理
            GenerateGoldMedal();
        }

    }

コメントに書いてあるのですが、
1…777獲得
2…AttackBall獲得
3…BossBall獲得
4…EnemySlot獲得
5…仲間3体獲得
6…ゴールドメダル獲得
となっています。

else if文、またはSwitch文を使う事で、コードを読みやすくします。


まとめ

如何でしたでしょうか?
Unityでサイコロ抽選を行いたいときは、このようにコードを書いてあげると動いてくれます!
本来はBlenderでサイコロを制作したかったのですが、Blenderは使った事がないので、他にできないか模索して考えました。
ただ、このサイコロは真四角で、角がカーブになっていないので、扱いは少しパワープレイになるかもです。

サイコロオブジェクトDLはこちら

以上、読んでいただきありがとうございました!