当前位置: 首页 > news >正文

UE C++ 实时加载模型的总结

一.总体思路:

如果实时加载UE模型,需要先将之前的模型删除。再生成出来,放在根节点,保持相对位置,相对的俯仰角。

void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z)
{//m_weaponMap.Empty();//生成工厂if (m_weaponMap.Contains(ID)){AActorBase* ab =Cast<AActorBase>(*m_weaponMap.Find(ID));if (ab != nullptr && ab->IsValidLowLevel() && !ab->IsPendingKill()){ab->Destroy();}m_weaponMap.Remove(ID);}ATargetFactory* TargetFactory = GetWorld()->SpawnActor<ATargetFactory>();//FString tmpWeaponPath = UKismetSystemLibrary::GetProjectDirectory() + "Plugins/HMSCore/Saved/Config/" + "AG_300M" + ".Json";FString tmpWeaponPath = UKismetSystemLibrary::GetProjectDirectory() + "Plugins/HMSCore/Saved/Config/" + m_WeaponType[Type] + ".Json";AActorBase* TargetActor = TargetFactory->TargetSpawn(ETargetType::WEAPON_TYPE, tmpWeaponPath);TargetActor->SetID(ID);TargetActor->AttachToComponent(Cast<USceneComponent>(RootComponent), FAttachmentTransformRules::KeepRelativeTransform);TargetActor->SetActorRelativeLocation(FVector(X, Y, Z));//UE_LOG(LogTemp, Warning, TEXT("%f, %f , %f"), it.PositionX, it.PositionY, it.PositionZ);TargetActor->SetActorRelativeRotation(FRotator(0, 0, 0));TargetActor->SetScale(FVector(1, 1, 1));m_weaponMap.Add(ID, TargetActor);TargetFactory->Destroyed; 
}

二.管理Map

TMap<int, UObject*>	m_weaponMap;	//组件字典

首先看武器的Map里是否,包含之前加载的武器模型。如果包含这个ID的武器。找到并拿到它,销毁。然后在Map里移除这个指针。

	if (m_weaponMap.Contains(ID)){AActorBase* ab =Cast<AActorBase>(*m_weaponMap.Find(ID));if (ab != nullptr && ab->IsValidLowLevel() && !ab->IsPendingKill()){ab->Destroy();}m_weaponMap.Remove(ID);}

重新生成,m_WeaponType在构造时初始化,工厂然后通过,工厂生成武器。

	TMap<int32, FString> m_WeaponType;  //武器字典2321F
ATargetFactory* TargetFactory = GetWorld()->SpawnActor<ATargetFactory>();
//FString tmpWeaponPath = UKismetSystemLibrary::GetProjectDirectory() + "Plugins/HMSCore/Saved/Config/" + "AG_300M" + ".Json";
FString tmpWeaponPath = UKismetSystemLibrary::GetProjectDirectory() + "Plugins/HMSCore/Saved/Config/" + m_WeaponType[Type] + ".Json";
AActorBase* TargetActor = TargetFactory->TargetSpawn(ETargetType::WEAPON_TYPE, tmpWeaponPath);

武器生成后,就可以了,然后销毁工厂。

设置ID,让它们绑定到组件上,将根组件变为USceneComponet组件,就有位置信息。

AttachToComponent(USeneComponnet,FAttachmentTransformRules::KeepRelativeTransform).

让后设置相对于根节点的相对位置。

TargetActor->SetID(ID);TargetActor->AttachToComponent(Cast<USceneComponent>(RootComponent), FAttachmentTransformRules::KeepRelativeTransform);TargetActor->SetActorRelativeLocation(FVector(X, Y, Z));//UE_LOG(LogTemp, Warning, TEXT("%f, %f , %f"), it.PositionX, it.PositionY, it.PositionZ);TargetActor->SetActorRelativeRotation(FRotator(0, 0, 0));TargetActor->SetScale(FVector(1, 1, 1));m_weaponMap.Add(ID, TargetActor);TargetFactory->Destroyed; 

