Unity背包系统

本文章记录麦扣老师相关的背包系统代码

首先是ScriptableObject数据存储相关

一个Item类一个Inventory类

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

[CreateAssetMenu(fileName ="NewData",menuName ="Iventory/New Item")]
public class Item : ScriptableObject
{
    public string itemName;
    public Sprite itemImage;
    public int itemHeld =1;
    [TextArea]
    public string itemInfo;
    public bool equal;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName ="New Inventory",menuName = "Iventory/New Inventory")]
public class Iventory : ScriptableObject
{
    public List<Item> items = new List<Item>();

}

然后是背包文件预设体

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

public class Slot : MonoBehaviour
{
    public Item SlotItem;
    public Image SlotImage;
    public Text ItemNum;

    public void ItemOnclick()
    {
        InventoryManager.UpdateItemInfo(SlotItem.itemInfo);
    }
}

数据的获取是InventoryManager->Slot预设体->ScriptableObject

挂载在场景物体的代码

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

public class ItemOnworld : MonoBehaviour
{
    public Item thisItem;
    public Iventory playeriventory;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            AddList();
            Destroy(gameObject);
        }
    }

    public void AddList()
    {
        if (!playeriventory.items.Contains(thisItem))
        {
            playeriventory.items.Add(thisItem);
         
        }
        else
        {
            thisItem.itemHeld += 1;
        }

        InventoryManager.RefeshItem();
    }
}

InventoryManager类

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

public class InventoryManager : MonoBehaviour
{
    public static InventoryManager Instance;
    public Iventory myBag;
    public GameObject slotGrid;
    public Slot slotPrefab;
    public Text itemInformation;
    private void Awake()
    {
        Instance = this;
    }

    private void OnEnable()
    {
        RefeshItem();
        Instance.itemInformation.text = "";
    }

    public static void UpdateItemInfo(string itemDes)
    {
        Instance.itemInformation.text = itemDes;
    }

    public  static  void CreateItem(Item item)
    {
        Slot newItem = Instantiate(Instance.slotPrefab, Instance.slotGrid.transform.position, Quaternion.identity);
        newItem.gameObject.transform.SetParent(Instance.slotGrid.transform);
        newItem.SlotItem = item;
        newItem.SlotImage.sprite = item.itemImage;
        newItem.ItemNum.text = item.itemHeld.ToString();
    }

    public static void RefeshItem()
    {
        for(int i = 0; i< Instance.slotGrid.transform.childCount; i++)
        {
            Destroy(Instance.slotGrid.transform.GetChild(i).gameObject);
        }

        for(int i = 0; i < Instance.myBag.items.Count; i++)
        {
            CreateItem(Instance.myBag.items[i]);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity背包系统是一个游戏中常用的组件,用于管理玩家在游戏中所获得的道具。一个完整的背包系统通常由数据、逻辑和UI三部分组成。在设计过程中,我们首先进行UI设计,包括背包的标题、关闭键和背包内的格子容器。 背包系统的数据部分主要负责管理物品的信息,例如物品的名称、图片、数量等。逻辑部分负责实现将物品放置进背包、对背包内物品进行管理以及使用背包内物品等功能。实际上,当我们获取或移动物品时,我们会直接修改背包数据库中的物品信息。修改完成后,我们通过背包中的UI元素来获取背包数据库中相应索引的物品信息,并将物品栏中的UI信息更新为数据库中对应序号的物品的图片和数量。 通过将背包系统分解为数据、逻辑和UI三部分,我们可以有效地管理背包系统的复杂逻辑关系,并使代码更加清晰和易于维护。这种设计模式有助于提高游戏开发的效率和代码质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unity游戏开发:背包系统的实现](https://blog.csdn.net/float_freedom/article/details/126243888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Unity3D RPG实现 2 —— 背包系统](https://blog.csdn.net/weixin_43757333/article/details/123187025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值