Instantiate теряет значения класса при попытки инстантиировать его - Unity C#

Пытаюсь сделать инвентарь, но столкнулся с такой проблемой, что при копировании GameObject'а из инстанса класса, теряется информация (в скопированном инстансе). Пример:

public void DropItem(Item item)
{
    Debug.Log(item.Count);         //Count = 6

    Item go = Instantiate(item);
    Debug.Log(go.Count);            //Count = 1 (as default)
}

Просто не пойму почему.

Как можно не терять значения класса Item, инстантиируя класс?

Item.cs:

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

public class Item : MonoBehaviour
{
    public string Id = "item_id";
    public string Name = "Item name";
    
    public int Count = 1;
    public int MaxCount = 16;

    public Sprite Sprite;
}

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

Автор решения: Andrew

[ благодарность aepot за то что заставил перепроверить свои слова и не дать солгать в ответе ]

Я скопировал твой класс себе в пустой проэкт и написал код которым проверял работу Instantiate.

Разместил на сцене два обьекта - один твой итем, который и назвал итемом. И второй - тест. Для проверки работы инстансиейта.

public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        var item = GameObject.Find("Item");

        var baseCopy = Instantiate(item);
        var baseCopyInfo = baseCopy.GetComponent<Item>();
        
        var itemInfo = item.GetComponent<Item>();
        // меняем стандартное значение
        itemInfo.Count = 50;

        var copy = Instantiate(item);
        var copyInfo = copy.GetComponent<Item>();

        var componentCopy = Instantiate(itemInfo);

        Debug.Log("BaseCopyInfo " + baseCopyInfo.Count);
        Debug.Log("ItemInfo " + itemInfo.Count);
        Debug.Log("50 copy Info " + copyInfo.Count);
        Debug.Log("component copy Info " + componentCopy.Count);


    }

информация из лога:

BaseCopyInfo 1

ItemInfo 50

50 copy Info 50

component copy Info 50

Смею предположить что если такова проблема и есть у тебя в проэкте, то она кроется извне метода Instantiate и извне метода DropItem.

Думаю что для дебага тебе нужно использовать метод OnValidate - это метод который сделит за изменениями параметров в обьекте. Если значение любого параметра было изменено - он вызывается. Таким макаром ты сможешь отследить момент, когда именно значение реально у тебя меняется.

→ Ссылка