关于在unity中实现背包系统

本文作者分享了在Unity中实现背包系统的过程,参考了codeMonkey的教程,强调了背包系统的灵活性和定制性,讨论了如何根据项目需求调整设计,包括数据保存、动态扩展和不同类型的背包功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原本以为这东西会如我以往那般代码量并不会过多,但事实是,代码量远超出了我的想象

首先,这个系统参考了codeMonkey大佬的教程,以下是他视频B站的搬运视频的链接,搬运视频的简介里会有油管的原视频链接,我个人建议去看大佬的教程,人家讲的确实好

【搬运】Unity简单背包系统实现 Simple Inventory System in Unity_哔哩哔哩_bilibili

在原来大佬教程的理解上(虽然我现在感觉我是理解了个寂寞)我认为背包系统应该要有方便保存数据的特性,所以保存数据的对象应当尽量的小,并且应尽可能的方便在开发时能尽可能方便的加入新的物品,所以我尝试实现了自己的想法。

接下来是我个人对于背包系统的理解,一种是刻板印象里的背包,如《像素地牢》里面的人物背包主要强调用于保存玩家获得的物品,而另一种并不像刻板印象的背包,但它又如背包那样可以保存,获取,调用,但相比于刻板印象中的背包强调 “保存” 而它是强调 “调用”(类似于《元气骑士》里的武器吧) 与其叫她为背包或许叫它装备更为合适,可能这种的 “背包”真的被称为装备吧,学的不多欢迎指教,总之,不同的 “背包” 侧重点不同,因此背包系统不应像保存数据的系统和对象池一样,有着固定通用的设计思路,应该根据项目的需要定制。

说回正题,因为这个系统涉及的类太多了所以我制作了一个关系图,这样或许能直观点,但是相比于以往少了大量的注释,可能日后会补上吧(终于我也要变成自己讨厌的人了吗?)

以下是各类的脚本代码

首先是ItenData和ItemDataType类(我把它们写一起了)

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


[CreateAssetMenu(menuName = "ZiZhiLei/物品类", fileName = "ItemData")]
public class ItemData : ScriptableObject //为什么要创建一个ScriptableObject容器而不是写一个脚本的呢
                                         //因为创建脚本要把他挂载到游戏对象上,甚至还要放到场景中(当然,有预制体可能不用)
                                         //而ScriptableObject不用
{
    [Header("元素号就是物品对象在list中的位置")]
    public List<ItemDataType> list=new List<ItemDataType>();
}
[System.Serializable]
public class ItemDataType
{
    //这里的这些数据感觉可以放在一个结构体里
    [Tooltip("物品的名字")]
    public string name;
    [Tooltip("物品的图标")]
    public Sprite ItemSprite;
    [Tooltip("物品能否堆叠")]
    public bool IsStacking;
    [Tooltip("物品的数值")]
    public float ItemValue;
}

criptableObject容器就跳过了(详情可以参考我以前的帖子)

ItemDataManager类

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

public class ItemDataManager : MonoBehaviour  //这个类似于中介将背包类
{
        //说一下我对于C#中对委托这一概念的理解,
        //委托可以在一个类中调用事先存入的一个另一个类的方法,
        //而调用时这个方法还是在拥有哪个方法的类中运行的,
        //因此委托只是一个类去调用令一个类的“权限”,
        //但是这种调用相比实例化后的直接调用可以更加灵活

    public ItemData _itemData;//这里未来可能要改成主动获取而不是挂载

    private void Start()
    {
    }
    public  ItemDataType GatItemData(int Number)//获取变量
    {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值