Как сделать так, чтобы ролик для игры в кости убрал последнюю прокатанную гонку в единстве - PullRequest
0 голосов
/ 20 февраля 2020

Я использую скрипт прокрутки костей, чтобы пролистывать разные лица моих одноклассников как своего рода систему колеса фортуны, и я совершенно новичок в единстве и C#. Я немного погуглил и придумал следующий код, который работает.

using System.Collections;
using UnityEngine;

public class Dice : MonoBehaviour
{
    // Array of dice sides sprites to load from Resources folder
    public Sprite[] diceSides;

    // Reference to sprite renderer to change sprites
    private SpriteRenderer rend;

    // Use this for initialization
    private void Start()
    {
        // Assign Renderer component
        rend = GetComponent<SpriteRenderer>();

        // Load dice sides sprites to array from DiceSides subfolder of Resources folder
        diceSides = Resources.LoadAll<Sprite>("DiceSides/");   
    }

    // If you left click over the dice then RollTheDice coroutine is started
    public void OnMouseDown()
    {
        StartCoroutine("RollTheDice");
    }

    // Coroutine that rolls the dice
    private IEnumerator RollTheDice()
    {
        // Variable to contain random dice side number.
        // It needs to be assigned. Let it be 0 initially
        int randomDiceSide = 0;

        // Final side or value that dice reads in the end of coroutine
        int finalSide = 0;

        // Loop to switch dice sides ramdomly
        // before final side appears. 20 itterations here.
        Random rnd = new Random();
        for (int i = 0; i <= 20; i++)
        {
            // Pick up random value from 0 to 5 (All inclusive)
            randomDiceSide = Random.Range(0, 9);

            // Set sprite to upper face of dice from array according to random value
            rend.sprite = diceSides[randomDiceSide];

            diceSides = Resources.LoadAll<Sprite>("DiceSides/");

            // Pause before next itteration
            yield return new WaitForSeconds(0.2f);
        }

        // Assigning final side so you can use this value later in your game
        // for player movement for example
        finalSide = randomDiceSide;

        // Show final dice value in Console
        Debug.Log(finalSide);
    }
}

Я хочу сделать так, чтобы при выделении чьего-либо лица они были вынуты из массива. Я действительно не знаю, как это сделать. Если вам нужна дополнительная информация, чтобы помочь мне, не стесняйтесь спрашивать. Заранее спасибо.

1 Ответ

0 голосов
/ 20 февраля 2020

Вверху добавьте это, используя оператор: using System.Collections.Generic;

Имеет переменную private List<Sprite> finalSideSprites.

В Start: finalSideSprites = new List<Sprite>(Resources.LoadAll<Sprite>("DiceSides/"));

В RollTheDice: заменить finalSide = randomDiceSide; на

finalSide = (int)Random.Range(0, finalSideSprites.Count - 1);
rend.sprite = finalSideSprites[finalSide];
finalSideSprites.RemoveAt(finalSide);
if(finalSideSprites.Count <= 0){
    finalSideSprites = new List<Sprite>(Resources.LoadAll<Sprite>("DiceSides/"));
}

По существу, это ведет список допустимых значений «конечной стороны», выбирает одно случайное значение, удаляет его из списка допустимых значений, а затем сбрасывает список, когда они все были использованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...