『功能项目』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()方法用来检测一个…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...