Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码

此章节相对较难理解,有时间单独出一章讲一下

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考

此代码仅为较上一P有所改变的代码

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

InventoryItem.cs
cs 复制代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[Serializable]
public class InventoryItem
{
    public ItemData data;//保存实打实的Item数据
    public int stackSize;//记录相同Item的数量
    public InventoryItem(ItemData _newItemData)//创建时就传入要保存的Item
    {
        data = _newItemData;
        AddStack();//由初始时由于没有相同类型的物体,为了使刚开始初始化便拥有值,此处必须调用一次此函数
    }

    public void AddStack() => stackSize++;
    public void RemoveStack() => stackSize--;
}
Inventory.cs
cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Inventory : MonoBehaviour
{
    public static Inventory instance;

    public List<InventoryItem> inventoryItems;//inventoryItems类型的列表
    public Dictionary<ItemData, InventoryItem> inventoryDictianory;//以ItemData为Key寻找InventoryItem的字典

    private void Awake()
    {
        if (instance == null)
            instance = this;
        else
            Destroy(gameObject);
        //防止多次创建Inventory
    }

    public void Start()
    {
        inventoryItems = new List<InventoryItem>();
        inventoryDictianory = new Dictionary<ItemData, InventoryItem>();
    }


    public void AddItem(ItemData _item)//将物体存入Inventory的函数
    {
        if(inventoryDictianory.TryGetValue(_item,out InventoryItem value))
        {
            value.AddStack();
        }//字典的使用,通过ItemData类型的数据找到InventoryItem里的与之对应的同样类型的数据
        else//初始时由于没有相同类型的物体,故调用else是为了初始化库存,使其中含有一个基本的值
        {
            InventoryItem newItem = new InventoryItem(_item);
            inventoryItems.Add(newItem);//填进列表里只有一次
            inventoryDictianory.Add(_item, newItem);//同上
        }
    }

    public void RemoveItem(ItemData _item)//将物体剔除Inventory的函数
    {
        if(inventoryDictianory.TryGetValue(_item,out InventoryItem value))
        {
            if (value.stackSize <= 1)
            {
                inventoryItems.Remove(value);
                inventoryDictianory.Remove(_item);

            }
            else
                value.RemoveStack();
        }
    }

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.L))
        {
            ItemData newItem = inventoryItems[inventoryItems.Count - 1].data;

            RemoveItem(newItem);
        }
    }
}
ItemObject.cs
cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ItemObject : MonoBehaviour
{
    private SpriteRenderer sr;

    [SerializeField] private ItemData ItemData;

    private void Start()
    {
        sr = GetComponent<SpriteRenderer>();

        sr.sprite = ItemData.icon;
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.GetComponent<Player>()!= null)
        {
            Inventory.instance.AddItem(ItemData);
            Destroy(gameObject);
        }
    }

}
相关推荐
咔咔学姐kk41 分钟前
大模型微调技术宝典:Transformer架构,从小白到专家
人工智能·深度学习·学习·算法·transformer
Jayyih1 小时前
嵌入式系统学习Day35(sqlite3数据库)
数据库·学习·sqlite
lingggggaaaa3 小时前
小迪安全v2023学习笔记(八十一讲)—— 框架安全&ThinkPHP&Laravel&Struts2&SpringBoot&CVE复现
笔记·学习·struts·安全·网络安全·laravel
CC数分3 小时前
零基础3个月上岸[特殊字符]自学数据分析路线
学习·数据挖掘·数据分析·大学生·考证
HAH-HAH3 小时前
【蓝桥杯 2024 国 Java A】粉刷匠小蓝
c++·学习·数学·算法·职场和发展·蓝桥杯·组合数学
qiu_zhongya3 小时前
unity以战斗截图并加上微信二维码分享
unity
酷讯网络_2408701604 小时前
多语言共享贩卖机投资理财共享售卖机投资理财系统
学习·开源
番薯大佬4 小时前
Python学习-day8 元组tuple
java·python·学习
wanzhong23334 小时前
ArcGIS学习-17 实战-密度分析
学习·arcgis
知识分享小能手5 小时前
React学习教程,从入门到精通,React 组件生命周期详解(适用于 React 16.3+,推荐函数组件 + Hooks)(17)
前端·javascript·vue.js·学习·react.js·前端框架·vue3