パズルゲームなどステージがいくつか存在しているゲームは、クリアするごとに次のステージでセーブされるようになっていますね。
この記事ではそんなステージごとにセーブする方法を解説していきます。
解説に使うのは画像赤丸の3つのシーンと「save」というオブジェクト、「Savecore」、「Stagesave」の2つのスクリプトです。

最終的に下の動画のようになります。動画ではタイトル画面とステージ1、ステージ2の3つのシーンがあり、ステージ1、2のシーンにはステージを移動するボタンとセーブするボタンが付いています。
最初にスタートボタンを押すとステージ1に移動しますが、ステージ2のセーブボタンを押すと次からスタートを押した時にステージ2に移動していますね。
解説
まずは二つのスクリプト「Stagesave」、「Savecore」を作り、コードを書いていきます。コードはそのままコピー&ペーストしても大丈夫です。
↓「Stagesave」のコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Stagesave : MonoBehaviour
{
public int save = 1;//セーブする数値
public void Save()
{
save = PlayerPrefs.GetInt("SAVE", 0);
}
//ゲームスタート
public void _Start()
{
if (save == 1)//もしsaveが1なら処理
{
SceneManager.LoadScene("1");//「stage 1」を読み込む
}
if (save == 2)//もしsaveが2なら処理
{
SceneManager.LoadScene("2");//「stage 2」を読み込む
}
}
//セーブ
//①
public void SAVE1()
{
save = 1;//saveを1にする
PlayerPrefs.SetInt("SAVE", save);
PlayerPrefs.Save();//セーブする
}
public void SAVE2()
{
save = 2;//saveを2にする
PlayerPrefs.SetInt("SAVE", save);
PlayerPrefs.Save();//セーブする
}
}
「Stagesave」の18行目と22行目の赤丸にはステージのシーン名を入れてください。この記事ではステージのシーンの名前が「1」「2」となっているため赤丸の中を「1」「2」としています。

↓「Savecore」のコード
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Savecore : MonoBehaviour
{
public int save = 1;//セーブ数値
public Stagesave stagesave;//プロジェクトのゲームオブジェクトを参照
// Start is called before the first frame update
void Start()
{
save = PlayerPrefs.GetInt("SAVE", 0);
}
// Update is called once per frame
void Update()
{
PlayerPrefs.SetInt("SAVE", save);
PlayerPrefs.Save();
int SAVE;//変数SAVE
SAVE = stagesave.save;//SAVEをStagesaveのsave値と同じにする
save = SAVE;//saveをSAVEと同じにする
}
//ゲームスタート
public void _Start()
{
//①
if (save == 1)//saveが1なら処理
{
SceneManager.LoadScene("ステージ1");//シーン「ステージ1」に移動
}
if (save == 2)//saveが2なら処理
{
SceneManager.LoadScene("ステージ2");//シーン「ステージ2」に移動
}
}
}
スクリプトができたらヒエラルキーの「+」マークから「空のオブジェクトを作成」をクリックします。

オブジェクトの名前を「save」に変え、スクリプトの「Stagesave」を入れます。

ヒエラルキーの「save」をプロジェクトに移動させます(画像1番目の赤丸)。
次に「Savecore」をステージ移動するボタンに入れます(画像2番目の赤丸)。画像だと「スタート」のボタンですね。
そしてボタンに入れた「Savecore」のStagesaveにヒエラルキーの「save」を入れます(画像3番目の赤丸)。次にButtonの「クリック時()」の右下の「+」マークをクリックし、表示される項目の左下に「save」を入れます(画像4番目の赤丸)。

「クリック時()」の右上の項目は「Stagesave」の中の「_Stare()」をクリックします。

最後にステージの設定をしていきます。セーブしたいシーンにはセーブするためのボタンを用意し、そのボタンに「Stagesave」を入れます(画像1番目の赤丸)。
ボタンの「クリック時()」にはプロジェクトの「save」を入れます(画像2番目の赤丸)。
「クリック時()」の右上にはStagesave→SAVE1を入れます。

ステージ2も同じようにすれば完成です。(ステージ2では「クリック時()」の右上にSAVE2を入れていださい。)

セーブできるステージを追加する
セーブ機能は完成ですが、解説したものは2ステージしかセーブできません。実際にゲームを作っていくと多くのステージを用意すると思います。
なのでセーブできるステージを増やす方法を書いていきます。スクリプトの「Stagesave」の16行目から19行目のコードをステージの数だけ複製していき、複製したコードは「if(save == x)」のxの数値を1ずつ増やしていきます。
「SceneManager.LoadScene(““);」には追加するステージのシーン名を入力します。

同じように35行目から40行目のコードをステージの数だけ複製していき、「public void SAVEx」と「save =x;」のxの数値を1ずつ上げていきます。

スクリプトができたらステージのセーブボタンにクリック時の処理を入れていきます。同じようにプロジェクトの「save」を「クリック時()」の右下に入れます。
左の項目にはスクリプトで作った「SAVE3〜」の関数があるのでそれを設定していけば完成です。

コメントを残す