我制作了一個 ScriptableObject 專案并為它創建了一個預設:
public class Item : ScriptableObject
{
public enum ItemType
{
Key,
Consumable
}
public new string name;
public ItemType itemType;
public string description;
public int amount = 1;
public bool isStackable = false;
}
Matches.asset:

使用腳本我將此專案資產添加到庫存:
SC_FPSController.inventory.AddItem(item);
public void AddItem(Item item)
{
if (!item.isStackable || itemList.Count == 0)
{
itemList.Add(item);
}
else
{
foreach (Item invItem in itemList)
{
if (invItem.name == item.name)
{
invItem.amount = item.amount;
}
else
{
itemList.Add(item);
}
}
}
}
當我洗掉專案數量時,它不僅會更改 itemList 專案,還會更改資產。
public void RemoveItem(Item item)
{
Item searchedItem = itemList.Find(i => i.name == item.name);
searchedItem.amount -= 1;
if (searchedItem.amount == 0)
{
itemList.Remove(searchedItem);
}
}
所以當我呼叫 RemoveItem 函式時,資產變成這樣:

如何解決這個問題,有什么問題?也許它將專案資產作為指標?
uj5u.com熱心網友回復:
為了在運行時進行您想要的更改,并確保它們不會影響原始資產呼叫實體化,并使用回傳值(這將從原始值制作副本)。
var itemInstance = GameObject.Instantiate(asset);
itemInstance.DoWhatever();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485842.html
