UE4 C++ 类的4种引用类型,和异步加载资产

2023-11-15

UE4 C++ 类的4种引用类型,和异步加载资产

4种引用类型

	对象引用:引用 World 的实例对象。

就是直接定义

UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//对象引用
	UWorld* LoadPackageSoftObjectPath4;


	类引用:引用从 World 继承而来的类。

TSubclassOf 是提供 UClass 类型安全性的模板类
允许在类型安全的情况下传递 TClassType 的模板

UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//类引用
	TSubclassOf<UWorld>LoadPackageSoftObjectPath3;


软类引用:从类型的 World 继承的类的路径,该类型可能不会被加载。可用于异步加载类。

TSoftClassPtr是 FSoftObjectPtr 的模板化包装器,其工作方式类似于TSubclassOf,它可以在 UProperties 中用于蓝图子类

UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//软类引用
	TSoftClassPtr<UWorld> LoadPackageSoftObjectPath2;


	软对象引用: 类型为 World 的实例Object的路径,该类型可能不会被加载。可用于异步加载资产。

TSoftObjectPtr是通用FSoftObjectPtr的模板化包装器,可以在 UProperties 中使用

UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//软对象引用
	TSoftObjectPtr<UWorld> LoadPackageSoftObjectPath;

异步加载资产,这里异步加载关卡,打开关卡

C++类的游戏模式基础:

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "LoadLevelGameModeBase.generated.h"

/**
 * 
 */
UCLASS()
class LOADLEVEL_API ALoadLevelGameModeBase : public AGameModeBase
{
	GENERATED_BODY()
public:
	bool bIsLoaded;

	UPROPERTY()
	FString LoadPackagePath;

	UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//软对象引用
	TSoftObjectPtr<UWorld> LoadPackageSoftObjectPath;

	UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//软类引用
	TSoftClassPtr<UWorld> LoadPackageSoftObjectPath2;
	
	UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//类引用
	TSubclassOf<UWorld>LoadPackageSoftObjectPath3;

	UPROPERTY(EditAnywhere,BlueprintReadOnly,Category="My")//对象引用
	UWorld* LoadPackageSoftObjectPath4;
	
	// 用于加载完成的回调
	DECLARE_DYNAMIC_DELEGATE(FOnAsyncLoadFinished);
public:
	UFUNCTION(BlueprintCallable,Category="My")
	void MyAsyncLoad(const FOnAsyncLoadFinished& OnAsyncLoadFinished);
	
	UFUNCTION(BlueprintCallable,Category="My")
	float GetLoadProgress();

};

// Copyright Epic Games, Inc. All Rights Reserved.


#include "LoadLevelGameModeBase.h"

//开始异步加载

void ALoadLevelGameModeBase::MyAsyncLoad(const FOnAsyncLoadFinished& OnAsyncLoadFinished)
{
	//不使用GetBaseFilename,编译 error C4458: LoadPackageAsync failed to begin to load a package···
	LoadPackagePath = FPaths::GetBaseFilename(LoadPackageSoftObjectPath.ToString(), false);
	bIsLoaded = false;
	UE_LOG(LogTemp, Warning, TEXT("String: %s"), *LoadPackagePath);
	
	LoadPackageAsync(
		LoadPackagePath,
		FLoadPackageAsyncDelegate::CreateLambda([=](const FName& PackageName, UPackage* LoadedPackage, EAsyncLoadingResult::Type Result)
			{
			 //开始
				if (Result == EAsyncLoadingResult::Failed)
				{
					UE_LOG(LogTemp, Warning, TEXT("Load Failed"));
				}
				else if (Result == EAsyncLoadingResult::Succeeded)//加载完毕
					{
						bIsLoaded = true;
						UE_LOG(LogTemp, Warning, TEXT("Load Succeeded"));
						OnAsyncLoadFinished.ExecuteIfBound();//调用绑定的事件,
					}
			}
		), 0, PKG_ContainsMap);
}

//获取加载的进度 -1 —— 100
float ALoadLevelGameModeBase::GetLoadProgress()
{
		float FloatPercentage = GetAsyncLoadPercentage(*LoadPackagePath);
		if (!bIsLoaded)
		{
			FString ResultStr = FString::Printf(TEXT("Percentage: %f"), FloatPercentage);
			GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Green, ResultStr);
			UE_LOG(LogTemp, Warning, TEXT("Percentage: %f"), FloatPercentage);
		}
		else
		{
			FloatPercentage = 100;
		}
		return FloatPercentage;
}

这个是开始加载和加载完成

namespace EAsyncLoadingResult
{
	enum Type
	{
		/** Package failed to load */
		Failed,
		/** Package loaded successfully */
		Succeeded,
		/** Async loading was canceled */
		Canceled
	};
}

主要看LoadPackageAsync这个函数的使用:

在这里插入图片描述
了解后用生成一个继承游戏模式基础的蓝图类
在蓝图类里调用和赋初值

