一、脚本编程
1、编辑IventoryManager C#文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MFarm.Iventory
{
public class InventoryManager : Singleton<InventoryManager>
{
[Header("物品数据")]
public ItemDataList_SO itemDataList_SO;
[Header("背包数据")]
public InventoryBag_SO playerBag;
public ItemDetails GetItemDetails(int ID)
{
return itemDataList_SO.itemDetailsList.Find(i=>i.itemID==ID);
}
public void AddItem( Item item ,bool toDestory)
{
int index = GetItemIndexInBag(item.itemID);
AddItemAtIndex(item.itemID,index,1);
Debug.Log(GetItemDetails (item.itemID).itemID +"Name:"+ GetItemDetails(item.itemID).itemName);
if (toDestory)
{
Destroy(item.gameObject);
}
}
private bool CheckBagCapacity()
{
for (int i = 0; i < playerBag.itemList.Count; i++)
{
if (playerBag.itemList[i].itemID ==0)
return true ;
}
return false ;
}
private int GetItemIndexInBag(int ID)
{
for (int i = 0; i < playerBag.itemList.Count; i++)
{
if (playerBag.itemList[i].itemID == ID)
return i;
}
return -1;
}
private void AddItemAtIndex(int ID, int index, int amount)
{
if (index == -1&& CheckBagCapacity())
{
var item = new InventoryItem { itemID = ID, itemAmount = amount };
for (int i = 0; i < playerBag.itemList.Count; i++)
{
if (playerBag.itemList[i].itemID == 0)
{
playerBag.itemList[i]= item;
break;
}
}
}
else
{
int currentAmount = playerBag.itemList[index].itemAmount+amount;
var item = new InventoryItem { itemID = ID,itemAmount = currentAmount };
playerBag.itemList[index] = item;
}
}
}
}
二、初步了解脚本编程
未完待续......
阅读更多作者文章:
# Unity3D 游戏开发:实现游戏背包数据结构(21)