NullReferenceException: Object reference not set to an instance of an object unity c#

Я привязал к картам скрипт CardManager.cs и при клике он меняет значение card на нужное. Однако при попытке получения этого значения в Main.cs мне выводит ошибку NullReferenceException: Object reference not set to an instance of an object. Вот код этих файлов (P.S. Комментарием выделено проблемное место)

CardManager.cs

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


namespace Nines {
    public class CardManager : MonoBehaviour
    {

        public static string card = "";

        public void OnClick() {
            card = this.name;
        }

        public string GetCard() {
            return card;
        }
    }
}

Main.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using static Nines.CardManager;


namespace Nines {
    public class Main : MonoBehaviour
    {
        public List<string> allCards = new List<string>() {"c6", "c7", "c8", "c9", "c10", "cj", "cq", "ck", "ca",
                                                           "d6", "d7", "d8", "d9", "d10", "dj", "dq", "dk", "da",
                                                           "h6", "h7", "h8", "h9", "h10", "hj", "hq", "hk", "ha",
                                                           "s6", "s7", "s8", "s9", "s10", "sj", "sq", "sk", "sa"};
        [SerializeField] public List<string> playerCards;
        [SerializeField] public List<string> bot1cards;
        [SerializeField] public List<string> bot2cards;
        private SpriteRenderer spriteRenderer;

        [SerializeField] public List<GameObject> playerCardsObjects;
        [SerializeField] public List<GameObject> bot1CardsObjects;
        [SerializeField] public List<GameObject> bot2CardsObjects;

        public List<string> clubs;
        public List<string> diamonds;
        public List<string> hearts;
        public List<string> spears;

        float offset = 1.4f;
        float startX = -7.7f;
        float startY = -3.7f;

        public GameObject card;
        public GameObject card2;
        public Canvas canvas;

        public List<Sprite> sprites = new List<Sprite>();
        public List<Sprite> images = new List<Sprite>();

        float offset2 = 0.5f;
        float X1 = -8.1f;
        float Y1 = 4.0f;
        float X2 = 8.2f;
        float Y2 = 4.0f;

        int turn;
        
        float offset3 = 0.5f;

        float cX1 = 0f;
        float cY1 = 4f;

        float dX1 = 0f;
        float dY1 = 2.3f;

        float hX1 = 0f;
        float hY1 = 0.6f;

        float sX1 = 0f;
        float sY1 = -1.1f;

        float cX2 = -0.5f;
        float cY2 = 4f;

        float dX2 = -0.5f;
        float dY2 = 2.3f;

        float hX2 = -0.5f;
        float hY2 = 0.6f;

        float sX2 = -0.5f;
        float sY2 = -1.1f;

        private int frames = 0;

        public string cardSelected = "";
        public Nines.CardManager cmanag = new Nines.CardManager();

        void Start()
        {
            int i = 0;
            while (i < 12) {
                int index = UnityEngine.Random.Range(0, allCards.Count-1);
                string rand = allCards[index];
                if (playerCards.Contains(rand))
                    continue;
                playerCards.Add(rand);
                GameObject newCard = Instantiate(card2) as GameObject;
                newCard.name = rand;
                float posX = startX + i * offset;
                float posY = startY;

                newCard.transform.position = new Vector3(startX + i * offset, startY, 0);
                newCard.transform.localScale -= new Vector3(0.99f, 0.92f, 0);

                newCard.GetComponent<Image>().sprite = images[index];
                newCard.transform.SetParent(canvas.transform);
                playerCardsObjects.Add(newCard);

                newCard.GetComponentInChildren<Text>().text = string.Empty;

                i++;
            }
            i = 0;
            while (i < 12) {
                int index = UnityEngine.Random.Range(0, allCards.Count-1);
                string rand = allCards[index];
                if (playerCards.Contains(rand) || bot1cards.Contains(rand))
                    continue;
                bot1cards.Add(rand);
                GameObject newCard = Instantiate(card) as GameObject;
                newCard.name = rand;

                newCard.transform.position = new Vector3(X1, Y1 - i * offset2, 0);
                newCard.transform.localScale = new Vector3(1.3f, 1.3f, 0);

                newCard.GetComponent<SpriteRenderer>().sprite = sprites[36];
                bot1CardsObjects.Add(newCard);
                i++;
            }
            foreach (string rand in playerCards) {
                allCards.Remove(rand);
            }
            foreach (string rand in bot1cards) {
                allCards.Remove(rand);
            }
            i = 0;
            while (i < 12) {
                bot2cards = allCards;
                GameObject newCard = Instantiate(card) as GameObject;

                newCard.transform.position = new Vector3(X2, Y2 - i * offset2, 0);
                newCard.transform.localScale = new Vector3(1.3f, 1.3f, 0);

                newCard.GetComponent<SpriteRenderer>().sprite = sprites[36];
                bot2CardsObjects.Add(newCard);
                i++;
            }
            if (playerCards.Contains("d9"))
                turn = 0;
            else if (bot1cards.Contains("d9"))
                turn = 1;
            else
                turn = 2;

            if (turn == 0) {
                Destroy(playerCardsObjects[playerCards.IndexOf("d9")]);
                playerCards.Remove("d9");
            }
            else if (turn == 1) {
                Destroy(bot1CardsObjects[bot1cards.IndexOf("d9")]);
                bot1cards.Remove("d9");
            }
            else {
                Destroy(bot2CardsObjects[bot2cards.IndexOf("d9")]);
                bot2cards.Remove("d9");
            }
            diamonds.Add("d9");
            GameObject newCard_ = Instantiate(card) as GameObject;
            newCard_.transform.position = new Vector3(dX1, dY1, 0);
            newCard_.transform.localScale = new Vector3(1.3f, 1.3f, 0);
            newCard_.GetComponent<SpriteRenderer>().sprite = sprites[12];
            dX1 += offset3;

            turn++;
        }

        public void Update() {
            frames++;
            if (frames == 30) {
                frames = 0;
                if (turn == 3) {
                    turn = 0;
                }
                turn = 0;
                if (turn == 0) {
                    cardSelected = cmanag.GetCard(); //Вот здесь выводит ошибку
                    Debug.Log(cardSelected);
                }
            }
        }
    }
}

Ответы (0 шт):