【UE】从UI中拖拽生成物体

目录

效果

步骤

一、准备工作 

二、创建UI

三、创建Actor

四、拖拽生成Actor的逻辑


效果

步骤

一、准备工作 

1. 首先新建一个第三人称模板工程

2. 新建一个游戏模式基础,这里命名为“BP_UIGameMode”

在世界场景设置中设置游戏模式覆盖为“BP_UIGameMode”

3. 复制一份“ThirdPersonCharacter”作为默认的pawn类,这里更改命名为“BP_UICharacter”

4. 新建一个HUD类,这里命名为“BP_UIHUD”

5. 新建一个玩家控制器类,这里命名“BP_UIPlayerController”

6. 在选中的游戏模式中设置默认pawn类、HUD类、玩家控制器类为上面新建的

7. 为了能够在游戏运行时显示鼠标,可以打开玩家控制器“BP_UIPlayerController”,勾选“显示鼠标光标”

8. 此时运行游戏发现可以通过鼠标左键和鼠标右键控制摄像机的朝向,但是我们的目标是通过鼠标左键来实现拖拽效果的。因此需要打开“BP_UICharacter”,做一些修改。

首先添加一个布尔类型的变量,这里命名为“isCanTurn”,用于表示此时是否能够控制摄像机转向

在事件图表中添加如下节点,表示当按下鼠标右键时,可以控制摄像机转向,松开后就不能转向了

修改控制摄像机转向的逻辑,设置只有变量“isCanTurn”为True时才可以的转动摄像机

9. 删除场景中的“ThirdPersonCharacter”。此时运行游戏可以发现只能通过鼠标右键控制摄像机的旋转,鼠标左键无法再控制摄像机的旋转了。

二、创建UI

1. 首先创建一个铺满整个屏幕的控件蓝图,这里命名为“WBP_Main”

2. 打开“BP_UIHUD”,在事件图表中添加如下节点,使得控件蓝图“WBP_Main”能够被渲染到视口上

3. 接下来制作拖拽部分的UI,新建两个控件蓝图,这里分别命名为“WBP_DragUI”和“WBP_DragActor”,一个表示通过拖拽出图片来生成模型,另一个表示直接拖出模型

4. 先打开“WBP_DragUI”,设置自定义大小

删除画布面板

添加一个尺寸框控件

设置尺寸框的“宽度覆盖”和“高度覆盖”均为100

在尺寸框中添加一个图像控件

设置一下图像和图像着色

5. 接下来设置第二个控件蓝图“WBP_DragActor”,打开“WBP_DragActor”,这里除了颜色不同,其他所有地方和“WBP_DragUI”保持一致

6. 打开主界面“WBP_Main” ,将控件蓝图“WBP_DragUI”和“WBP_DragActor”拖入

此时运行游戏可以发现控件蓝图已经被添加到视口中

三、创建Actor

我们想从UI中通过拖拽的方式生成Actor,首先我们需要创建一个Actor蓝图,这里就命名为“BP_Cube”

打开“BP_Cube”,添加一个立方体形状的静态网格体

注意设置立方体没有碰撞

四、拖拽生成Actor的逻辑

1. 首先打开“WBP_DragUI”,添加一个覆盖函数,选择“按下鼠标按钮时”

我们需要在鼠标按下时侦测是鼠标哪个按键按下,这里设置的只侦测鼠标左键

再添加一个覆盖函数“发现拖动时”

当检测到鼠标拖动时,创建一个和自身一模一样的控件。由于上一步设置的只侦测鼠标左键的拖动事件,因此这里通过鼠标右键拖动是不会侦听到的。

此时效果如下:(鼠标左键按下UI不松,可以拖出UI)

 接下里我们就要在鼠标松开的时候生成actor,继续在“WBP_DragUI”中添加一个“拖动取消时”的重载函数

逻辑如下

此时已经可以通过拖拽出UI来生成actor了,效果如下:

为了增加代码复用性,我们新建一个蓝图函数库

这里命名为“BP_FunctionLibrary”

