当前位置: 首页 > news >正文

网站建设 海南电子商务网店运营推广

网站建设 海南,电子商务网店运营推广,济南网站建设(力推聚搜网络),自己电脑做局域网网站服务器一、前言 之前提到的静态和动态加载都是同步的加载,同时其中的引用基本都是硬引用。如果资源比较大的话会出现卡顿的现象,下面将介绍一种异步加载的方式。同时,还将介绍一种区别与之前的Load的方法。 在说明同步和异步加载之前需要先讲一下虚…

一、前言

        之前提到的静态和动态加载都是同步的加载,同时其中的引用基本都是硬引用。如果资源比较大的话会出现卡顿的现象,下面将介绍一种异步加载的方式。同时,还将介绍一种区别与之前的Load的方法。

        在说明同步和异步加载之前需要先讲一下虚幻引擎的引用路径的问题,虚幻中的资源和类的引用包含软引用和硬引用,硬引用即对象A引用对象B,那么加载对象A的时候会自动加载对象B。软引用,即对象A通过间接机制(一般是字符串形式的路径)来引用对象B,不会在A加载时加载B。静态和动态加载

二、实现

2.1、硬性引用

        比如一个类A中定义一个变量为“输入映射”,在后续的蓝图中添加了,如图2.1.1所示,在细节

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MyInput")class UInputMappingContext* MyMappingContext;
图2.1.1

面板中添加了该变量的具体资源,那么在该类A在加载的同时会自动加载该“输入映射”添加的资源到内存中。

还有一种硬引用的方式,这个函数通常在构造函数中使用。

static ConstructorHelpers::FClassFinder<UUserWidget>tempUICalss(TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/BluePrint/UI3D.UI3D_C'"));
2.2、软引用路径

        而软引用则不同,如下多是在A类中定义以下几个软引用,如图2.2.1所示可以在类A的细节面

	/// <summary>/// class的是蓝图类,Object的可以是非类的资源如图片/// </summary>UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Path")FSoftObjectPath AssetObjectPath;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Path")FSoftClassPath AssetClassPath;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Path")TSoftObjectPtr<AActor> AssetObjectPtr;//场景中的物体UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Path")TSoftObjectPtr<AActor> AssetClassPtr;//场景中的物体

板中看到这定义的四个路径,这里的路径绑定的资源不再会A加载的同时加载到内存中,而要通过

图2.2.1

后续的代码再加载到内存中。这就是软引用和硬引用的区别。

2.3、同步加载

        通过复制引用资源的路径,然后添加到代码的的路径中,同步加载在资源比较大的情况下会让主程序都出现卡顿的情况。

	//同步加载FSoftObjectPath tempPath2 = TEXT("/Script/Engine.Texture2D'/Game/StarterContent/Textures/T_Wood_Oak_D.T_Wood_Oak_D'");TSharedPtr<FStreamableHandle> SynStreamhandle = UAssetManager::GetStreamableManager().RequestSyncLoad(tempPath2);if (SynStreamhandle){UTexture2D* tempTex2 = Cast<UTexture2D>(SynStreamhandle->GetLoadedAsset());if (tempTex2){GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, FString::Printf(TEXT("TexName:%s"), *tempTex2->GetName()));}}
2.4、异步加载

        异步加载就是在执行的时候会开启另外一个线程去后台加载资源,因此如果还是通过以下的方式去获取资源可能会不同步得到响应的结果。

	FSoftObjectPath tempPath1 = TEXT("/Script/Engine.Texture2D'/Game/StarterContent/Textures/T_Burst_M.T_Burst_M'");//异步加载1TSharedPtr<FStreamableHandle>AsyStreamhandle = UAssetManager::GetStreamableManager().RequestAsyncLoad(tempPath1);if (AsyStreamhandle){UTexture2D* tempTex = Cast<UTexture2D>(AsyStreamhandle->GetLoadedAsset());if (tempTex){GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, FString::Printf(TEXT("TexName:%s"), *tempTex->GetName()));}}

最好的方式是给异步加载后的结果一个回调函数,如下代码所示,这样在回调函数就可以异步

#include "Engine/StreamableManager.h"TSharedPtr<FStreamableHandle>AsyStreamhandle;AsyStreamhandle = UAssetManager::GetStreamableManager().RequestAsyncLoad(tempPath1, FStreamableDelegate::CreateUObject(this, &AMySoftRefActor::AysLoadCallBack));void AMySoftRefActor::AysLoadCallBack()
{if (AsyStreamhandle){UTexture2D* tempTex = Cast<UTexture2D>(AsyStreamhandle->GetLoadedAsset());if (tempTex){GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, FString::Printf(TEXT("TexName:%s"), *tempTex->GetName()));}}
}

处理加载的资源。

三、总结

3.1、软引用和硬引用的区别。

3.2、异步加载最好指定一个回调函数。

http://www.hkea.cn/news/295783/

相关文章:

  • 在日本做色情网站广州seo外包
  • 最棒的网站建设考研最靠谱的培训机构
  • 广州建设企业网站黑河seo
  • 招商网站建设性价比高seo排名优化的
  • 产品网站怎么做的长沙正规关键词优化价格从优
  • 怎样查询江西省城乡建设厅网站杭州seo网
  • 网站建设空间是指什么软件网站优化最为重要的内容是
  • 做美工要开通什么网站的会员呢新网站友链
  • 网站集约化建设推进情况推广app赚钱
  • 番禺大石做网站域名污染查询网站
  • 长沙市在建工程项目免费seo快速排名工具
  • 南宁定制网站制作电话图片外链生成工具
  • 哪些网站做的海报比较高大上百度客服电话是多少
  • 菏泽网站建设电话常州seo外包
  • 做木皮的网站裂变营销五种模式十六种方法
  • 精美 企业网站模板微信软文推广怎么做
  • 怎么建立一个网站里面可以查询资料百度权重域名
  • 网站建设顺序镇江交叉口优化
  • 低价企业网站搭建软文新闻发布网站
  • 创造与魔法官方网站做自己喜欢的事seo视频
  • 淘宝联盟推广网站怎么做吉安seo招聘
  • 工程招聘网站如何免费制作自己的网站
  • 网站建设调研问卷搜易网托管模式的特点
  • 在哪个网站可以做java面试题宁德市蕉城区疫情
  • 2021年重大新闻事件seo快速工具
  • 拼多多网店南宁优化推广服务
  • 洛阳建筑公司排名长沙官网seo服务
  • 网站关键词优化公司哪家好企业网站seo点击软件
  • 做网站有必要?优化师培训
  • 网站怎么发布信息百度推广优化技巧