引擎版本:4.26
参考博客
Wiki上大神:Replay System Tutorial给出了教程基本可以实现功能。(翻译版本:重播系统测试版本)
根据上述案例制作后,在MyGameInstance.cpp中出现了一些问题,可以参考这位博主"JiangCoolguy"的文章:重播系统问题修复
其他问题修复
1. 无法打开包括文件: “NetworkVersion.h”: No such file or directory
解决:
在MyGameInstance.cpp中头文件,将
#include "NetworkVersion.h"
修改为
#include "Misc/NetworkVersion.h"
2.“INetworkReplayStreamer::EnumerateStreams”: 函数不接受 4 个参数
找到INetworkReplayStreamer::EnumerateStreams”的函数定义,
解决:
在MyGameInstance.cpp中FindReplays函数,
void UMyGameInstance::FindReplays()
{
if (EnumerateStreamsPtr.Get())
{
EnumerateStreamsPtr.Get()->EnumerateStreams(FNetworkReplayVersion(), FString(), FString(), OnEnumerateStreamsCompleteDelegate);
}
}
修改函数参数为:
void UMyGameInstance::FindReplays()
{
if (EnumerateStreamsPtr.Get())
{
EnumerateStreamsPtr.Get()->EnumerateStreams(FNetworkReplayVersion(), int32(), FString(), TArray<FString>(), OnEnumerateStreamsCompleteDelegate);
}
}
3.“GameSavedDir”: 不是“FPaths”的成员
解决:
需要找到项目的Save文件.
在MyGameInstance.cpp中RenameReplay()函数,
由
const FString DemoPath = FPaths::Combine(*FPaths::GameSavedDir(), TEXT("Demos/"));
修改为:
const FString DemoPath = FPaths::Combine(*FPaths::ProjectSavedDir(), TEXT("Demos/"));
总结:
Pawn派生出的三个重要的类:
DefaultPawn
DefaultPawn里默认带了一个DefaultPawnMovementComponent、spherical CollisionComponent(球形碰撞组件)和StaticMeshComponent。
SpectatorPawn
SpectatorPawn提供了一个基本的USpectatorPawnMovement(不带重力漫游),并关闭了StaticMesh的显示,碰撞也设置到了“Spectator”通道;用来提供某些游戏里解说视角,即可以不显示玩家角色,但玩家可以控制摄像机观察整个游戏世界;
Character
Character可以理解为一个人形的Pawn,在Pawn的基础上新增了像人一样行走的CharacterMovementComponent(移动组件),CapsuleComponent(胶囊体组件),mesh(骨骼上蒙皮的网格);
Replay Sepectator Player Controller Class:
当处于观察者模式时,调用的controller!! 这一点非常重要.