首页 > 其他分享 >Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码

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

时间:2024-03-19 23:36:00浏览次数:31  
标签:11 Inventoty InventoryItem ItemData void System using 源代码 public

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

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考
此代码仅为较上一P有所改变的代码

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

InventoryItem.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
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
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);
        }
    }

}

 

标签:11,Inventoty,InventoryItem,ItemData,void,System,using,源代码,public
From: https://blog.csdn.net/Homura_/article/details/136858101

相关文章

  • 51nod1174 区间中最大的数RMQ
    给出一个有n个数的序列,下标0~n-1,有Q次查询,每次询问区间[l,r]的最大值。如果有修改,可以考虑线段树,这里只有静态查询,可以用ST表,预处理时间O(nlogn),单次查询时间O(1)。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definerep(i,a,b)for(inti=a;i<=b;i......
  • 【ARM 嵌入式 C 入门及渐进11 -- 确保数据写入寄存器】
    文章目录背景1.内存障碍2.对齐访问3.缓存一致性4.写缓冲区背景在ARM架构中,要确保通过write函数写入的数据真正地被写入到寄存器中,需要考虑几个方面:内存障碍(MemoryBarrier):使用内存障碍指令来确保之前的所有内存操作完成后再执行后续的指令。对齐访问:确保......
  • 【优化布局】机器学习求解4G网络无人机布局优化问题【含Matlab源码 4113期】
    ......
  • A_Star算法无人机威胁概率地图避障三维航迹规划(目标函数:最短路径)【含Matlab源码 4115
    ......
  • [SCOI2011][洛谷P3275] 糖果
    本来这是一道差分约束板子题/水题SPFA-BFS和SPFA-DFS都能过BFS#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllN=100005;#definemax(a,b)((a)>(b)?(a):(b))#definemin(a,b)((a)<(b)?(a):(b))structedge{ intto,next,w;}e[N*1000]......
  • VM创建win11虚拟机
    1.准备文件   通过微软官网下载iso磁盘映像文件https://www.microsoft.com/zh-cn/software-download/windows11 2.虚拟机创建 (1)创建新的虚拟机-导入win11iso文件;   (2)命名并选择安装位置;  (3)选择加密(最好找个是方保存下密码)   ......
  • CF1139E Maximize Mex
    传送门题意:在一所学校里有\(n\)名学生和\(m\)个社团,社团被编号为\(1\)~\(m\)。第\(i\)个学生有一个能力值\(p_i\),且属于社团\(c_i\)(每个学生恰好属于一个社团)。学校将要举行一个为期\(d\)天的活动,每天学校要举行一场程序设计比赛——校长将会从每个社团中各选......
  • 111
    importosimporttorchimportlpipsfromPILimportImage#初始化LPIPS模型loss_fn=lpips.LPIPS(net='vgg')defcalculate_lpips(folder1,folder2,ext1='.jpg',ext2='.png'):#获取文件夹中的文件名filenames=[fforfinos.listdi......
  • zhipuai的GLM-4模型API访问出现错误: ConnectError: TLS/SSL connection has been clo
    1简介访问zhipuai的GLM-4模型的API时,挂上梯子后访问失败,显示ConnectError:TLS/SSLconnectionhasbeenclosed(EOF)(_ssl.c:1131)报错信息如下{ "name":"ConnectError", "message":"TLS/SSLconnectionhasbeenclosed(EOF)(_ssl.c:1131)",......
  • CF1139D Steps to One
    期望就是\(\sum序列长度\times这个长度的概率\)我们先想长为\(x\)的序列出现的概率为多大长度为\(i\)的序列,对于每个约数,约数集合为\(\sigma\),出现概率为\(\sum_{p\in\sigma}(\frac{\lfloor\frac{m}{p}\rfloor}{m})^{i-1}\times\frac{m-\lfloor\frac......