【UE5】库存系统——01

news/2024/9/13 22:17:55/ 标签: ue5

目录

 步骤

一、项目准备

二、制作数据表

三、与场景物体交互

五、制作可交互的物品


 步骤

一、项目准备

1.  新建一个项目,使用第一人称游戏模板,勾选初学者内容包

2. 新建一个蓝图类,父类选择“Actor组件”

这里命名为“Component_InventorySystem”,表示库存系统组件

打开“Component_InventorySystem”,添加两个函数。这里分别命名为“AddToInvertory”、“RemoveFromInventory”。分别表示“将物体添加到库存中”和“将物品从库存中移除”

添加一个整数类型变量,这里命名为“InventorySize”,表示库存容量大小

3. 我们还需要设置存储的内容,因此还需要添加一个数组变量。但是数组元素还没有定义,因此我们先创建一个结构,这里命名为“Struct_InventorySlot”

打开“Struct_InventorySlot”,添加两个变量如下,命名为“ItemID”、“Quantity”,分别表示物品ID、同类型物体的数量。

4. 回到“Component_InventorySystem”中,添加一个变量,命名为“Content”,表示库存的内容

变量类型设置为“Struct_InventorySlot”的数组形式。“复制”一项设置为“Replicated”,表示当服务器改变了变量“Content”的值时,在所有客户端中组件“Component_InventorySystem”中的“Content”的值也会跟着改变,但是必须在服务端来改变该值才行。

在组件的类默认值中,勾选“组件复制”,这样组件就能适配多人游戏

二、制作数据表

数据表的作用是用于储存游戏中可被收纳到背包中的物品。

1. 我们先打开第一人称角色蓝图“BP_FirstPersonCharacter”

添加上一步创建的组件“Component_InventorySystem”

设置“InventorySize”为16,表示角色背包有16个格子。“Content”一般通过其他程序设置,这里先空着。

2. 新增一个结构,这里命名为“Struct_Item”

打开“Struct_Item”,表示库存单位的一些属性。添加如下变量:

“Name”表示库存单位的名称;

“Description”表示库存单位的描述;

“Thumbnail”表示库存单位的外观缩略图;

“ItemClass”的作用是表示库存属于哪一种Actor;

“StackSize”表示一个格子最多可以放多少种同类的物品。

3. 创建数据表格

行结构选择我们刚创建的“Struct_Item”

这里命名数据表格为“DataTable_Item”,该数据表中将要存储的是背包中所有物品的具体信息。

目前数据表还是空的,等待后续添加数据。

三、与场景物体交互

1. 在项目设置中新建一个检测通道,通道命名为“Interactive”,默认响应为“忽略”

2. 打开“Component_InventorySystem”,添加一个函数,这里命名为“InteractrionTrace”

我们主要通过“按通道进行球体追踪”这个节点实现交互,该节点原理是一个球体从起点出发到终点然后将路线上碰到的第一个物体的碰撞信息返回,通过这种方式我们可以实现与场景中的物体交互。

完善函数逻辑如下,表示从摄像机的位置作为起点,沿着摄像机朝向向前走“InteractionRange”长度到达终点,对这一段路径上进行球体追踪,并且忽略组件“Component_InventorySystem”的拥有者自身的碰撞。

为了测试,我们可以在事件图表中设置通过T键调用函数“InteractrionTrace”

此时运行可以看到场景中多了如下一段圆柱,这就是球体追踪的路径。

向场景中添加一个方块,碰撞预设为Custom,碰撞响应中,Interactive设置为阻挡。

此时运行可以看到当追踪到方块时会显示绿色。

下面继续完善交互函数如下,当追踪到物体后再次判断追踪到的是否是同一个物体,如果不是同一个物体就将变量“Look at Actor”设置为追踪到的物体。

在事件图表中修改为每帧调用“Interaction Trace”

此时运行可以发现如果一直观察白方块也只打印一次“cube”,而当玩家观察别的地方后再观察白方块则再次打印“cube”

3. 当然,当追踪到物体后肯定不是打印这么简单,因此先删除打印节点,再添加一个蓝图接口,这里命名为“Interface_Interact”

打开“Interface_Interact”,添加两个接口函数,分别命名为“LookAt”和“InteractWith”