在蓝图函数库中新增一个函数,这里命名为“LineTraceReturnLocation”,表示射线检测返回射线碰撞位置

为该函数添加一个向量类型的输出,命名为“HitLocation”

函数内容如下

2. 回到“WBP_DragUI”,将拖动取消时事件的相关代码简化:

3. 下面制作从UI拖出Actor来生成Actor的功能,打开控件蓝图“WBP_DragActor”

同样的,添加一个“按下鼠标按钮时”的覆盖函数

函数逻辑如下:同样需要添加一个对鼠标左键拖动的侦听,然后生成一个Actor,其中变量“IsCubeCanMove”表示生成的方块是否可以进行移动

此时运行游戏发现只能在鼠标按下时生成方块但是无法拖动。

4. 打开主界面“WBP_Main” ,在图表中添加覆盖函数“鼠标移动时”

该函数逻辑如下

再添加“松开鼠标按钮时”

松开时设置方块不能移动

此时运行发现生成的Actor只能在小UI范围内拖动,因此我们需要在“WBP_Main”中再添加一个底图

设置锚点

设置完全透明

设置这个透明背景在最底层

此时运行效果如下:

 

相关文章:

【UE】两步实现“从UI中拖出Actor放置到场景中”-CSDN博客

下一篇:

【UI】从UI拖拽生成物体 —— 更改位置与定点销毁-CSDN博客

本篇参考视频:

https://www.bilibili.com/video/BV1mU4y117z9/?spm_id_from=333.999.0.0&vd_source=36a3e35639c44bb339f59760641390a8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/178384.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中切换tab路由,提示this.$confirm确定和取消执行不同的逻辑

