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种引用类型,和异步加载资产相关推荐

  1. Android中的缓存处理及异步加载图片类的封装

    一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端: 流量开销:对于客户端--服务器端应用,从远程获取图 ...

  2. js如何将数据放在一个内置窗口里面_Java 爬虫遇上数据异步加载,试试这两种办法!...

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  3. java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  4. LruCache缓存处理及异步加载图片类的封装

    Android中的缓存处理及异步加载图片类的封装   一.缓存介绍: (一).Android中缓存的必要性: 智能手机的缓存管理应用非常的普遍和需要,是提高用户体验的有效手段之一. 1.没有缓存的弊端 ...

  5. JAVA异步爬虫_Java 爬虫遇上数据异步加载,试试这两种办法!

    这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...

  6. iframe异步加载_5种延迟加载图像的方法以帮助你提升网站性能与用户体验

    英文 | https://www.sitepoint.com/five-techniques-lazy-load-images-website-performance/翻译 | web前端开发(ID: ...

  7. SharePoint 实现ajax异步加载数据的几种方式

    初到公司,由原想的asp.net开发转向了SharePoint(简称SP)开发,个人感觉与之前差别不大,今天用sp实现异步加载数据的时候遇到点问题,之前在asp.net下一步都是用 jquery.aj ...

  8. Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是 ...

  9. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

最新文章

  1. linux 进程的作用,linux的几个进程的作用
  2. 2015春节期间读完两本书,立贴为证。
  3. 《UNIXLinux程序设计教程》一第2章-2.0 标准输入输出
  4. CUDA学习(三)之使用GPU进行两个数组相加
  5. Springboot与抓拍系统对接实现查询违章数据与预览抓拍照片
  6. 具有关联映射的Hibernate Composite ID
  7. 从零单排HBase 02:全面认识HBase架构(建议收藏)
  8. [转载] Python3 数组
  9. 生成树协议实验报告_多生成树协议MSTP
  10. python坐标定位_Python_元素定位浏览器坐标定位
  11. 关于笔算递归的通用算法——迭代
  12. 使用反射修改final属性
  13. mysql encode 函数_MySQL常用函数
  14. 网易云创建添加推荐歌谱和删除操作
  15. UT000054: The maximum size 1048576 for an individual file in a multipart req
  16. 6.Selenium2 自动化测试实战-基于Python语言-126邮箱登陆、获得验证信息
  17. 小米9网络位置服务器,如何查看小米9手机当前的IP地址
  18. 配置测试,你了解吗?
  19. word2vec的spark实现_word2vec的几种实现
  20. Java实现 蓝桥杯 算法训练 Cowboys

热门文章

  1. js简繁转换,两种实现方式,妥妥的~
  2. Python基础:数据可视化1
  3. 人生的“甲方”和“乙方”
  4. 中国擎天软件中标南京建邺政务工程打造全方位“云尚建邺”
  5. Horizon Linux Gnome桌面发布
  6. 软件测试行业现状分析(三)
  7. 计算机二级报名江南大学,江南大学2017年上半年计算机二级报名时间
  8. Java调用Google Analytics API实现网站统计
  9. php ppt如何转换成pdf,将PowerPoint转换成PDF的九款免费软件(附下载)
  10. 小傻蛋的妹妹跟随小甲鱼学习Python的第十六节016