在这里插入图片描述
加载完后打开关卡就行了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4 C++ 类的4种引用类型,和异步加载资产 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • UE5 Rokoko Studio Live(动捕实时链接)

    UE5 Rokoko动作捕捉实时 一 新建初始化项目 添加插件 打开UE5 1 1 新建 第三人称游戏 文件夹筛选找到模板自带的关卡 新建动画蓝图 gt 然后选择到UE的小白人骨骼 因为我们需要Rokoko的实时动捕 需要在项目里添加Rok
  • IDEA常用快捷键

    IDEA常用快捷键 快捷键 描述 Ctrl Shift R 全局搜索 替换 Ctrl Shift F 全局搜索 Ctrl F 局部搜索 Shift双击 搜索类 接口等 Ctrl 鼠标点击类名称 进入类的内部 Ctrl Alt O 清除不使用
  • 气候数据处理代码实现

    案例 根据站点降雨量日数据求月总降雨量 年总降雨量 月降雨天数 年降雨天数等 数据 部分数据如下 统计结果
  • 怎么理解KMP算法中的next数组(为甚有时候加一有时候不加一?)

    KMP算法怎么来的和找规律 以及对于BF算法他的主要区别就不再赘述我们 我们来说一下怎么用最快的速度加上已知规律找到给定字符串的next数组 C语言中和java中都适用 我们已经找到了部分规律 next数组中的值可能和已匹配部分字符串的前缀
  • 关于RabbitMQ的面试题

    关于RabbitMQ的面试题 整理了一下面试中问到rabbitmq消息队列时 面试官可能会问到的问题 面试题1 为什么使用rabbitmq 什么时候用 怎么用 一开始写项目 架构比较单一 使用的是单体结构 把所有的业务都堆积在一个项目里 随
  • [1220]hue数据导出

    1 执行要下载的sql语句 2 执行完成后 点击下面导出 3 选择所有 4 选择每个人对应的文件夹 没有自己名称的可以创建一个 5 选择导出 6 右面是导出执行时的界面 7 选择已经执行的文件 8 按照下面截图提示 就可以将文件下载到本地了
  • iOS上架报错:无法添加以供审核

    无法提交以供审核 要开始审核流程 必须提供以下项目 您必须为要添加的 app 提供版权信息 您在提交 app 审核时遇到的问题是因为需要提供版权信息 而您的 app 缺少相关的版权信息 以下是解决此问题的步骤 确认您是否拥有 app 的版权
  • kettle 关于数据库事务操作的解释说明

    事务与数据库 1 数据库连接只在执行作业或转换时使用 在作业里 每一个作业项都打开和关闭一个独立的数据库连接 转换也是如此 但是因为转换里的步骤是并行执行的 每个步骤都打开一个独立的数据库连接并开始一个事务 尽管这样在很多情况下会提高性能
  • Airbnb深度学习在搜索领域的探索总结

    今天的博客主要参考了Airbnb发表的paper Applying Deep Learning To Airbnb Search 这篇paper介绍了近2年Airbnb在搜索场景下所使用模型的演进路线 以及一些失败的总结和经验的总结 最难能
  • 常用的渗透测试工具之 SQLMap

    web安全攻防 第三章学习之SQLmap SQLMap介绍 SQLMap是自动化的SQL注入工具 主要功能是扫描 发现并利用URL的SQL注入漏洞 内置了很多绕过插件 SQLMap采用了五种独特的SQL注入技术 如下 1 基于布尔类型的盲注
  • maven deploy 遇到 “方法不会覆盖或实现超类型的方法” 不要慌

    思考问题 这个bug看的我莫名其妙 看名字也看不懂说的啥 在网上看到说什么把 Override去掉就行了什么 我就觉得很奇怪 跟这个能有什么关系呢 网上既然说是跟 Override有关 那么这应该是是跟我实现的接口有关 后来发现是我在接口中
  • 【星海随笔】Windows 下 安装 Eclipse IDE 编辑 C++ Code

    首先下载Eclips https download csdn net download weixin 41997073 86727250 安装后 然后点点点就可以了 但要记住自己安装的路径 安装后 先认识一下这个工具 File可以创建项目
  • sublime vue 语法高亮插件安装

    转自 http www cnblogs com cosnyang p 6290950 html 默认情况下 Vue js 的单文件组件 vue 在 sublime 编辑器中是不被识别的 若要想高亮显示 需要安装插件 Vue Syntax H
  • No such operator image::read_file问题解决

    在学习动手学深度学习这门课的时候 在13 6 节 标检测数据集这一章遇到了问题 读取数据的时候报错 No such operator image read file 网上有人说问题在于pytorch版本和torchvision版本不对应 可
  • weixin-js-sdk使用

    注意 以下内容自身的项目为uniapp编译生成微信小程序 小程序内嵌webview 一 微信初始化 安装微信sdk npm install weixin js sdk save 页面引入 import wx from weixin js s
  • 构建高性能数据库缓存之Redis(一)

    一 Redis概述 1 1 什么是redis Redis是一个开源的用ANSI C编写 支持网络 基于内存 亦可持久化的日志型 Key Value数据库 根据DB Engines com站点月度排行的数据显示 Reidis是最流行的键值对存
  • SpringBoot整合MinIO

    文章目录 1 问题背景 2 前言 3 步骤 3 1 引入依赖 3 2 连接MinIO服务端的必要参数 3 3 代码实现文件上传功能 3 4 验证 1 问题背景 前面搭建了MinIO容器 现在来研究SpringBoot整合MinIO 2 前言
  • 并发编程基础知识(一)[进程篇]

    目录 一 程序的执行方式 1 进程是什么东西 2 进程与程序区别 3 进程状态 4 linux进程地址空间布局 5 linux下进程相关的API函数 1 创建一个新进程 2 进程退出 3 等待子进程退出 4 让一个进程去执行一个指定的程序文
  • 什么是迁移学习(Transfer Learning)?【精讲+代码实例】

    文章目录 1 Introduction 2 Development of Machine Learning 3 What is transfer learning 4 How to transfer 4 1 Example 1 物体识别 4
  • UE4 C++ 类的4种引用类型,和异步加载资产

    UE4 C 类的4种引用类型 和异步加载资产 4种引用类型 对象引用 引用 World 的实例对象 就是直接定义 UPROPERTY EditAnywhere BlueprintReadOnly Category My 对象引用 UWorl