『功能项目』QFrameWork框架重构OnGUI【63】
我们打开上一篇62QFrameWork背包框架的项目,

上文将功能实现在一个脚本中

本章要做的事情让脚本实现背包框架思想

首先按照图示创建脚本:

创建脚本:Item.cs

namespace QFramework {public class Item{//道具public string Key;public string Name;public Item(string key, string name){Key = key;Name = name;}}
}
创建脚本:Slot.cs

namespace QFramework {//插槽格子Slotpublic class Slot{public Item Item;public int Count;public Slot(Item item, int count){Item = item;Count = count;}}
}
创建脚本:QFramework.cs

using System.Collections.Generic;
namespace QFramework {public class ItemKit{//数据public static Item Item1 = new("item_1", "物品1");public static Item Item2 = new("item_2", "物品2");public static Item Item3 = new("item_3", "物品3");public static Item Item4 = new("item_4", "物品4");public static Item Item5 = new("item_5", "物品5");//插槽格子Slot列表public static List<Slot> Slots = new List<Slot>() {new Slot(Item1,1),new Slot(Item2,10),new Slot(Item3,1),new Slot(Item4,1),};//根据Key获取Itempublic static Dictionary<string, Item> ItemByKey = new Dictionary<string, Item>() {{ Item1.Key,Item1 },{ Item2.Key,Item2 },{ Item3.Key,Item3 },{ Item4.Key,Item4 },{ Item5.Key,Item5 },};//获取道具方法//Slot FindSlotByKey(string itemKey) {// return mSlots.Find(s => s.Item != null && s.Item.Key == itemKey && s.Count != 0);//}//获取道具方法public static Slot FindSlotByKey(string itemKey) => ItemKit.Slots.Find(s => s.Item != null && s.Item.Key == itemKey && s.Count != 0);//获取空格子方法public static Slot FindEmptySlot() => ItemKit.Slots.Find(s => s.Count == 0);//可以增加格子方法public static Slot FindAddableSlot(string itemKey){var slot = FindSlotByKey(itemKey);if (slot == null){slot = FindEmptySlot();if (slot != null)slot.Item = ItemKit.ItemByKey[itemKey];}return slot;}//增加道具方法public static bool AddItem(string itemKey, int addCount = 1){var slot = FindAddableSlot(itemKey);if (slot == null)return false;elseslot.Count += addCount;return true;}//减少道具方法public static bool SubItem(string itemKey, int subCount = 1){var slot = FindSlotByKey(itemKey);if (slot != null){slot.Count -= subCount;return true;}return false;}}
}
修改脚本:InventoryExample1.cs

using UnityEngine;
namespace QFramework.Example{public partial class InventoryExample1 : ViewController {void OnGUI(){//调用IM帮助类的设置设计分辨率函数IMGUIHelper.SetDesignResolution(640,360);foreach (var slot in ItemKit.Slots) {//创建一个"box"类型的水平布局图形用户界面GUILayout.BeginHorizontal("box");if (slot.Count == 0)GUILayout.Label($"格子:空");else//在水平布局图形用户界面中添加一个标签GUILayout.Label($"格子:{slot.Item.Name} x {slot.Count}");//结束水平布局组GUILayout.EndHorizontal();}GUILayout.BeginHorizontal();GUILayout.Label("物品1");//创建一个按钮 - 增加if (GUILayout.Button("+")){if (!ItemKit.AddItem("item_1"))Debug.Log("物品栏已满");}//减少if (GUILayout.Button("-")){ ItemKit.SubItem("item_1"); }GUILayout.EndHorizontal();GUILayout.BeginHorizontal();GUILayout.Label("物品2");//创建一个按钮 - 增加if (GUILayout.Button("+")) {if (!ItemKit.AddItem("item_2"))Debug.Log("物品栏已满");}//减少if (GUILayout.Button("-")) { ItemKit.SubItem("item_2"); }GUILayout.EndHorizontal();GUILayout.BeginHorizontal();GUILayout.Label("物品3");//创建一个按钮 - 增加if (GUILayout.Button("+")) {if (!ItemKit.AddItem("item_3"))Debug.Log("物品栏已满");}//减少if (GUILayout.Button("-")) { ItemKit.SubItem("item_3"); }GUILayout.EndHorizontal();GUILayout.BeginHorizontal();GUILayout.Label("物品4");//创建一个按钮 - 增加if (GUILayout.Button("+")) {if (!ItemKit.AddItem("item_4"))Debug.Log("物品栏已满");}//减少if (GUILayout.Button("-")) { ItemKit.SubItem("item_4"); }GUILayout.EndHorizontal();GUILayout.BeginHorizontal();GUILayout.Label("物品5");//创建一个按钮 - 增加if (GUILayout.Button("+")) {if (!ItemKit.AddItem("item_5"))Debug.Log("物品栏已满");}//减少if (GUILayout.Button("-")) { ItemKit.SubItem("item_5"); }GUILayout.EndHorizontal();}}
}
本章做了让脚本实现背包框架思想
接下来的文章内容:
1.QFrameWork道具栏物品生成
2.窗口可拖拽脚本
3.点击名称寻找地点功能
4.隐藏怪物的生成
5.怪物I攻击范围内的主动攻击
6.掉落坐骑蛋的获取
7.异步传送转换场景
以及开放回合制、坐骑系统、宠物系统、背包系统、神炼系统、商城系统、Boss的目标跟随任务导航系统以及UI播放3D动画效果等等。
具体项目运行效果请关注water1024的b站视频项目演示《破碎纪元》

【Unity回合2.5D】破碎纪元_单机游戏热门视频 (bilibili.com)
https://www.bilibili.com/video/BV1rZY4e9Ebs/?spm_id_from=333.999.0.0&vd_source=547091a95b03acfa8e8a9e46ef499cd6
相关文章:
『功能项目』QFrameWork框架重构OnGUI【63】
我们打开上一篇62QFrameWork背包框架的项目, 上文将功能实现在一个脚本中 本章要做的事情让脚本实现背包框架思想 首先按照图示创建脚本: 创建脚本:Item.cs namespace QFramework {public class Item{//道具public string Key;public string …...
4款AI生成PPT工具推荐,提升工作效率
在如今的工作环境中,PPT制作是许多技术人员不可避免的任务,尤其是在汇报、展示技术方案、以及项目进展时。随着AI技术的快速发展,使用AI生成PPT成为了提高效率的一种新趋势。本文将介绍几款适合程序员、技术人员的AI生成PPT工具,帮…...
3.postman脚本语言、接口关联(json引用(变量)、脚本用正则表达式)、断言封装、自动化构造接口请求(Postman工具)
一、Postman的脚本语言 1.使用js语言 2.pm变量 pm.sendRequest():发送HTTP请求 二、自动化实现接口关联 1.JSON引用 2.正则表达式(在test下编写如下脚本) //获取响应 console.log(responseBody) //re的方式获取token let token responseBody.match(&quo…...
基于SpringBoot框架的订餐系统设计与实现
文未可获取一份本项目的java源码和数据库参考。 选题的背景 伴随着当今计算机技术的日益发展,各种网络软件以及应用也是层出不穷,日新月异,大家都争先恐后的推出自己的产品来占领这一个广阔的市场。现在网上购物的软件系统种类繁多…...
基于JAVA+SpringBoot+Vue的医院后台管理系统
基于JAVASpringBootVue的医院后台管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈…...
基于SSM+Vue+MySQL的农家乐预约管理系统
系统展示 用户前台界面 管理员后台界面 农家乐后台界面 系统背景 随着乡村旅游的兴起,农家乐作为一种结合农业体验与休闲度假的新型旅游模式,受到了广大游客的青睐。然而,传统农家乐在预约管理方面存在效率低下、信息不透明等问题,…...
全新热门电商API接口,实现闲鱼商品详细搜索功能
近年来,电商行业蓬勃发展,API(Application Programming Interface)接口已经成为电商平台的重要组成部分。API接口不仅可以实现平台间的数据交互,还可以为开发者提供丰富的功能,满足用户多样化的需求。在这个…...
求10 个整数中最大值
我们需要10个整数之中求出10个整数之中的最大值所以我们先要将10个整数先放置到一个容器之中,我们初期就使用数组的形式存放10个数组即设置数组arr[10],我们要将10个数组之中的数字输出出来,我们这里使用的是遍历循环输出数组。我们这里是使用…...
数据结构不再难懂:带你轻松搞定排序算法
数据结构入门学习(全是干货)——排序算法(下) 1 快速排序 1.1 算法概述 快速排序采用分而治之的策略,与归并排序相似。其核心在于选择一个主元(pivot)作为分割点。 分而治之 主元(pivot)>…...
YOLOv8 OBB win10+ visual 2022移植部署
前言 想做一个目标旋转角度检测的工程,但是网上多少python的,或者linux的。在win10 visual 2022移植部署,记录一下。 参考 这篇文章没有C win10 环境下的部署教程,我相对于是对此做了补充。 1、下载工程 https://github.com/sh…...
E+H超声波物位仪FMU42-ATB2A22A
EH超声波物位仪FMU42-ATB2A22A是一款由德国EH(恩德斯豪斯)公司生产的超声波物位计,具有高精度、非接触式测量等特点,广泛应用于液体、浆料和粗料的物位测量。以下是对该产品的详细介绍: 一、产品特点 高精度测量&…...
Linux风险应对策略:保障系统安全的有效措施
Linux作为一种开源操作系统,因其稳定性和安全性被广泛应用于服务器、嵌入式系统和个人电脑等多个领域。然而,随着网络攻击手段的不断演变,Linux系统也面临着各种安全风险。本文将探讨Linux系统的主要风险及其应对策略,帮助用户提升…...
芝法酱学习笔记(0.3)——SpringBoot下使用mybatis做增删改查和报表
零、前言 书接上回,我们搭建了windows下的开发环境,并给出了一个hello world级别的多模块SpringBoot项目。 毕竟java后端开发,离不开数据库的操作,为方便后面内容的讲解,这里再做一期铺垫,core模块下新增一…...
windows msys2 编译x264 32位动态库
一、打开mingw32 查看gcc版本 gcc --version 提示找不到gcc,可以安装gcc pacman -S gcc 二、进入x264-master目录 cd /d/x264-master 执行 ./configure --prefix/d/x264-master/Bin --disable-asm --enable-static --enable-shared --disable-thread其中--disa…...
【pytorch】relu的实现逻辑
笔者最近在尝试实现AlexNet的底层算子,基于pytorch的框架,本文主要记录一下pytorch中是如何实现relu算子的。 首先最外层是位于torch\nn\modules\activation.py,主要代码如下: __constants__ ["inplace"]inplace: bool…...
【Python篇】深入机器学习核心:XGBoost 从入门到实战
文章目录 XGBoost 完整学习指南:从零开始掌握梯度提升1. 前言2. 什么是XGBoost?2.1 梯度提升简介 3. 安装 XGBoost4. 数据准备4.1 加载数据4.2 数据集划分 5. XGBoost 基础操作5.1 转换为 DMatrix 格式5.2 设置参数5.3 模型训练5.4 预测 6. 模型评估7. 超…...
简单学习 原码反码补码 学会了你才是真正的程序员了
一、简单介绍原码反码补码 首先我们需要知道的是原码反码补码是一个人为的行为,因为机器看的都是所谓的补码,这个反码只是作为补码的到原码也就是人能看懂的跳板,所以计算机无论是计算器里面的东西还是他底层运行的二进制代码都是补码&#x…...
基于规则的命名实体识别
基于规则的命名实体识别(Rule-Based Named Entity Recognition, NER)是一种通过预定义的模式或规则来识别文本中特定实体的方法。这种方法通常使用正则表达式来匹配文本中的实体。下面是一个更完整的示例,展示了如何使用正则表达式来识别文本…...
C语言从头学63—学习头文件stdlib.h(二)
6、随机数函数rand() 功能:产生0~RAND_MAX 之间的随机整数。 使用格式:rand(); //无参 返回值:返回随机整数 说明: a.RAND_MAX是一个定义在stdlib.h里面的宏,表示可以产生的最大随机整数&am…...
js判断一个对象里有没有某个属性
1. 使用in操作符 in操作符可以用来检测属性是否存在于对象或其原型链中。 const obj {a: 1, b: 2}; if (a in obj) { console.log(属性a存在于obj中); } else { console.log(属性a不存在于obj中); } 2. 使用hasOwnProperty()方法 hasOwnProperty()方法用来检测一个…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
