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);
}
}
}
}
}