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++ 实时加载模型的总结
一.总体思路: 如果实时加载UE模型,需要先将之前的模型删除。再生成出来,放在根节点,保持相对位置,相对的俯仰角。 void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z) {//m_weaponMap.Emp…...
实施威胁暴露管理、降低网络风险暴露的最佳实践
随着传统漏洞管理的发展,TEM 解决了因攻击面扩大和安全工具分散而产生的巨大风险。 主动式 TEM 方法优先考虑风险并与现有安全工具无缝集成,使组织能够在威胁被有效利用之前缓解威胁。 为什么威胁暴露管理 (TEM) 在现代网络安全策略中变得至关重要&…...
51.哀家要长脑子了!
1.P1003 [NOIP2011 提高组] 铺地毯 重复 模拟 要求覆盖在最上面的地毯编号,用四个数组abgk分别记录地毯起点的左下角横纵坐标,地毯的长度宽度,输入的坐标x y 当它满足大于等于左下角坐标 并且 小于等于 地毯左下角横纵坐标的时候…...
Overleaf 无法显示图片
问题描述 在Overleaf中的代码为: \begin{figure}\centering\includegraphics[width0.98\linewidth]{figures/test.png}\caption{This is a test.}\label{fig:test} \end{figure}但无法正常显示图片: 解决方案 修改编译模式为正常Normal而非快速Fast …...
如何实现 C/C++ 与 Python 的通信?
在现代编程中,C/C与Python的通信已经成为一种趋势,尤其是在需要高性能和灵活性的场景中。本文将深入探讨如何实现这两者之间的互通,包括基础和高级方法,帮助大家在混合编程中游刃有余。 C/C 调用 Python(基础篇&#…...
音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现
一、SCRIPTDATAVALUE类型 从《音视频入门基础:FLV专题(9)——Script Tag简介》中可以知道,根据《video_file_format_spec_v10_1.pdf》第80到81页,SCRIPTDATAVALUE类型由一个8位(1字节)的Type和…...
jvm里的metaspace oom 排查问题思路-使用MAT
文章目录 metapace oom 问题排查点-1-duplicate class 数量排查点-2-classloader 数量一些可能迷惑人的方向 metapace oom 问题 metapace 问题都是由加载的class 太多,导致内存不够报出来的。 排查点-1-duplicate class 数量 首先看这里,通常一个clas…...
2025舜宇招聘【内推码】
【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇集团2025届全球校园招聘正式启动!!! 专业需求:机械、自动化、电子、电气、通信、控制、测控、计算机、软件、物理、光学等专业; 工作地点:宁波余姚、浙江杭州、广东…...
APP自动化搭建与应用
APP自动化环境搭建 用于做APP端UI自动化,adb连接手机设备。 需要的工具java编辑器:jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步:安装sdk,里面包含建立工具bu…...
kafka-windows集群部署
kafka-windows集群部署目录 文章目录 kafka-windows集群部署目录前言一、复制出来四个kafka文件夹二、修改集群每个kafka的配置文件四、启动zookeeper,kafka集群 前言 部署本文步骤可以先阅读这一篇博客,这篇是关于单机kafka部署测试的。本文用到的文件…...
4个顶级的大模型推理引擎
LLM 在文本生成应用中表现出色,例如具有高理解度和流畅度的聊天和代码完成模型。然而,它们的庞大规模也给推理带来了挑战。基本推理速度很慢,因为 LLM 会逐个生成文本标记,需要对每个下一个标记进行重复调用。随着输入序列的增长&…...
Oracle中ADD_MONTHS()函数详解
文章目录 前言一、ADD_MONTHS()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中,ADD_MONTHS()函数用于在日期中添加指定的月数。 一、ADD_MONTHS()的语法 ADD_MONTHS(date, n) 其中,date是一个日期值,n是一个整数值,…...
【SQL】掌握SQL查询技巧:高效数据整合与查询优化
目录 1. SQL 的基本构成2. SQL 联接(JOIN)2.1 内联接(INNER JOIN)2.2 外联接(OUTER JOIN)2.2.1 左外联接(LEFT JOIN)2.2.2 右外联接(RIGHT JOIN)2.2.3 全外联…...
一个月学会Java 第5天 控制结构
Day5 控制结构 这么叫可能有些就算有基础的人也看不懂,其实就是if-else、switch-case、for、while、do-while这几个,没基础的听到了这个也不要慌张,这几个是程序的基础,多多训练就好 第一章 顺序结构 这章其实没有什么好讲的&…...
世界职业院校技能大赛(大数据技术与应用)参赛项目介绍内容模拟示例参考
最近关注世界职业院校技能大赛的同学应该都知道了,比赛已经正式改为”世界职业院校技能大赛“了,不仅仅是名称变化,而且比赛的形式也发生了巨大的改革,2024年世界职业院校技能大赛设置42个赛道,要求各比赛项目提交项目…...
【Python】文件及目录
文章目录 概要一、文件对象的函数1.1 open()函数1.2 文件对象的函数1.3 with语句 二、基于os和os.path模块的目录操作三、基于Pandas的文件处理3.1 Pandas读写各种类型文件 其他章节的内容 概要 本文主要将了打开文件的函数open()的参数,以及文件对象的函数&#x…...
OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 OpenHarmony Camera驱动模型结构 HDI Implementation&#x…...
霓虹灯数字时钟(可复制源代码)
文章目录 一、效果演示二、CodeHTMLCSSJavaScript 三、实现思路拆分CSS 部分JavaScript 部分 四、源代码 一、效果演示 文末可一键复制完整代码 二、Code HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…...
大模型微调技术之 LoRA:开启高效微调新时代
一、LoRA 简介 LoRA,即低秩适应(Low-Rank Adaptation),是一种用于微调大型语言模型的技术,旨在以较小的计算资源和数据量实现模型的快速适应特定任务或领域。 LoRA 方法通过引入低秩近似的思想,对大型预训…...
【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…...
自抗扰控制三阶LADRC在三相LCL逆变器模型中的应用:图一至图三分析
自抗扰控制三阶LADRC控制三相LCL逆变器模型 图一:d轴参考电流在0.15从40变到80的并网电压电流波形 图二:三阶LADRC结构控制LCL三阶模型 图三:整体结构图 参考文献:基于抗扰控制三相LCL逆变器控制策略研究 光伏并网逆变器最头疼的就是LCL滤波器引发的震荡问题。这玩意儿参数敏感…...
Windows平台OpenClaw部署:百川2-13B-4bits量化版调用详解
Windows平台OpenClaw部署:百川2-13B-4bits量化版调用详解 1. 为什么选择这个组合? 去年冬天,当我第一次尝试在Windows笔记本上部署本地AI助手时,遇到了显存不足的难题。我的GTX 3060显卡根本无法承载常规的13B模型,直…...
GNU Radio滤波器设计实战指南:从原理到高性能实现
GNU Radio滤波器设计实战指南:从原理到高性能实现 【免费下载链接】gnuradio GNU Radio – the Free and Open Software Radio Ecosystem 项目地址: https://gitcode.com/gh_mirrors/gn/gnuradio GNU Radio作为开源软件定义无线电生态系统,提供了…...
AnythingtoRealCharacters2511镜像免配置部署教程:Docker+ComfyUI开箱即用方案
AnythingtoRealCharacters2511镜像免配置部署教程:DockerComfyUI开箱即用方案 想快速将动漫人物变成真实照片?这个教程教你10分钟搞定专业级动漫转真人效果,无需任何技术背景! 1. 为什么选择这个镜像? 如果你曾经尝试…...
双向充放电前馈控制:储能变流器PCS_PWM变流器的SVPWM调制与实现
【复现】储能变流器PCS_PWM变流器双向充放电前馈控制SVPWM调制 1、电路构成:三相电网、三相 PWM变流器、Buck/Boost 变换器和蓄电池 2、三相变流器控制:采用电压外环、电流内环双闭环PI 控制,电网电压和电容电流前馈,电感电流解耦…...
VS Code 效率技巧:符号导航快速定位代码
推荐阅读 技术总监悄悄秀了一把 VS Code 神技,被我狠狠学到了! VS Code 又发布了一个 Agent 新玩具! VS Code 1.110 官宣 AI 新特性:AI 直接调试浏览器! VS Code 2026 效率秘籍:学完无敌!…...
Honey Select 2终极增强补丁:3分钟快速配置完整模组生态
Honey Select 2终极增强补丁:3分钟快速配置完整模组生态 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾为《Honey Select 2》的模组安装繁…...
G-Helper终极指南:如何用轻量工具延长华硕笔记本电池寿命50%
G-Helper终极指南:如何用轻量工具延长华硕笔记本电池寿命50% 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…...
Stable Diffusion v1.5功能体验:Guidance Scale参数实测,教你调出最佳效果
Stable Diffusion v1.5功能体验:Guidance Scale参数实测,教你调出最佳效果 1. 引言:为什么Guidance Scale如此重要? 如果你用过Stable Diffusion生成图片,一定遇到过这样的情况:同样的提示词,…...
数据安全与性能瓶颈困扰企业?湖南天硕SSD固态硬盘带来航天级稳定体验
在数字化转型加速的今天,企业数据量呈指数级增长,随之而来的数据安全风险与存储性能瓶颈已成为众多企业,尤其是对数据可靠性要求极高的B端用户(如企业采购负责人、技术总监)面临的共同挑战。传统存储方案在应对复杂业务…...
