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

Как передать количество необходимых позиций из первого скрипта, отвечающего за каталог продукции, во второй скрипт, отвечающий за склад? Необходимо учесть, что список товаров во втором скрипте пуст и заполняется только при доступе к нему через первый скрипт. Можете посоветовать метод передачи этой информации между скриптами?
  • 8 июня 2024 г. 15:41
Ответы на вопрос 2
Для передачи значения переменной из одного скрипта в другой в зависимости от условия можно использовать механизмы передачи аргументов функции или работу с глобальными переменными. 

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

Первый скрипт (каталог продукции):
```python
required_positions = 10 # количество необходимых позиций
import second_script

# при доступе к списку товаров на складе, передаем количество необходимых позиций
second_script.fill_positions(required_positions)
```

Второй скрипт (склад):
```python
positions = []

def fill_positions(required_positions):
    global positions
    for i in range(required_positions):
        positions.append(f"Position {i+1} added")

# дальнейшая логика работы со списком positions
``` 

Таким образом, при доступе к списку товаров на складе через первый скрипт, количество необходимых позиций будет передано и список positions будет заполнен соответствующим образом.
public class ProductCatalog : MonoBehaviour
{
    [System.Serializable]
    public class Product
    {
        public string name;
        public Sprite image;
        public float price;
    }

    [System.Serializable]
    public class Category
    {
        public string categoryName;
        public List<Product> products;
    }

    public List<Category> categories;

    public TMP_Dropdown categoryDropdown;
    public Transform productGrid;
    public GameObject productItemPrefab;

    void Start()
    {
        PopulateCategories();
        categoryDropdown.onValueChanged.AddListener(delegate { DisplayProducts(categoryDropdown.value); });
        DisplayProducts(0); // Отображаем первую категорию по умолчанию
    }

    void PopulateCategories()
    {
        List<string> options = new List<string>();

        foreach (var category in categories)
        {
            options.Add(category.categoryName);
        }

        categoryDropdown.ClearOptions();
        categoryDropdown.AddOptions(options);
    }

    void DisplayProducts(int categoryIndex)
    {
        // Очистить старые элементы
        foreach (Transform child in productGrid)
        {
            Destroy(child.gameObject);
        }

        Category selectedCategory = categories[categoryIndex];

        foreach (var product in selectedCategory.products)
        {
            GameObject item = Instantiate(productItemPrefab, productGrid);
            item.transform.Find("ProductName").GetComponent<TMP_Text>().text = product.name;
            item.transform.Find("ProductImage").GetComponent<Image>().sprite = product.image;
            item.transform.Find("ProductPrice").GetComponent<TMP_Text>().text = "$" + product.price.ToString("F2");
          

        }
    }
}


И второй

public class Stock : MonoBehaviour
{
    //Phone

    public int _display;
    public int _speaker;
    public int _microphone;
    public int _case;
    
   

}
Похожие вопросы