Игра Memory из книги "Unity в действии"

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Игра Memory из книги "Unity в действии"

Сообщение StrangerNet 28 мар 2020, 20:51

Народ помогите новичку.
Вроде все написал как в книге, однако при старте игры карточкам-клонам присваивается ID=0, из за этого вне зависимости от картинки система считает их одинаковыми. Не могу выловить где косяк. Вот листинг:
SceneController:
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;

public class SceneController : MonoBehaviour
{
    [SerializeField] private MemoryCard originalCard;
    [SerializeField] private Sprite[] images;
    [SerializeField] private TextMesh scoreLabel;
    public const int gridRows = 2;
    public const int gridCols = 4;
    public const float offsetX = 2f;
    public const float offsetY = 2.5f;
    private int _score = 0;

    private void Start()
    {
        Vector3 startPos = originalCard.transform.position;
        int[] numbers = { 0, 0, 1, 1, 2, 2, 3, 3 };
        numbers = ShuffleArray(numbers);
        for (int i = 0; i < gridCols; i++)
        {
            for (int j = 0; j < gridRows; j++)
            {
                MemoryCard card;
                if (i == 0 && j == 0) { card = originalCard; }
                else
                {
                    card = Instantiate(originalCard) as MemoryCard;
                }
                int index = j*gridRows+i;
                int id = numbers[index];
                Debug.Log("Match? " + id);
                originalCard.SetCard(id, images[id]);
                Debug.Log("B " + id);
                float posX = (offsetX * i) + startPos.x;
                float posY = -(offsetY * j) + startPos.y;
                card.transform.position = new Vector3(posX, posY, startPos.z);
                }
        }
    }
    private int[] ShuffleArray(int[] numbers)
    {
        int[] newArray = numbers.Clone() as int[];
        for (int i = 0; i < newArray.Length; i++)
        {
            int tmp = newArray[i];
            int r = Random.Range(i, newArray.Length);
            newArray[i] = newArray[r];
            newArray[r] = tmp;
        }
        return newArray;
    }
    private MemoryCard _firstRevealed;
    private MemoryCard _secondRevealed;
    public bool canReveal
    {
        get { return _secondRevealed == null; }
    }
    public void CardRevealed(MemoryCard card)
    {
        if (_firstRevealed == null)
        {
            _firstRevealed = card;
        }
        else
        {
            _secondRevealed = card;
            Debug.Log("Match? " + _firstRevealed.id+" "+ _secondRevealed.id);
            StartCoroutine(CheckMatch());
           
        }
    }
    public IEnumerator CheckMatch()
    {
        if (_firstRevealed.id==_secondRevealed.id)
        {
            _score++;
            scoreLabel.text = "Score: " + _score;
        }
        else
        {
            yield return new WaitForSeconds(.5f);
            _firstRevealed.Unreveal();
            _secondRevealed.Unreveal();
         }
        _firstRevealed = null;
        _secondRevealed = null;
    }
   
}


MemoryCard
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;

public class MemoryCard:MonoBehaviour{
    [SerializeField] private GameObject cardBack;
    [SerializeField] private SceneController controller;
    private int _id;
    public int id {get {return _id;} }
    public void SetCard (int id, Sprite image)
    {
        _id = id;
        Debug.Log(_id);
        GetComponent<SpriteRenderer>().sprite = image;
    }
    public void OnMouseDown()
    {
        if (cardBack.activeSelf && controller.canReveal)
        {
            cardBack.SetActive(false);
            controller.CardRevealed(this);
        }
    }
    public void Unreveal()
    {
        cardBack.SetActive(true);
    }
}
StrangerNet
UNец
 
Сообщения: 1
Зарегистрирован: 28 мар 2020, 20:42

Re: Игра Memory из книги "Unity в действии"

Сообщение 1100001001 01 апр 2020, 01:15

Проверь личные сообщения
_https://vk.ru/belovedtoy
Аватара пользователя
1100001001
UNITрон
 
Сообщения: 276
Зарегистрирован: 26 сен 2012, 05:34
  • Сайт


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 15