Доступ к элементам массива из другого скрипта

104
30 декабря 2020, 10:30

У меня есть скрипт, в котором объявлен массив спрайтов

public Sprite[] cards = new Sprite[11];

Как получить доступ к элементам этого массива из другого скрипта?

Answer 1

Вариантов решения много. Попробую описать два самых простых.

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

1. Ищем нужный компонент (класс-потомок MonoBehavior)

Правки только по коду. На момент создания класса privet класс main должен существовать.

public class privet : MonoBehaviour
{
  main mc;
  Sprite temp;
  //Для корректной работы следует обратить внимание на регистр написания имени этого метода
  private void Start()
  {
    mc = FindObjectOfType<main>();
    //если Вы уверены, что класс main находится на том же объекте, что и текущий, то можно так:
    //mc = GetComponent<main>();
  }
  public void newsprites()
  {
    temp = mc.cards[0];
    gameObject.GetComponent<Image>().sprite = temp;
  }
}

2. Скрипт (класс) содержит общедоступную переменную

Этот способ годится только в случае, когда в Редакторе оба компонента расположены на одной сцене/префабе и т.д.

public class privet : MonoBehaviour
{
  //Общедоступная переменная, в Редакторе в окне Иерархии перетаскиваем компонент `main` в это поле
  public main mc;
  private Sprite temp;
  public void newsprites()
  {
    if (mc == null)
      return;
    temp = mc.cards[0];
    gameObject.GetComponent<Image>().sprite = temp;
  }
}
Answer 2

создайте экземпляр класса с массивом в вашем скрипте, например:

        MyClass myClass = new MyClass();
        myClass.cards[0];
Answer 3

Попробовал создать экземпляр класса с массивом, но ничего не вышло. Скрипт с массивом:

using UnityEngine;
public class main : MonoBehaviour
 {    
  public Sprite[] cards = new Sprite[11];
 }

Второй скрипт, из которого пытаюсь получить доступ к массиву :

using UnityEngine;
using UnityEngine.UI;
public class privet : MonoBehaviour
{
  main mc = new main();
  Sprite temp;
  public void newsprites()
   {
    temp = mc.cards[0];
    gameObject.GetComponent<Image>().sprite = temp;
   }
}

В результате, вместо того что бы поставить на объект новый спрайт, удаляется уже существующий.

READ ALSO
Вращение 2D объекта

Вращение 2D объекта

Есть 2D объект, который вращается, однако он должен прекратить вращение при повороте на 90 градусовПроблема в том что он вращается беспрерывно

111
Обрезать спец. символ С#

Обрезать спец. символ С#

На сайте есть вот такая вот строка

128
Динамический парсинг строки в C#

Динамический парсинг строки в C#

Есть строка вот такого типа:

105
Как отправить файл в телеграм бот?

Как отправить файл в телеграм бот?

Подскажите пожалуйста в интернете не нашёл как отправить любой файл форматаtxt,

178