【UE数字孪生学习笔记】 Gameplay框架之TSubclassOf

声明:部分内容来自于b站,知乎,慕课,公开课等的课件,仅供学习使用。如有问题,请联系删除。

部分内容来自UE官方文档,博客等

TSubclassOf


  TSubclassOf 是一个模板类,用于存储对某个特定类的引用,通常用于指定类的子类。TSubclassOf能够约束下拉框中只会出现继承于T的类或者T本身,并且C++层面也能实现类型安全,如果给TSubclassOf对象赋值一个类型不兼容的UClass,则会得到编译错误。

    //类引用存储: 你可以将 TSubclassOf 用于存储对某个类(或其子类)的引用。TSubclassOf<AActor> MyActorClass;//类的实例化: 通过 TSubclassOf,你可以在运行时动态实例化特定类或其子类的对象。AActor* MyNewActor = GetWorld()->SpawnActor<AActor>(MyActorClass, SpawnLocation, SpawnRotation);

TSubclassOf 的应用场景和优势

  TSubclassOf 提供了在运行时动态引用并实例化类的便捷方法。它在UE中的使用场景非常广泛,尤其在处理各种动态生成和配置类对象的情况下非常有用。通过 TSubclassOf,开发者可以更灵活地设计和组织他们的代码,同时减少硬编码,提高代码的可维护性和可扩展性。

TSubclassOf 生成物体和定时生成

(下面的代码来自网络,暂未跑过)

  基于FloatingActor

  (类模板)

    TSubclassOf<AClass>name;

  创建一个 UClass 类型的 UPROPERTY,让设计者指定派生自 UDamageType 的类;而使用 TSubclassOf 模板强制要求此选择。

在SpwanActor.h中

	// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "floatActor.h"
#include "SpwanActor.generated.h"UCLASS()
class NEWFPS_API ASpwanActor : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's propertiesASpwanActor();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:    // Called every framevirtual void Tick(float DeltaTime) override;//(类模板)指定生成一个类:生成一个物体UPROPERTY(EditDefaultsOnly,Category="Projectile")TSubclassOf<AfloatActor>ProjectileActor;float BaseTime;};

在SpwanActor.cpp中

// Fill out your copyright notice in the Description page of Project Settings.#include "SpwanActor.h"// Sets default values
ASpwanActor::ASpwanActor()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;}// Called when the game starts or when spawned
void ASpwanActor::BeginPlay()
{Super::BeginPlay();}// Called every frame
void ASpwanActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);float IntervalTime = 6.0f;//间隔时间  //DeltaTime每一帧消耗  1/帧数 的时间BaseTime -= DeltaTime;//basetime<=0 先生成一个物体,basetime变成6.0f 随着时间的变化 basetime又<=0依次重复if (BaseTime <= 0.0f)   {BaseTime += IntervalTime;//在世界里面生成,则需要获得levelUWorld* const World = GetWorld();if (World){FVector SpawnActorLocation = GetActorLocation();FRotator SpwanActorRotation = GetActorRotation();//声明一个变量FActorSpawnParameters ActorParmas;//指定生成的方式/*/Fall back to default settings. Undefined                                UMETA(DisplayName = "Default"),/Actor will spawn in desired location, regardless of collisions. AlwaysSpawn                                UMETA(DisplayName = "Always Spawn, Ignore Collisions"),/ Actor will try to find a nearby non-colliding location (based on shape components), but will always spawn even if one cannot be found. 忽略碰撞一直生成AdjustIfPossibleButAlwaysSpawn            UMETA(DisplayName = "Try To Adjust Location, But Always Spawn"),/ Actor will try to find a nearby non-colliding location (based on shape components), but will NOT spawn unless one is found. AdjustIfPossibleButDontSpawnIfColliding    UMETA(DisplayName = "Try To Adjust Location, Don't Spawn If Still Colliding"),/ Actor will fail to spawn. 如果产生碰撞则不产生DontSpawnIfColliding                    UMETA(DisplayName = "Do Not Spawn"),*/ActorParmas.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::DontSpawnIfColliding;//在世界中生成物体//名称,位置,选择,指定参数World->SpawnActor<AfloatActor>(ProjectileActor, SpawnActorLocation, SpwanActorRotation, ActorParmas);}}
}

参考资料
https://docs.unrealengine.com/latest/INT/
https://www.bilibili.com/video/BV1bC411j7Du
https://blog.csdn.net/ttod/article/details/136112588
https://zhuanlan.zhihu.com/p/670572209
https://www.cnblogs.com/lyj00/p/15889733.html

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

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

相关文章

科研辅助工具

科研工具收集 1. 如何筛选出最合适的SCI论文投稿杂志:点击直达 2. 分享三种正确查找期刊全称、缩写的网站: 点击直达

(done) AFL 都有哪些阶段? Stage progress

参考资料&#xff1a;https://afl-1.readthedocs.io/en/latest/user_guide.html 所有阶段如下&#xff0c;包括详细的解释

论文《Dual-Contrastive for Federated Social Recommendation》阅读

论文《Dual-Contrastive for Federated Social Recommendation》阅读 论文概况MotivationMethodologyClient Local ComputingCenter Server Aggregation 总结 今天简单总结一下一篇关于联邦推荐方面的论文《Dual-Contrastive for Federated Social Recommendation》&#xff0c…

