Отображение карт в пользовательском интерфейсе в Unity - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь отображать карты в Canvas программно из Script onClick. Я успешно перетасовал свои карты и сохранил их в массиве player1 и player2 (по 26 случайных карт каждому игроку). Я создал базовую зону игроков c для player1 и player2. Мой подход заключается в том, что, когда я нажимаю кнопку, карты распределяются в соответствующих зонах с изображениями, хранящимися в картах

Я новичок в Unity и не имею понятия рендерить изображения на Canvas. Я попытался с помощью GameObject Canvas создать игру. Google и вопрос StackOverflow, но я не решил свою проблему. Я храню свой полный проект на Dropbox LINK: https://www.dropbox.com/sh/ofx9m6kaljpiecz/AAC7q7ufgAK1jlPHOfsGJWkPa?dl=0. Изображение холста: https://www.dropbox.com/s/y118yboj9hx0i52/Screenshot%20%2833%29.png?dl=0

Вот мой основной файл HelloWord.cs

public class HelloWorld : MonoBehaviour
{
    Sprite sprite;
    List<string> player1 = new List<string>();
    List<string> player2 = new List<string>();
    public static string[] suits = new string[] { "spades", "hearts", "clubs", "diamonds" };
    public static string[] values = new string[] { "ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king" };
    public List<string> deck;
    Texture2D myTexture;

    public void PlayCards()
    {
        deck = GenerateDeck();
        Shuffle(deck);
    }

    public void distributeCard()
    {
        for (var x = 1; x <= 26; x++)
        {
            player1.Add(deck[x]);
            foreach (var item in player1)
            {
                print("Player 1 Cards:" + item.ToString());
            }
        }
        for (var y = 26; y <= 52; y++)
        {
            player2.Add(deck[y]);
            foreach (var item in player2)
            {
                print("Player 2 Cards:" + item.ToString());
            }
        }
    }
    public void onClick()
    {
        PlayCards();
        distributeCard();
    }

    public static List<string> GenerateDeck()
    {
        List<string> newDeck = new List<string>();
        foreach(string s in suits)
        {
            foreach(string v in values)
            {
                newDeck.Add(v  +"_of_"  + s);

            }
        }
        return newDeck;
    }
    void Shuffle<T>(List<T> list)
    {
        System.Random random = new System.Random();
        int n = list.Count;
        while (n > 1)
        {

           int k = random.Next(n);
            n--;
            T temp = list[k];
            list[k] = list[n];
            list[n] = temp;
        }
    }
}

1 Ответ

0 голосов
/ 18 апреля 2020

Существует элемент пользовательского интерфейса под названием «RawImage». Это всего лишь одна текстура, которая будет отображаться в вашем слое пользовательского интерфейса на холсте. Его можно добавить из редактора в UI -> Raw Image.

Вы можете назначить материал или текстуру.

Элемент UnityEngine.UI.RawImage имеет свойство 'material', которое вы можно назначить в любое время. Вы можете использовать это, чтобы назначить материалы, которые вы подготовили, по одному для каждой карты.

При использовании материала, обязательно установите шейдер "Unlit / Color" или "Unlit / Transparent", потому что обычные шейдеры используют свет покажет черное изображение на слое пользовательского интерфейса.

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