Unity - "Новый" экземпляр пользовательского класса не отделен от другого экземпляра
Решил сам, я глупый
Решил сам, я глупый
Решил сам, я глупый
Смотрите мой ответ ниже.
Имея проблему с классами здесь, не уверен в причине.
В моей сцене 2 GameObjects создаются из одного и того же префаба. К каждому приложен скрипт InventoryManager, и в этом скрипте я создаю новый экземпляр класса Inventory, используя InventoryManager:
using UnityEngine;
using System.Collections;
public class InventoryManager : MonoBehaviour {
public Inventory inventory;
private ItemDatabase itemDatabase;
void Start ()
{
inventory = new Inventory (9);
}
}
Но по какой-либо причине любые значения List в моем классе Inventory распределяются между обоими экземплярами GameObject.
Вот пик класса инвентаря:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[System.Serializable]
public class Inventory
{
public int ID;
public List<Item> items = new List<Item>();
public int maxSize;
public static int inventoryCount;
public Inventory(int size)
{
ID = inventoryCount;
inventoryCount++;
maxSize = size;
}
}
В основном, когда я добавляю новую вещь в
gameobject1.GetComponent<InventoryManager>().inventory.Add(item1);
(Метод add существует, он немного длинный, поэтому я буду публиковать его только по запросу)
Он также будет отображаться в инвентаре gameobject2.
3 ответа
Хорошо, так что я чувствую себя полным дураком, и, конечно, я бы решил эту проблему после публикации.
По сути, я сделал очень, очень глупую ошибку, взяв то, что мой пользовательский интерфейс отображал по номинальной стоимости, вместо того, чтобы использовать инспектор, чтобы увидеть, что было на самом деле в инвентаре.
Проблема была в том, что мой пользовательский интерфейс отображал неправильные данные.
Вы видите это inventoryCount
также поднимается на вашем втором игровом объекте? Если это ваш индикатор того, что в gameobject2 есть объект items
Переменная это не так. inventoryCount
статичен и будет одинаковым во всех случаях Inventory
, Попробуйте удалить static
ключевое слово из inventoryCount
Давайте посмотрим на ваш существующий код:
gameobject1.GetComponent<InventoryManager>().inventory.Add(item1);
В выше inventory
не является членом вашей InventoryManager
класс и GetComponent
сам по себе возвращает экземпляр своего класса. Я считаю, что вы хотите добавить элемент в List<Item>
имущество. Таким образом, код должен быть таким, как показано ниже:
gameobject1.GetComponent<InventoryManager>().Items.Add(item1);
Редактировать:
Согласно обновленному вопросу, предлагаемое решение будет
gameobject1.GetComponent<InventoryManager>().inventory.Items.Add(item1);
Надеюсь это поможет!!