“LookAt”函数添加一个文本类型的输出

4. 回到组件“Component_InventorySystem”中,添加对接口函数的调用,这样当玩家看向一个Actor后,实现了接口“Interface_Interact”的Actor就会触发接口事件。

五、制作可交互的物品

1. 新建一个父类为Actor的蓝图类,这里命名为“BP_TestItem”

打开“BP_TestItem”,在类设置中实现接口“Interface_Interact”

双击左下角接口函数“Look At”来实现

这里先设置输出一句话

添加一个立方体组件

立方体的碰撞预设为custom,碰撞响应“Interactive”为阻挡

2. 将“BP_TestItem”拖入场景中

此时运行可以看到当玩家看向“BP_TestItem”,就会执行“LookAt”接口函数。

3. 下面我们需要将这个可交互的物品与数据表挂钩。新建一个Actor组件,这里命名为“Commpent_ItemData”

打开“Commpent_ItemData”,添加两个变量,分别命名为“ItemID”、“Quantity”

设置默认值

4. 打开数据表“DataTable_Item”,添加一行数据

5. 回到蓝图“BP_TestItem”,添加刚创建的组件“Commpent_ItemData”

 设置组件的默认值

完善接口函数逻辑如下,当接口函数“LookAt”被调用后,就会根据设置的类默认值“ItemID”查询数据表中该物体的其它信息,然后打印出来。

此时运行可以看到当玩家看向可交互物品“BP_TestItem”时,就会打印“我是方块信息”

参考视频:

https://www.bilibili.com/video/BV1Ks4y1x73s/?spm_id_from=pageDriver&vd_source=36a3e35639c44bb339f59760641390a8


http://www.ppmy.cn/news/1516236.html

相关文章

暴雨受邀参加深圳市计算机行业协会会员大会暨资源对接会

8月23日,由深圳市计算机行业协会举办的会员大会暨资源对接会在深圳圆满落幕。活动旨在促进会员企业的资源对接,促进企业间高效合作,共同迎接计算机行业的发展机遇与挑战。来自计算机行业的众多领军企业、专家学者及行业精英齐聚一堂&#xff…

【C++】13.特殊类的设计

一、请设计一个类,不能被拷贝 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可 C98 将拷贝构造函数与赋值运算符重载只声明不定义&a…

React 使用ref属性调用子组件方法(也可以适用于父子传参)

注意:①需使用hooks函数组件 ②使用了antDesign组件库(可不用) 如何使用 父组件代码 import React, { useState, useRef, useEffect } from react; import { Button } from antd; import Child from ./components/child;export defau…

vue3上传excel并在线预览

目录 前言 安装 xlsx 依赖 XLSX.utils.sheet_to_html XLSX.utils.sheet_to_json 前言 关于实现excel文档在线预览的做法,一种方式是通过讲文档里的数据处理成html,一种是将文档处理成图片进行预览,这里使用的是第一种。 安装 xlsx 依赖 …

【C语言篇】

