ue4回放Replay只能在gameinstance中写吗
时间: 2024-04-23 16:24:38 浏览: 216
不一定。在UE4中,Replay的实现需要在GameInstance中完成,但是你也可以使用其他类来处理Replay,只要在GameInstance中将其初始化并处理即可。另外,你也可以使用第三方插件或工具来处理Replay。但是,为了保持代码的清晰和整洁,建议将Replay相关的处理逻辑集中在GameInstance中。
相关问题
Ue4C++Replay编写回放在非GameInstance中编写的详细案例
在非GameInstance中编写Replay可以分为以下几个步骤:
1. 创建Replay保存文件
首先,需要在游戏中定义一个Replay保存文件。这个文件可以在游戏启动时创建,也可以在需要保存Replay时创建。一般来说,我们可以将Replay保存文件定义为一个FString类型的变量,并在需要时进行初始化。例如:
```cpp
FString ReplayFilename;
```
2. 开始Replay录制
一旦定义了Replay保存文件,就可以开始录制Replay了。这个过程一般分为两步:开始录制和结束录制。
开始录制Replay可以使用UEngine::NetworkRemapPath函数。这个函数可用于将网络路径(例如“/Game/Maps/MyMap”)重定向到Replay保存文件。例如:
```cpp
ReplayFilename = FString("MyReplay.replay");
GetEngine()->NetworkRemapPath("/Game/Maps/MyMap", *ReplayFilename);
```
一旦调用了NetworkRemapPath函数,游戏就会开始录制Replay。在录制期间,所有游戏事件都被记录并保存到Replay文件中。
3. 停止Replay录制
当需要停止Replay录制时,可以使用UEngine::NetworkRemapPath函数将重定向路径恢复到原始状态。例如:
```cpp
GetEngine()->NetworkRemapPath("/Game/Maps/MyMap", "/Game/Maps/MyMap");
```
这个过程会将重定向路径从Replay保存文件恢复到原始路径,并停止录制Replay。
4. 回放Replay
一旦Replay被录制,就可以进行回放了。回放过程可以在任何时候进行,不一定需要在GameInstance中进行。一般来说,我们可以将回放过程封装在一个UE4蓝图中,然后在需要时进行调用。
回放Replay的过程与录制过程类似,只需要将NetworkRemapPath函数的参数改为Replay保存文件的路径即可。例如:
```cpp
ReplayFilename = FString("MyReplay.replay");
GetEngine()->NetworkRemapPath(*ReplayFilename, "/Game/Maps/MyMap");
```
这个过程会将网络路径重定向到Replay保存文件,然后开始回放Replay。在回放期间,游戏会根据保存的Replay事件来模拟游戏过程。
以上就是在非GameInstance中编写Replay的详细案例。需要注意的是,Replay录制和回放过程中需要保存和读取的数据非常多,因此需要仔细设计数据结构和算法,以确保Replay文件的正确性和可读性。
Replay游戏回放 for UE4.26
Replay游戏回放是一个用于在Unreal Engine 4.26中实现游戏回放功能的系统。你可以通过使用Replay System Tutorial提供的教程来实现这个功能。[1]
你需要创建一个新的蓝图类GI_Replay,它继承自MyGameInstance,并重载函数BP on Find Replays Complete 1。此外,还需要创建一个新的控制器类BP_PB_ReplaySpectator,它继承自PC_ReplaySpectator。然后,在第一人称和第三人称游戏模式蓝图中设置重播旁观者为创建的PC_ReplaySpectator。最后,在两人称角色蓝图中开启复制和复制运动,并编写录制逻辑。
为了解决问题,在MyGameInstance.cpp文件中找到“INetworkReplayStreamer::EnumerateStreams”的函数定义,并在FindReplays函数中进行修改。具体修改如下:
void UMyGameInstance::FindReplays() {
if (EnumerateStreamsPtr.Get()) {
EnumerateStreamsPtr.Get()->EnumerateStreams(FNetworkReplayVersion(), FString(), FString(), OnEnumerateStreamsCompleteDelegate);
}
}
这样就可以解决问题了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [UE4 Replay重播系统(游戏死亡回放) 制作及问题解决](https://blog.csdn.net/qq_42618180/article/details/118495081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [【UE4】Replay游戏回放 for UE4.26](https://blog.csdn.net/qq_28660661/article/details/125605426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文