UE4 C++ 类的4种引用类型,和异步加载资产
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这个函数的使用:
了解后用生成一个继承游戏模式基础的蓝图类
在蓝图类里调用和赋初值
加载完后打开关卡就行了
UE4 C++ 类的4种引用类型,和异步加载资产相关推荐
- Android中的缓存处理及异步加载图片类的封装
一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...
- js如何将数据放在一个内置窗口里面_Java 爬虫遇上数据异步加载,试试这两种办法!...
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- LruCache缓存处理及异步加载图片类的封装
Android中的缓存处理及异步加载图片类的封装 一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端 ...
- JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验
英文 | https://www.sitepoint.com/five-techniques-lazy-load-images-website-performance/翻译 | web前端开发(ID: ...
- SharePoint 实现ajax异步加载数据的几种方式
初到公司,由原想的asp.net开发转向了SharePoint(简称SP)开发,个人感觉与之前差别不大,今天用sp实现异步加载数据的时候遇到点问题,之前在asp.net下一步都是用 jquery.aj ...
- Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是 ...
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...
最新文章
- linux 进程的作用,linux的几个进程的作用
- 2015春节期间读完两本书,立贴为证。
- 《UNIXLinux程序设计教程》一第2章-2.0 标准输入输出
- CUDA学习(三)之使用GPU进行两个数组相加
- Springboot与抓拍系统对接实现查询违章数据与预览抓拍照片
- 具有关联映射的Hibernate Composite ID
- 从零单排HBase 02:全面认识HBase架构(建议收藏)
- [转载] Python3 数组
- 生成树协议实验报告_多生成树协议MSTP
- python坐标定位_Python_元素定位浏览器坐标定位
- 关于笔算递归的通用算法——迭代
- 使用反射修改final属性
- mysql encode 函数_MySQL常用函数
- 网易云创建添加推荐歌谱和删除操作
- UT000054: The maximum size 1048576 for an individual file in a multipart req
- 6.Selenium2 自动化测试实战-基于Python语言-126邮箱登陆、获得验证信息
- 小米9网络位置服务器,如何查看小米9手机当前的IP地址
- 配置测试,你了解吗?
- word2vec的spark实现_word2vec的几种实现
- Java实现 蓝桥杯 算法训练 Cowboys
热门文章
- js简繁转换,两种实现方式,妥妥的~
- Python基础:数据可视化1
- 人生的“甲方”和“乙方”
- 中国擎天软件中标南京建邺政务工程打造全方位“云尚建邺”
- Horizon Linux Gnome桌面发布
- 软件测试行业现状分析(三)
- 计算机二级报名江南大学,江南大学2017年上半年计算机二级报名时间
- Java调用Google Analytics API实现网站统计
- php ppt如何转换成pdf,将PowerPoint转换成PDF的九款免费软件(附下载)
- 小傻蛋的妹妹跟随小甲鱼学习Python的第十六节016