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 шт):
[ благодарность 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 - это метод который сделит за изменениями параметров в обьекте. Если значение любого параметра было изменено - он вызывается. Таким макаром ты сможешь отследить момент, когда именно значение реально у тебя меняется.