C语言是一种广泛使用的计算机编程语言,它以其高效、灵活和功能强大而著称。以下是一些C语言中的常见知识点: 基本语法: 变量声明与初始化 数据类型(整型、浮点型、字符型等) 控制语句(if、for、while、do…

高可用 Go 服务开发

高可用的含义是尽量减少服务的不可用(日常维护或者突发系统故障)时长,提升服务的可用时长。如何衡量一个服务的可用性呢?或许你也听说过,通常企业可能会要求服务的可用性能能够达到三个 9(也就是 99.9%)或者 4个 9 &am…

Axios介绍;前后端分离开发的介绍;YAPI的使用;Vue项目简介、入门;Elementui的使用;nginx介绍

1 Ajax 1.1 Ajax介绍 1.1.1 Ajax概述 我们前端页面中的数据,如下图所示的表格中的学生信息,应该来自于后台,那么我们的后台和前端是互不影响的2个程序,那么我们前端应该如何从后台获取数据呢?因为是2个程序&#xf…

机器学习在旅游业的革新之旅

机器学习在旅游业的革新之旅 随着科技的飞速发展,尤其是人工智能(AI)技术的广泛应用,各个行业都迎来了前所未有的变革。其中,旅游业作为全球经济的重要支柱之一,更是受益匪浅。机器学习(Machin…

AWS SAM CLI 备忘单!

安装 AWS SAM CLI brew tap aws/tap brew 安装 aws-sam-cli 验证安装 $ sam --version 升级 SAM $ brew upgrade aws-sam-cli 您需要 AWS 凭证才能在 AWS 上工作。 构建并部署简单应用程序 $ sam init→ 下载示例应用程序 $ sam build→ 构建您的应用程序 $ sam deploy --guid…

绿色积分引领:我店平台的可持续消费革命

在当今数字化浪潮的推动下,“我店”凭借其创新的环保积分系统,在消费市场中脱颖而出,逐渐改变着市场的结构。本文将详细分析该平台的竞争优势、市场策略以及它如何利用创新手段塑造未来的消费趋势。 一、环保积分:消费体验革新的关…

永磁同步电机高性能控制算法(13)后续篇—— 基于高阶扩张状态观测器(ESO)的无模型预测控制(MFPC)

1.前言 前文已经介绍过了高阶ESO相对于传统ESO的优势。 https://zhuanlan.zhihu.com/p/703039702https://zhuanlan.zhihu.com/p/703039702 但是当时搭的ESO有点问题。把公式修正之后,发现前文用的改进四阶ESO无法使用。 今天来解释一下为什么改进4阶ESO无法使用…

SQL, 有终止条件的多次累计计算

MSSQL数据库的data表存储了多人上电梯的情况,turn表示进电梯的顺序。电梯最大承重1000公斤,每趟能上的人数有限,超重的人要等下一趟。nameweightturnAlice2501Bob1702Alex3503John4004Winston5005Marie2006 请计算每趟电梯最后一个进入的人的…

笔记整理—uboot启动过程(5)BL2板级初始化

上一章说到了uboot在BL2阶段大概都要干什么,也说到了为了实现这些要先进行内存排布,实现了这些后便可实现BL2部分的板级初始化。首先先来看一下init_fnc_ptr函数指针。 for(init_fnc_ptrinit_sequence;*init_fnc_ptr;init_fnc_ptr){if((*init_fnc_ptr)(…

gitlab迁移至新的服务器

第一步,查看旧服务器的gitlab版本,在新服务器上安装一个相同版本的 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/gitlab-ce-14.9.3-ce.0.el8.x86_64.rpm rpm -ivh gitlab-ce-1…

SSRF漏洞复现

目录 web-ssrfme ssrf攻击本地fastcgi漏洞复现 web-ssrfme 该漏洞需要部署在Linux下,拉取docker 映射到8091端口上,直接访问靶场ip的8091端口 进入题目,直接把源码给了,那我们分析源码,源码过滤了file协议、dict协…

WPS Office两个严重漏洞曝光,已被武器化且在野利用

WPS Office作为一款用户基数超过2亿的广泛使用的办公套件,被发现存在两个关键漏洞(CVE-2024-7262和CVE-2024-7263),这些漏洞可能导致用户遭受远程代码执行攻击。这两个漏洞的CVSS评分为9.3,表明它们的严重性很高&#…

安卓手机使用 Google Play 谷歌应用商店安装APP一直转圈等待

如果去国外旅游,可能需要安装一些当地的 APP 比如打车软件。 出发之前,在国内先把 APP 安装好。 首先,你要科学上网,才能在 Google play 里面搜索 APP。 然后,点安装,然后,就看到一直转圈&am…

SSRF以及CSRF

ssrf 服务端请求伪造:由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据 数据流:攻击者…

[数据集][目标检测]起子检测数据集VOC+YOLO格式1215张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1215 标注数量(xml文件个数):1215 标注数量(txt文件个数):1215 标注…

Docker 安装与配置 Docker Registry 指南

一、安装 Docker 解压docker.tar文件: rootiZbp1h35mcqj4eppj2bo1rZ:/data/dw# tar xf docker.tar解压后检查当前目录,发现解压出一个名为 docker_install 的目录。 进入解压出的目录并查看内容: rootiZbp1h35mcqj4eppj2bo1rZ:/data/dw# cd …