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

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

一、传统方法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.hqwc.cn/news/209879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库数据恢复—SQLserver数据库中勒索病毒被加密的数据恢复案例

SQLserver数据库数据恢复环境&故障&#xff1a; 一台服务器上的SQLserver数据库被勒索病毒加密&#xff0c;无法正常使用。该服务器上部署有多个SQLserver数据库&#xff0c;其中有2个数据库及备份文件被加密&#xff0c;文件名被篡改&#xff0c;数据库无法使用。 SQL se…

如何将音频添加到视频并替换视频中的音轨

随着视频流媒体网站的流行和便携式设备的发展&#xff0c;你可能越来越倾向于自己制作视频并在互联网上分享。有时&#xff0c;你可能还需要编辑视频并为其添加背景音乐&#xff0c;因为音乐总是对视频的感知起着神奇的作用。 那如何给视频添加音频呢&#xff1f;或者如何用新…

计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用19-基于pytorch框架搭建卷积神经网络CNN的卫星地图分类问题实战应用。随着遥感技术和卫星图像获取能力的快速发展&#xff0c;卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一…

Redis并发问题解决方案

目录 前言 1.分布式锁 1.基于单个节点 2.基于多个节点 3.watch(乐观锁) 2.原子操作 1.单命令操作 2.Lua 脚本(多命令操作) 3.事务 1.执行步骤 2.错误处理 3.崩溃处理 总结 前言 在多个客户端并发访问Redis的时候&#xff0c;虽然Redis是单线程执行指令&#xff…

centos7 安装docker

1.卸载旧版本&#xff0c;不管装没装过&#xff0c;执行一下&#xff0c;防止版本冲突 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2. yum安装gcc相关 以及 安…

中部A股第一城,长沙如何赢商?

文|智能相对论 作者|范柔丝 长沙的马路&#xff0c;都很有故事。 一条解放西路&#xff0c;是全国人民都争相打卡的娱乐地标&#xff1b;一条太平街&#xff0c;既承载了历史的厚重又演绎着现代的鲜活...... 但如果来到河西的桐梓坡路&#xff0c;风景会变得截然不同。 沿…

SAP QA11/QA32质检放行时,如何处理产生记账更改通知单时

前提&#xff1a;启用SAP wms仓库管理 场景&#xff1a; 当做移动类型321质检放行的时候&#xff0c;有时候会产生记账更改通知单&#xff0c;这个时候怎么处理&#xff1f; 解决办法&#xff1a; 使用事务码LU04,查看未清的记账更改通知单&#xff0c;进入清单列表之后&…

完整的工程项目管理流程是怎么样的?

阅读本文你将了解工程项目管理的完整流程&#xff1a;一、项目启动阶段&#xff1b;二、项目规划阶段&#xff1b;三、项目执行阶段&#xff1b;四、项目收尾阶段&#xff1b;五、项目总结与反馈。 这是一个工程项目管理的完整流程&#xff1a; 项目启动阶段&#xff1a;也就…

Qt全球峰会2023中国站 参会概要

Qt全球峰会2023中国站 参会概要 前言峰会议程签到 & Demo 演示开场致辞Qt Group 产品总监演讲&#xff08;产品开发的趋势-开放的软件、工具和框架&#xff09;产品战略QtQuick or QtWidgets&#xff08;c or qml&#xff09;Qt如何定义AI个人看法 Qt 在券商数字化转型和信…

在 Redis 中使用 JSON 文档:命令行界面(CLI)和 Navicat 集成

Redis&#xff0c;因其极高的性能而闻名&#xff0c;是一款多功能的 NoSQL 数据库&#xff0c;擅长处理键值对。虽然 Redis主要用于处理简单数据结构&#xff0c;但是同样支持更多复杂的数据类型&#xff0c;如列表、集合甚至是 JSON 文件。在本文&#xff0c;我们将深入到 Red…

如何使用YOLOv8代码框架中的RT-DETR

1. RT-DETR RT-DETR是由由此&#xff0c;百度推出了——RT-DETR (Real-Time DEtection TRansformer) &#xff0c;一种基于 DETR 架构的实时端到端检测器&#xff0c;其在速度和精度上取得了 SOTA 性能。 RT-DETR开源的代码在百度自己的飞桨paddlepaddle上&#xff0c;因此非…

数组的移动

设计程序&#xff0c;给定包含N个整数的数组array&#xff0c;实现操作&#xff1a;前面各个整数顺序向后移动m个位置&#xff0c;最后的m个整数移动到最前面。方法&#xff1a;void move(int array[], int n,int m ) 输入要求 第一行输入两个整数N(1<N<1e6)和m(0<m&…