Unity. Передача List<> в другой класс/

Пытаюсь сделать магазин и инвентарь скинов (на разных сценах). В магазине данные о предмете у меня содержатся в компоненте List, который я заполняю в инспекторе. Не знаю, насколько это целесообразно, посмотрел такую реализацию на YouTube, но магазин и инвентарь были реализованы в одной сцене через панели.

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

введите сюда описание изображения

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ShopManager : MonoBehaviour
{
    [System.Serializable] public class ShopItem
    {
        public Sprite Image;
        public int Price;
        public bool IsPurchased = false;
    }
    
      public  List<ShopItem> ShopItemsList;
   
    
    [SerializeField] Animator NoCoinsAnimation;


    [SerializeField] public Transform ShopScrollView;
    [SerializeField]public Button BuyButton;
  
    private GameObject _itemTemplate;
    private GameObject _gObject;
    private int _money;

   

    private void Start()
    {
        _money = PlayerPrefs.GetInt("Money");
        int lenght = ShopItemsList.Count;
        _itemTemplate = GameObject.FindWithTag("Template");
        for (int i = 0; i < lenght; i++)
        {
            _gObject = Instantiate(_itemTemplate, ShopScrollView);
            _gObject.transform.GetChild(0).GetComponent<Image>().sprite = ShopItemsList[i].Image;
            _gObject.transform.GetChild(1).GetChild(0).GetChild(0).GetComponent<Text>().text = ShopItemsList[i].Price.ToString();
            BuyButton = _gObject.transform.GetChild(1).GetComponent<Button>();
            BuyButton.interactable = !ShopItemsList[i].IsPurchased;
            BuyButton.AddEventListener(i, OnShopItemButtonClicked);

        }
        Destroy(_itemTemplate);
    }

    private void OnShopItemButtonClicked(int itemIndex)
    {
        if (_money >= ShopItemsList[itemIndex].Price)
        {
            ShopItemsList[itemIndex].IsPurchased = true;
            _money -= ShopItemsList[itemIndex].Price;
            PlayerPrefs.SetInt("Money", _money);
            BuyButton = ShopScrollView.GetChild(itemIndex).GetChild(1).GetComponent<Button>();
            BuyButton.interactable = false;
            BuyButton.image.color = new Color(0, 0, 0);
        }
        else
        {
            NoCoinsAnimation.SetTrigger("NoCoins");
        }
    }

}

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

public static class ButtonEvent 
{
    public static void AddEventListener<T>(this Button button, T parametr, Action<T> OnClick)
    {
        button.onClick.AddListener(delegate (){
            OnClick(parametr);
        });
    }

}

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

Автор решения: Даниил Ганин

Предлагаю создать в скрипте инвентаря две переменные:

public ShopManager SM;
private List<SM.ShopItem> ShopItemL;

В методе "Start()" берем значение из "SM" и передаем его в "ShopItemL"

ShopItemL = SM.ShopItemL;

Перетаскиваем Скрипт "ShopManager" в скрипт инвентаря

→ Ссылка