如果想要不在跟组件上,就使用如下代码。

			int WeaponID = FCString::Atoi(*it.NodeID);TargetActor->SetID(WeaponID);if (m_childComponentMap.Contains(it.ParentName))TargetActor->AttachToComponent(Cast<USceneComponent>(m_childComponentMap[it.ParentName]), FAttachmentTransformRules::KeepRelativeTransform);elseTargetActor->AttachToComponent(Cast<USceneComponent>(RootComponent), FAttachmentTransformRules::KeepRelativeTransform);TargetActor->SetActorRelativeLocation(FVector(it.PositionX, it.PositionY, it.PositionZ));UE_LOG(LogTemp, Warning, TEXT("%f, %f , %f"), it.PositionX, it.PositionY, it.PositionZ);TargetActor->SetActorRelativeRotation(FRotator(it.RotationPitch, it.RotationYaw, it.RotationRoll));TargetActor->SetScale(FVector(it.ScaleX, it.ScaleY, it.ScaleZ));m_weaponMap.Add(WeaponID, TargetActor);

删除map,可以用for(auto& it:Map).逐个Destroy。再Reset重置。

void HMSTargetManager::RemoveTarget(int targetID)
{AActorBase* ab = *m_TargetMap.Find(targetID);if (ab != nullptr){ab->Destroy();}m_TargetMap.Remove(targetID);
}void HMSTargetManager::RemoveAllTarget()
{for (auto& it:m_TargetMap){AActorBase* ab = it.Value;if (ab != nullptr){ab->Destroy();}}m_TargetMap.Reset();
}

相关文章:

UE C++ 实时加载模型的总结

一.总体思路&#xff1a; 如果实时加载UE模型&#xff0c;需要先将之前的模型删除。再生成出来&#xff0c;放在根节点&#xff0c;保持相对位置&#xff0c;相对的俯仰角。 void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z) {//m_weaponMap.Emp…...

实施威胁暴露管理、降低网络风险暴露的最佳实践

随着传统漏洞管理的发展&#xff0c;TEM 解决了因攻击面扩大和安全工具分散而产生的巨大风险。 主动式 TEM 方法优先考虑风险并与现有安全工具无缝集成&#xff0c;使组织能够在威胁被有效利用之前缓解威胁。 为什么威胁暴露管理 (TEM) 在现代网络安全策略中变得至关重要&…...

51.哀家要长脑子了!

1.P1003 [NOIP2011 提高组] 铺地毯​​​​​​ 重复 模拟 要求覆盖在最上面的地毯编号&#xff0c;用四个数组abgk分别记录地毯起点的左下角横纵坐标&#xff0c;地毯的长度宽度&#xff0c;输入的坐标x y 当它满足大于等于左下角坐标 并且 小于等于 地毯左下角横纵坐标的时候…...

Overleaf 无法显示图片

问题描述 在Overleaf中的代码为&#xff1a; \begin{figure}\centering\includegraphics[width0.98\linewidth]{figures/test.png}\caption{This is a test.}\label{fig:test} \end{figure}但无法正常显示图片&#xff1a; 解决方案 修改编译模式为正常Normal而非快速Fast …...

如何实现 C/C++ 与 Python 的通信?

在现代编程中&#xff0c;C/C与Python的通信已经成为一种趋势&#xff0c;尤其是在需要高性能和灵活性的场景中。本文将深入探讨如何实现这两者之间的互通&#xff0c;包括基础和高级方法&#xff0c;帮助大家在混合编程中游刃有余。 C/C 调用 Python&#xff08;基础篇&#…...

音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现

一、SCRIPTDATAVALUE类型 从《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中可以知道&#xff0c;根据《video_file_format_spec_v10_1.pdf》第80到81页&#xff0c;SCRIPTDATAVALUE类型由一个8位&#xff08;1字节&#xff09;的Type和…...

jvm里的metaspace oom 排查问题思路-使用MAT

文章目录 metapace oom 问题排查点-1-duplicate class 数量排查点-2-classloader 数量一些可能迷惑人的方向 metapace oom 问题 metapace 问题都是由加载的class 太多&#xff0c;导致内存不够报出来的。 排查点-1-duplicate class 数量 首先看这里&#xff0c;通常一个clas…...

2025舜宇招聘【内推码】

【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇集团2025届全球校园招聘正式启动&#xff01;&#xff01;&#xff01; 专业需求&#xff1a;机械、自动化、电子、电气、通信、控制、测控、计算机、软件、物理、光学等专业&#xff1b; 工作地点&#xff1a;宁波余姚、浙江杭州、广东…...

