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

Надеюсь это поможет!!

Другие вопросы по тегам