[UE4][C++]基于UUserWidget的一种序列图播放方法

news2024/11/18 23:31:21

       最近在做一个大项目,鸽了几个月了.......

一、传统方法Flipbook

        这种方法适合序列图较少的情况下、可以一个一个添加进来然后调整顺序。蓝图也比较友好可以直接设置很多属性和功能。这里简单了解一下即可,想要深入了解的同学可以自行搜索。

1.1创建Flipbook

        Flipbook是UE4提供的一种播放序列图的方案,在资源框空白处右键,找到Paper2D,再选择Paper图像序列就能创建一个新的Flipbook

1.2添加关键帧 

        有三种添加关键帧的做法,1直接上方点击按钮;2在下方区域内右键;3直接拖动一个Sprite到下方区域内

 1.3创建Sprite

         对着任一Texture右键,找到Sprite操作,然后再创建Sprite即可,当然你也可以全选所有的序列图然后直接一口气创建。

二、基于UUserWidget 

         具体的原理就是使用  StaticLoadObject 函数根据图片的 引用路径 将图片一张一张加载显示,好处是只要知道序列图的命名格式和规范就可以直接找到,但是因为是动态加载的有时候会挤爆Texture Streaming,具体要看怎么动态释放了。

        在打包的时候,要添加资源的额外路径(最后烘焙也加上),要不然打包可能没有将图片打包进去。

下面给一个具体的例子

2.1新建c++类,继承UUserWidget 

SequenceUserWidget.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "SequenceUserWidget.generated.h"



USTRUCT(BlueprintType)
struct FSequence
{
	GENERATED_USTRUCT_BODY()

		UPROPERTY(EditAnywhere, BlueprintReadWrite)
		int ID;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		FString Path;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		FString Prefix;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		int Sign;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		int Start;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		int Count;

	FSequence()
	{

	}

	FSequence(int id, FString path, FString prefix, int sign, int start, int count)
	{
		ID = id;
		Path = path;
		Prefix = prefix;
		Sign = sign;
		Start = start;
		Count = count;
	}
};
/**
 * 
 */
UCLASS()
class UNIVERSEINBODY426_API USequenceUserWidget : public UUserWidget
{
	GENERATED_BODY()
public:
	UFUNCTION(BlueprintCallable, Category = "Sequence")
		UTexture2D* FindTexture2D(FString Path);
	UFUNCTION(BlueprintCallable, Category = "Sequence")
		FString FormatPath(FString Path, FString Prefix, int Sign, int Index);
	
};

 SequenceUserWidget.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "SequenceUserWidget.h"


UTexture2D* USequenceUserWidget::FindTexture2D(FString Path)
{
	return Cast<UTexture2D>(StaticLoadObject(UTexture2D::StaticClass(), NULL, *Path));
}

FString USequenceUserWidget::FormatPath(FString Path, FString Prefix, int Sign, int Index)
{
	//Texture2D'/Game/Resources/Texture/吸收能量/1_吸收能量序列_00000.1_吸收能量序列_00000'
	FString dstPath = "";
	FString idxStr = FString::FromInt(Index);
	int idxLen = idxStr.Len();
	if (idxLen > Sign)return dstPath;
	for (int i = 0; i < Sign - idxLen; i++)
	{
		idxStr = "0" + idxStr;
	}
	///
	//dstPath = "Texture2D'";
	dstPath = Path;
	FString dstName = Prefix + idxStr + "." + Prefix + idxStr;// +"'";
	dstPath += dstName;
	return dstPath;
}

2.2 新建蓝图UserWidget 继承自SequenceUserWidget

        1.然后添加常规的画布画板 

        2.添加Image组件

        3.设置SetTimerByFuncitonName(或者你用Tick),来一张一张显示图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1241799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手云开发小程序-(四)-uniclould增删改查业务开发

一&#xff0c;导入uView 在开发小程序的时候&#xff0c;我习惯使用uView这个ui库。主要是直接用当然比自己写省时间。 它的官网&#xff1a;uView - 多平台快速开发的UI框架 - uni-app UI框架 (gitee.io) 导入&#xff1a; npm install uview-ui2.0.31然后按照官网进行配…

数据库基础入门 — SQL运算符

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

Qt 软件开发框架(主要几个部分)

目录 1、 一个软件基本要素 &#xff08;1&#xff09;UI模块 &#xff08;2&#xff09;网络模块 &#xff08;3&#xff09;业务逻辑模块 &#xff08;4&#xff09;中间层 &#xff08;5&#xff09;独立模块&#xff08;守护进程、更新模块、日志收集模块…&#xff…

CodeWhisperer 体验总结

CodeWhisperer 体验总结 | CodeWhisperer 是一款亚马逊新推出的通用代码生成器 可以实时进行代码数据的提供 还可以定义安全问题 CodeWhisperer 对个人用户是免费使用 企业用户需要订阅使用 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例…

电商数据API接口接入|获取京东商品详情数据价格主图描述

企业前台研发部包含了企业业务大部分的对外前台系统&#xff0c;其中京东VOP平台(开放平台)适合于自建内网采购商城平台的企业客户。京东为这类客户专门开发API接口&#xff0c;对接到客户内网的网上商城&#xff0c;将产品SKU直接推送到客户内网&#xff0c;客户内部采购人员可…

华中科技大学李松课题组,利用机器学习预测多孔材料水吸附等温线

By 超神经 多孔材料的水吸附等温线是一个非常重要的参数&#xff0c;但这一参数的获得并不容易。这是因为多孔材料种类过多、结构多元&#xff0c;通过实验和计算的方式获得水吸附等温线数据成本过高&#xff0c;耗时过长。 华中科技大学的李松课题组&#xff0c;建立了一个两步…

