UE4游戏保存

在游戏运行过程中由于某些事情需要暂停一下游戏,那就需要把游戏当前的进度保存起来,下次打开的时候还可以再次玩,我们这里主要保存的就是。所有需要有一个游戏保存的机制。UE4提供了这样的机制。

  1. 首先新建一个类继承在SaveGame,命名为FirstSaveGame
    在这里插入图片描述
  2. 打开VS2019编辑代码
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/SaveGame.h"
#include "FirstSaveGame.generated.h"

/**
 * 用来保存游戏的结构体
 */

USTRUCT(BlueprintType)
struct FCharacterStates {
	GENERATED_BODY()

	UPROPERTY(VisibleAnywhere, Category="SaveGameData")
	float heath;//角色健康值

	UPROPERTY(VisibleAnywhere, Category = "SaveGameData")
	float maxHeath;//角色的最大健康值

	UPROPERTY(VisibleAnywhere, Category = "SaveGameData")
	float stamina;//耐力值

	UPROPERTY(VisibleAnywhere, Category = "SaveGameData")
	float maxStamina;//最大耐力值

	UPROPERTY(VisibleAnywhere, Category = "SaveGameData")
	int32 coinsCount;//金币数量

	UPROPERTY(VisibleAnywhere, Category = "SaveGameData")
	FVector loaction;//角色的位置

	UPROPERTY(VisibleAnywhere, Category = "SaveGameData")
	FRotator rotation;//角色旋转
};

UCLASS()
class FIRSTPROJECT_API UFirstSaveGame : public USaveGame
{
	GENERATED_BODY()
public:
	UFirstSaveGame();

	//Category 必须设置为Basic, 否则无法保存游戏
	UPROPERTY(VisibleAnywhere, Category = Basic)
	FString playerName = TEXT("aaa");

	UPROPERTY(VisibleAnywhere, Category = Basic)
	uint32 userIndex = 0;

	UPROPERTY(VisibleAnywhere, Category = Basic)
	FCharacterStates characterState;
};

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


#include "FirstSaveGame.h"

UFirstSaveGame::UFirstSaveGame() {

}
  1. 在角色类中AMainCharacter中添加保存和加载函数
	UFUNCTION(BlueprintCallable)
	void saveGame();

	UFUNCTION(BlueprintCallable)
	void loadGame();
void AMainCharacter::saveGame() {
	UFirstSaveGame* saveGameInstance = Cast<UFirstSaveGame>(UGameplayStatics::CreateSaveGameObject(UFirstSaveGame::StaticClass()));
	saveGameInstance->characterState.heath = health;
	saveGameInstance->characterState.maxHeath = maxHeath;
	saveGameInstance->characterState.stamina = stamina;
	saveGameInstance->characterState.maxStamina = maxStamina;
	saveGameInstance->characterState.coinsCount = coinsCount;
	saveGameInstance->characterState.loaction = GetActorLocation();
	saveGameInstance->characterState.rotation = GetActorRotation();

	UGameplayStatics::SaveGameToSlot(saveGameInstance, saveGameInstance->playerName, saveGameInstance->userIndex);
}

void AMainCharacter::loadGame() {
	UFirstSaveGame* loadGameInstance = Cast<UFirstSaveGame>(UGameplayStatics::CreateSaveGameObject(UFirstSaveGame::StaticClass()));
	loadGameInstance = Cast<UFirstSaveGame>(UGameplayStatics::LoadGameFromSlot(loadGameInstance->playerName, loadGameInstance->userIndex));

	health = loadGameInstance->characterState.heath;
	maxHeath = loadGameInstance->characterState.maxHeath;
	stamina = loadGameInstance->characterState.stamina;
	maxStamina = loadGameInstance->characterState.maxStamina;
	coinsCount = loadGameInstance->characterState.coinsCount;
	
	SetActorLocation(loadGameInstance->characterState.loaction);
	SetActorRotation(loadGameInstance->characterState.rotation);
}
  1. 在AMainCharacter的蓝图类中,设置设置按键o加载和p保存
    在这里插入图片描述

aaa

  • 0
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值