• 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;
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    // Fill out your copyright notice in the Description page of Project Settings.
    
    
    #include "FirstSaveGame.h"
    
    UFirstSaveGame::UFirstSaveGame() {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 在角色类中AMainCharacter中添加保存和加载函数
    	UFUNCTION(BlueprintCallable)
    	void saveGame();
    
    	UFUNCTION(BlueprintCallable)
    	void loadGame();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    1. 在AMainCharacter的蓝图类中,设置设置按键o加载和p保存
      在这里插入图片描述

    aaa

  • 相关阅读:
    强强联手,数字焕新生 | 达索系统、百世慧与诺德股份正式签署战略合作协议
    [附源码]计算机毕业设计JAVA基于JSP健身房管理系统
    洛谷 : P1020 [NOIP1999 普及组] 导弹拦截
    雨量水位监测显示屏内涝状况提前掌握
    大数据平台 Hadoop面临的三大安全问题及解决方案
    Godot屏幕抖动效果原理与实现
    【Redis】Redis的特性和应用场景 · 数据类型 · 持久化 · 数据淘汰 · 事务 · 多机部署
    【Vue项目复习笔记】标题和内容的联动效果
    Excel表列名称
    数字签名标准(DSS)
  • 原文地址:https://blog.csdn.net/wb175208/article/details/127459763