Java | Leetcode Java题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution {public int findPeakElement(int[] nums) {int n nums.length;int left 0, right n - 1, ans -1;while (left < right) {int mid (left right) / 2;if (compare(nums, mid - 1, mid) < 0 && compare(n…

【Linux 内存管理】

文章目录 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d; 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d;

如何实现element表格合并行?

前两天我一个朋友咨询我element表格合并行的问题,他研究了很久,已经开始怀疑是不是element UI出现了bug,然后跟我一阵沟通,最终解决了问题,他的问题在于他把事情想复杂了,接下来我们一起来看一下这个经典“案例”,很多人真的很有可能走入这个误区,当然老鸟就不用看了,…

读AI新生:破解人机共存密码笔记04计算的极限

1. 计算的极限 1.1. 光靠速度是无法给我们带来人工智能的 1.1.1. 在速度更快的计算机上运行糟糕的算法并不会使算法变得更优秀&#xff0c;这只意味着你会更快地得到错误的答案 1.1.2. 数据越多&#xff0c;错误答案出现的机会就越大 1.…

pytorch基础【3】torch运算

文章目录 torch运算基本运算形状操作自动调整size (参数-1) 数学运算逻辑运算常见的高级操作随机数生成 torch运算 基本运算 创建张量: import torch# 直接从列表或数组创建张量 x torch.tensor([1, 2, 3])创建特定值的张量: # 全零张量 zeros torch.zeros(3, 3)# 全一张量 …

python调用SDK的问题

问题&#xff1a;Could not find module MvCameraControl.dll 原因&#xff1a;识别环境变量runtime异常 解决&#xff1a;指定具体绝对地址即可。MvCameraControl.dll的位置C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64 MvCamCtrldll WinDLL("MvCamer…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 石碑文字组合(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

Rust语言-线程间的消息传递mpsc::Sender

文章目录 Rust语言-线程间的消息传递mpsc::Sender标准库std::sync::mpsc消息通道mpsc::Sender实战举例 Rust语言-线程间的消息传递mpsc::Sender 标准库std::sync::mpsc 官方文档&#xff1a;https://rustwiki.org/zh-CN/std/sync/mpsc/index.html 参考URL: https://course.rs…

[C++][数据结构][哈希表]详细讲解

目录 1.哈希概念2.哈希冲突3.哈希函数4.哈希冲突解决5.闭散列1.何时扩容&#xff1f;如何扩容&#xff1f;2.线性探测3.二次探测 6.开散列(哈希桶)1.概念2.开散列增容3.开散列思考只能存储key为整形的元素&#xff0c;其他类型怎么解决&#xff1f;除留余数法&#xff0c;最好模…

一季度直播6000场,同比增长60%,遥望科技透露重要信息

6月17日&#xff0c;经由深圳证券交易所许可&#xff0c;遥望科技&#xff08;股票代码&#xff1a;002291&#xff09;正式对《年报问询函》进行公开回复&#xff0c;就经营的多个维度做出解释和回应。 在回复中&#xff0c;遥望科技预测2024年毛利率为14.4%&#xff0c;相比…

[absl_py][python]absl_py所有whl文件下载地址汇总

absl_py是Google开发并维护的一个Python软件包&#xff0c;它是C Abseil库的Python版本。该库旨在提供一系列高质量的、跨平台的实用工具&#xff0c;帮助开发者构建大规模软件项目。以下是关于absl_py的详细介绍&#xff1a; 功能概述&#xff1a; 字符串处理&#xff1a;abs…

conda在不同服务器上迁移环境的方法

conda在不同服务器上迁移环境的方法 conda迁移环境&#xff08;若服务器cuda配置相同&#xff09;我的迁移方法&#xff1a;可能要用到的压缩命令和解压命令&#xff1a; 若服务器cuda版本等配置不同 conda迁移环境&#xff08;若服务器cuda配置相同&#xff09; 我的迁移方法…

【CSS in Depth2精译】1.1.1 样式表来源

您添加到网页的样式表并非浏览器呈现样式的唯一来源。样式表有三种不同的类型或来源。您添加到页面的样式称为 作者样式&#xff08;author styles&#xff09;&#xff1b;此外还有 用户样式&#xff08;user styles&#xff09;&#xff0c;即终端用户设置的自定义样式&#…

configure: error: library ‘crypto‘ is required for OpenSSL

1、执行命令&#xff1a;./configure --prefix/opt/app/postgresql --with-openssl 报错&#xff1a; 2、解决办法 执行命令&#xff1a;yum install openssl-devel 重新执行 ./configure --prefix/opt/app/postgresql --with-openssl

Ubuntu服务器的GitLab部署

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

充电学习—3、Uevent机制和其在android层的实现

sysfs 是 Linux userspace 和 kernel 进行交互的一个媒介。通过 sysfs&#xff0c;userspace 可以主动去读写 kernel 的一些数据&#xff0c;同样的&#xff0c; kernel 也可以主动将一些“变化”告知给 userspace。也就是说&#xff0c;通过sysfs&#xff0c;userspace 和 ker…

探索序列到序列模型:了解编码器和解码器架构的强大功能

目录 一、说明 二、什么是顺序数据&#xff1f; 三、编码器解码器架构的高级概述&#xff1a; 3.1 编码器和解码器架构的简要概述&#xff1a; 3.2 训练机制&#xff1a;编码器和解码器架构中的前向和后向传播&#xff1a; 四、编码器解码器架构的改进&#xff1a; 4.1.…