APP自动化搭建与应用

APP自动化环境搭建 用于做APP端UI自动化&#xff0c;adb连接手机设备。 需要的工具java编辑器&#xff1a;jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步&#xff1a;安装sdk&#xff0c;里面包含建立工具bu…...

kafka-windows集群部署

kafka-windows集群部署目录 文章目录 kafka-windows集群部署目录前言一、复制出来四个kafka文件夹二、修改集群每个kafka的配置文件四、启动zookeeper&#xff0c;kafka集群 前言 部署本文步骤可以先阅读这一篇博客&#xff0c;这篇是关于单机kafka部署测试的。本文用到的文件…...

4个顶级的大模型推理引擎

LLM 在文本生成应用中表现出色&#xff0c;例如具有高理解度和流畅度的聊天和代码完成模型。然而&#xff0c;它们的庞大规模也给推理带来了挑战。基本推理速度很慢&#xff0c;因为 LLM 会逐个生成文本标记&#xff0c;需要对每个下一个标记进行重复调用。随着输入序列的增长&…...

Oracle中ADD_MONTHS()函数详解

文章目录 前言一、ADD_MONTHS()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;ADD_MONTHS()函数用于在日期中添加指定的月数。 一、ADD_MONTHS()的语法 ADD_MONTHS(date, n) 其中&#xff0c;date是一个日期值&#xff0c;n是一个整数值&#xff0c…...

【SQL】掌握SQL查询技巧:高效数据整合与查询优化

目录 1. SQL 的基本构成2. SQL 联接&#xff08;JOIN&#xff09;2.1 内联接&#xff08;INNER JOIN&#xff09;2.2 外联接&#xff08;OUTER JOIN&#xff09;2.2.1 左外联接&#xff08;LEFT JOIN&#xff09;2.2.2 右外联接&#xff08;RIGHT JOIN&#xff09;2.2.3 全外联…...

一个月学会Java 第5天 控制结构

Day5 控制结构 这么叫可能有些就算有基础的人也看不懂&#xff0c;其实就是if-else、switch-case、for、while、do-while这几个&#xff0c;没基础的听到了这个也不要慌张&#xff0c;这几个是程序的基础&#xff0c;多多训练就好 第一章 顺序结构 这章其实没有什么好讲的&…...

世界职业院校技能大赛(大数据技术与应用)参赛项目介绍内容模拟示例参考

最近关注世界职业院校技能大赛的同学应该都知道了&#xff0c;比赛已经正式改为”世界职业院校技能大赛“了&#xff0c;不仅仅是名称变化&#xff0c;而且比赛的形式也发生了巨大的改革&#xff0c;2024年世界职业院校技能大赛设置42个赛道&#xff0c;要求各比赛项目提交项目…...

【Python】文件及目录

文章目录 概要一、文件对象的函数1.1 open()函数1.2 文件对象的函数1.3 with语句 二、基于os和os.path模块的目录操作三、基于Pandas的文件处理3.1 Pandas读写各种类型文件 其他章节的内容 概要 本文主要将了打开文件的函数open()的参数&#xff0c;以及文件对象的函数&#x…...

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 OpenHarmony Camera驱动模型结构 HDI Implementation&#x…...

霓虹灯数字时钟(可复制源代码)

文章目录 一、效果演示二、CodeHTMLCSSJavaScript 三、实现思路拆分CSS 部分JavaScript 部分 四、源代码 一、效果演示 文末可一键复制完整代码 二、Code HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…...

大模型微调技术之 LoRA:开启高效微调新时代

一、LoRA 简介 LoRA&#xff0c;即低秩适应&#xff08;Low-Rank Adaptation&#xff09;&#xff0c;是一种用于微调大型语言模型的技术&#xff0c;旨在以较小的计算资源和数据量实现模型的快速适应特定任务或领域。 LoRA 方法通过引入低秩近似的思想&#xff0c;对大型预训…...

【Vue】Vue2(2)

文章目录 1 数据代理1.1 回顾Object.defineproperty方法1.2 何为数据代理1.3 Vue中的数据代理 2 事件处理2.1 事件的基本使用2.2 事件修饰符2.3 键盘事件 1 数据代理 1.1 回顾Object.defineproperty方法 <!DOCTYPE html> <html><head><meta charset&quo…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...