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. YYAsyncLayer 学习
  2. TCP/IP详解--学习笔记(9)-TCP协议概述
  3. 浅析网站搭建时所遇到的这样或那样的问题
  4. 为什么大多数IP地址通常以192.168开头?
  5. Android Mvp 架构
  6. 如何为你的回归问题选择最合适的机器学习算法?
  7. 如何轮播 DataV 大屏
  8. python 将os.getcwd()获取路径中的\替换成\\
  9. 【已解决】Protocol ‘https‘ not on whitelist ‘file,crypto,data‘!
  10. 【Spring第七篇】Java配置类:JavaConfig
  11. vue 给iframe设置src_使用不带src属性的vuejs在iframe中渲染组件
  12. mysql 在线优化工具_MySQL SQL查询优化工具EverSQL
  13. 数据库系统概论-数据库编程与关系查询处理和查询优化
  14. 通过AndroidStudio找到数据库文件
  15. 8.04版本liveCD安装到94%时出现GRUB致命错误的问题解决
  16. rails 分页插件 Kaminari 的 数组分页
  17. win10如何打开摄像头_win10录屏软件哪个好?可录摄像头不限时长的视频录制方法...
  18. 基于单片机的自动浇花灌溉系统设计(#0417)
  19. MCGS pro 下载程序时,下位机磁盘空间不足解决办法
  20. 一文回顾AI绘画的成长之路:从简笔画到真实人脸生成

热门文章

  1. JVM GC(垃圾回收机制)Minro GC,Major GC/Full GC
  2. 手把手教你用手机轻松制作精美封面,封面不够吸引人?
  3. Objective-C---8---@property KVC
  4. 十一假期干什么?应邀参加 1024 技术英雄百人会
  5. 个人办公效率便签工具
  6. foxmail邮箱 邮件地址信息 以及邮件内容信息的导入导出
  7. Anko Commons 教程
  8. memc_nginx+srcache_nginx+memcached遇到的问题
  9. 拼多多用户数超越淘宝,电商市场正变成腾讯与阿里的对决
  10. 从零开始的全栈工程师——html篇1.3