Files
UnrealEngineUWP/Engine/Documentation/Source/Gameplay/SaveGame/Code/Code_SaveGame.JPN.udn
Matthew Griffin bb70b349ce Merging CL 2804086 from //UE4/Release-4.11 to Dev-Main (//UE4/Dev-Main) to isolate copyright update
#lockdown Nick.Penwarden

[CL 2819020 by Matthew Griffin in Main branch]
2016-01-07 08:17:16 -05:00

115 lines
4.7 KiB
Plaintext

Availability:Public
Title:ゲームを C++ で保存する
Crumbs:%ROOT%, Gameplay, Gameplay/SaveGame
Description:C++ でゲームを保存およびロードする方法
[TOC (start:2 end:2)]
## SaveGame オブジェクトの作成
SaveGame クラスは、 Kismet/GameplayStatics.h に宣言される関数の保存およびロードのためにターゲットとして使用されるオブジェクトを設定します。
[](Programming\Development\ManagingGameCode\CppClassWizard) を使って SaveGame をもとに新規クラスを作成することができます。
![](SaveGameCode.png)(w:800)
このサンプルでは、新規の SaveGame クラスは「MySaveGame」と呼びます。
### ヘッダ
SaveGame オブジェクトのヘッダファイルの中では、 SaveGame を格納するためのどんな変数でも宣言することができます。
UPROPERTY(VisibleAnywhere, Category = Basic)
FString PlayerName;
[REGION:note]
このサンプルでは、SaveSlotName と UserIndex に対するデフォルト値の保存の宣言に使用する変数もあるので、
ここの部分はオプションですので、デフォルト値が変更されない場合は上書される保存スロットは 1 つになります。
[/REGION]
[REGION:codetitlebar]
MySaveGame.h
[/REGION:codetitlebar]
// Copyright 1998-2016 Epic Games, Inc.All Rights Reserved.
#pragma once
#include "GameFramework/SaveGame.h"
#include "MySaveGame.generated.h"
/**
*
*/
UCLASS()
class UMySaveGame : public USaveGame
{
GENERATED_UCLASS_BODY()
UPROPERTY(VisibleAnywhere, Category = Basic)
FString PlayerName;
UPROPERTY(VisibleAnywhere, Category = Basic)
FString SaveSlotName;
UPROPERTY(VisibleAnywhere, Category = Basic)
uint32 UserIndex;
};
### ソース
一般的に、保存システムに何か特別に機能をここで追加したい場合を除き、 SaveGame オブジェクトのソースファイルは関数に対して特定のコードを必要としません。
このサンプルでは、クラス コンストラクタで SaveSlotName と UserIndex の値を定義するので、ゲームプレイ クラスによる読み取りと使用が可能です。
[REGION:codetitlebar]
MySaveGame.cpp
[/REGION:codetitlebar]
// Copyright 1998-2016 Epic Games, Inc.All Rights Reserved.
#include "SaveGameExample.h"
#include "MySaveGame.h"
UMySaveGame::UMySaveGame(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
SaveSlotName = TEXT("TestSaveSlot");
UserIndex = 0;
}
### モジュール ヘッダ ファイル
SaveGame オブジェクトにへアクセスし、 GameplayStatics から関数の作成、保存、ロードを簡単に行うために、ゲーム モジュールのヘッダファイル内の他のすべての「 #include」ステートメントの位置に以下の行を追加してください。
[REGION:codetitlebar]
MyProject.h
[/REGION:codetitlebar]
#include "MySaveGame.h"
#include "Kismet/GameplayStatics.h"
## 変数の保存
変数を SaveGame オブジェクトに保存したい場合は、 SaveGame オブジェクトのインスタンスを作成して、その中に変数を設定しなければなりません。
MyPlayerName = TEXT("PlayerOne");
UMySaveGame* SaveGameInstance = Cast<UMySaveGame>(UGameplayStatics::CreateSaveGameObject(UMySaveGame::StaticClass()));
SaveGameInstance->PlayerName = MyPlayerName;
UGameplayStatics::SaveGameToSlot(SaveGameInstance, SaveGameInstance->SaveSlotName, SaveGameInstance->UserIndex);
## 変数のロード
変数をロードするには、まず UGameplayStatics::LoadGameFromSlot で SaveGame オブジェクトをロードしなければなりません。これにより、 SaveGame オブジェクトのインスタンスが新規作成されます。
ここでも、まず空の SaveGame オブジェクトを作成し、そこからデフォルトの SaveSlotName と UserIndex を読み取れるようにします。このステップは任意であり、全てのゲームの実装に適用するわけではありません。
新規の SaveGame オブジェクトがハードドライブからロードされれば、変数値をそこから読み取り、必要なアクタまたはクラスへ割り当てたり、以下のように直接しようすることができます。
UMySaveGame* LoadGameInstance = Cast<UMySaveGame>(UGameplayStatics::CreateSaveGameObject(UMySaveGame::StaticClass()));
LoadGameInstance = Cast<UMySaveGame>(UGameplayStatics::LoadGameFromSlot(LoadGameInstance->SaveSlotName, LoadGameInstance->UserIndex));
FString PlayerNameToDisplay = LoadGameInstance->PlayerName;
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, PlayerNameToDisplay);
}