开发板启动进入系统以后再挂载 NFS 文件系统, 这里的NFS文件系统是根据正点原子教程制作的ubuntu_rootfs

如果是想开发板启动进入系统以后再挂载 NFS 文件系统&#xff0c;开发板启动进入文件系统&#xff0c;开发板和 ubuntu 能互相 ping 通&#xff0c;在开发板文件系统下新建一个目录 you&#xff0c;然后执行如下指令进行挂载&#xff1a; mkdir mi mount -t nfs -o nolock,nfsv…

MySQL中自增id用完怎么办?

MySQL中自增id用完怎么办&#xff1f; MySQL里有很多自增的id&#xff0c;每个自增id都是定义了初始值&#xff0c;然后不停地往上加步长。虽然自然数是没有上限的&#xff0c;但是在计算机里&#xff0c;只要定义了表示这个数的字节长度&#xff0c;那它就有上限。比如&#…

【LeetCode二叉树进阶题目】606. 根据二叉树创建字符串,102. 二叉树的层序遍历,107. 二叉树的层序遍历 II

二叉树进阶题目 606. 根据二叉树创建字符串解题思路及实现 102. 二叉树的层序遍历解题思路及实现 107. 二叉树的层序遍历 II解题思路及实现 606. 根据二叉树创建字符串 描述 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号…

1553. 吃掉 N 个橘子的最少天数(记忆化+贪心优化)

Problem: 1553. 吃掉 N 个橘子的最少天数 文章目录 题目思路Code 题目 使得 n 变成0的操作有三种方式 &#xff1a; 吃掉一个橘子。如果剩余橘子数 n 能被 2 整除&#xff0c;那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除&#xff0c;那么你可以吃掉 2*(n/3) 个…

xorm源码学习

文章目录 XORM源码浅析及实践ORMORM vs. SQLXORM软件架构 ORM 引擎 Engine——DBM*core.DB Golang&#xff1a;database/sql 源码基本结构连接复用&#xff0c;提高性能。增加数据库连接池数量连接管理 database/sql主要内容&#xff1a;sql.DB创建数据库连接sql.Open()DB.conn…

python数据结构与算法-15_堆与堆排序

堆(heap) 前面我们讲了两种使用分治和递归解决排序问题的归并排序和快速排序&#xff0c;中间又穿插了一把树和二叉树&#xff0c; 本章我们开始介绍另一种有用的数据结构堆(heap)&#xff0c; 以及借助堆来实现的堆排序&#xff0c;相比前两种排序算法要稍难实现一些。 最后我…

《DApp开发:开启全新数字时代篇章》

随着区块链技术的日益成熟&#xff0c;去中心化应用&#xff08;DApp&#xff09;逐渐成为数字世界的新焦点。在这个充满无限可能的全新领域&#xff0c;DApp开发为创新者们提供了开启数字时代新篇章的钥匙。 一、DApp&#xff1a;区块链创新成果 DApp是建立在区块链技术基础之…

vue el-table (固定列+滚动列)【横向滚动条】确定滚动条是在列头还是列尾

效果图&#xff1a; 代码实现&#xff1a; html&#xff1a; <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//unpkg.com/element-ui2.15.14/lib/index.js"></script> <div id"app" style&quo…

OpenGL YUV 和 RGB 图像相互转换出现的偏色问题怎么解决?

未经作者(微信ID:Byte-Flow)允许,禁止转载 文章首发于公众号:字节流动 早上知识星球里的一位同学,遇到 yuv2rgb 偏色问题,这个问题比较典型,今天展开说一下。 省流版 首先 yuv2rgb 和 rgb2yuv 之间的转换要基于相同的标准,转换使用不同的标准肯定会引起偏色,常见的…

监控员工上网有什么软件丨三款好用的员工上网管理软件推荐

监控员工上网行为是企业管理中不可或缺的一部分&#xff0c;因此&#xff0c;选择一款好的监控员工上网的软件至关重要。目前市场上存在多种监控员工上网的软件&#xff0c;它们具有各种特点和功能&#xff0c;但企业需要仔细评估和选择。 一、域之盾软件 这是一款优秀的监控员…

数据结构-leetcode(设计循环队列)

1.学习内容&#xff1a; 今天 我们讲解一道能够很好的总结所学队列知识的题目---设计循环队列 622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 2.题目描述&#xff1a; 让我们设计一个队列 要求是循环的 这和我们的双向链表有些类似 让我们按要求设计出这些相对…

【C++】特殊类设计 {不能被拷贝的类;只能在堆上创建的类;只能在栈上创建的类;不能被继承的类;单例模式:懒汉模式,饿汉模式}

一、不能被拷贝的类 设计思路&#xff1a; 拷贝只会发生在两个场景中&#xff1a;拷贝构造和赋值重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造以及赋值重载即可。 C98方案&#xff1a; 将拷贝构造与赋值重载只声明不定义&#xff0c;并…

重生奇迹mu迹辅助什么好

主流辅助一号选手&#xff1a;弓箭手 智弓作为最老、最有资历的辅助职业&#xff0c;一直都是各类玩家的首要选择。因为智力MM提供的辅助能力都是最基础、最有效、最直观的辅助。能够减少玩家对于装备的渴求度&#xff0c;直接提升人物的攻防&#xff0c;大大降低了玩家升级打…

当当网获得dangdang商品详情商品列表API 测试请求入口

item_get-获得dangdang商品详情 获取商品详情 item_search-按关键字搜索dangdang商品 获取商品列表 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请…