beforeRouteLeave (to, from, next) { // 离开页面 if (this.editFlag true) { this.$confirm(页面尚未保存,确认离开吗?, 提示, { distinguishCancelAndClose: true, // 区分取消和关闭 confirmButtonText: 确定, cancelButtonText: 取消, type: info }).then(()…

RT-Thread 9. VS2012下仿真RT-Thread 和LVGL

1. 在ENV中添加组件 2. 下载组件 3. 生成代码 4. 打开代码 双击project.vcxproj 编译 5. 运行

Linux | 如何保持 SSH 会话处于活动状态

在远程服务器管理和安全数据传输中,SSH(Secure Shell)是不可或缺的工具。然而,它的便利性和安全性有时会因常见的问题而受到损害:冻结 SSH 会话。 此外,session 的突然中断可能会导致工作丢失、项目延迟和无…

深度学习_1 介绍;安装环境

深度学习 学习自李沐老师的课程。笔记主要以总结老师所讲解的内容以及我个人的想法为主,侵删! 课程链接:课程安排 - 动手学深度学习课程 (d2l.ai) 介绍 AI地图: 我们以前写的非 AI 类程序基本都是人自己去想会遇到什么样的问题…

基于transformer的解码decode目标检测框架(修改DETR源码)

提示:transformer结构的目标检测解码器,包含loss计算,附有源码 文章目录 前言一、main函数代码解读1、整体结构认识2、main函数代码解读3、源码链接二、decode模块代码解读1、decoded的TransformerDec模块代码解读2、decoded的TransformerDecoder模块代码解读3、decoded的De…

Ubuntu 20.04设置虚拟内存 (交换内存swap)解决内存不足

数据库服务器程序在运行起来之后,系统内存不足。 在系统监控中发现,当数据库服务程序启动后,占用了大量内存空间,导致系统的剩余的内存往往只有几十MB。 在ubuntu系统中,swap空间就是虚拟内存,所以考虑在磁…

【kubernetes】k8s对象☞pod

文章目录 1、什么是pod2、pod的使用2.1 用于管理pod的工作负载资源2.2 pod怎样管理多个容器2.3 pod 操作系统2.4 pod和控制器2.5 pod模板 3、pod的更新与替换3.1 资源共享和通信3.2 pod中的存储3.3 pod联网 4、容器的特权模式4.1 linux 特权容器4.2 windows特权容器 5、静态pod…

ES 8.x新特性一览(完整版)

一、看点 在 2022 年 2 月 11 日,Elasticsearch(ES)正式发布了 8.0 版本,而截止到 2023 年 10 月,历经一年半时间,ES官方已经连续发布了多个版本,最新版本为 8.10.4。这一系列的更新引入了众多引…

极智开发 | H100服务器的庐山真面目

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 H100服务器的庐山真面目。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq H100 是英伟达最强显卡,当然其实也…

【GitLab、GitLab Runner、Docker】GitLab CI/CD 应用

安装Gitlab开源版 官方文档-安装Gitlab 使用Docker安装 sudo docker run --detach \--hostname gitlab.example.com \--env GITLAB_OMNIBUS_CONFIG"external_url http://${ip}:9999/; gitlab_rails[gitlab_shell_ssh_port] 8822;" \--publish 443:443 --publish 99…

基于深度学习的人脸专注度检测计算系统 - opencv python cnn 计算机竞赛

文章目录 1 前言2 相关技术2.1CNN简介2.2 人脸识别算法2.3专注检测原理2.4 OpenCV 3 功能介绍3.1人脸录入功能3.2 人脸识别3.3 人脸专注度检测3.4 识别记录 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的人脸专注度…

自动驾驶算法(一):Dijkstra算法讲解与代码实现

目录 0 本节关键词:栅格地图、算法、路径规划 1 Dijkstra算法详解 2 Dijkstra代码详解 0 本节关键词:栅格地图、算法、路径规划 1 Dijkstra算法详解 用于图中寻找最短路径。节点是地点,边是权重。 从起点开始逐步扩展,每一步为一…

Python---字符串切片-----序列名称[开始位置下标 : 结束位置下标 : 步长]

字符串切片:是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。 本文以字符串为例。 基本语法: 顾头不顾尾: ----------类似range() 范围,顾头不顾尾 相关链接Python----ran…

k8s调度约束

List-Watch Kubernetes 是通过 List-Watch的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 List-Watch机制 工作机制:用户通过 kubectl请求给 APIServer 来建立一个 Pod。APIServer会将Pod相关元信息存入 etcd 中…

注册中心ZK、nameServer、eureka、Nacos介绍与对比

前言 注册中心的由来 微服务架构是存在着很多跨服务调用,每个服务都存在着多个节点,如果有多个提供者和消费者,当提供者增加/减少或者消费者增加/减少,双方都需要感知发现。所以诞生了注册中心这个中间件。 市面上有很多注册中心,如 Zookeeper、NameServer、Eureka、Na…

【Tomcat Servlet】如何在idea上部署一个maven项目?

目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例: 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…

2.4G合封芯片 XL2422,集成M0核MCU,高性能 低功耗

XL2422芯片是一款高性能低功耗的SOC集成无线收发芯片,集成M0核MCU,工作在2.400~2.483GHz世界通用ISM频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK调制器、GFSK解调器等功能模块,并且支持一对多线网和带ACK的通信模式。发射输…

【Windows-软件-OS】(01)Windows操作系统配置环境变量,快速上手

前言 "Windows"操作系统配置环境变量,快速上手; 实操 【实操一】 环境 Windows 11 专业版(22621.2428); 图片 (1) (2) (3) &#x…

HTTP和HTTPS本质区别——SSL证书

HTTP和HTTPS是两种广泛使用的协议,尽管它们看起来很相似,但是它们在网站数据传输的安全性上有着本质上的区别。 HTTP是明文传输协议,意味着通过HTTP发送的数据是未经加密的,容易受到拦截、窃听和篡改的风险。而HTTPS通过使用SSL或…

【vtk学习笔记4】基本数据类型

一、可视化数据的基本特点 可视化数据有以下特点: 离散型 计算机处理的数据是对无限、连续的空间进行采样,生成的有限采样点数据。在某些离散点上有精确的值,但点与点之间值不可知,只有通过插值方式获取数据具有规则或不规则的结…