Unity3D 游戏开发:人物拾取功能 将拾取物品参数传递到背包数据列表 下(22)

146 阅读1分钟

一、脚本编程

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);//拿到物品ID或判断有没有物品

            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)