[Unity]パズルゲームなど各ステージごとでセーブする方法(画像付き)

パズルゲームなどステージがいくつか存在しているゲームは、クリアするごとに次のステージでセーブされるようになっていますね。

この記事ではそんなステージごとにセーブする方法を解説していきます。


解説に使うのは画像赤丸の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を入れていださい。)

TOPに戻る

セーブできるステージを追加する

セーブ機能は完成ですが、解説したものは2ステージしかセーブできません。実際にゲームを作っていくと多くのステージを用意すると思います。

なのでセーブできるステージを増やす方法を書いていきます。スクリプトの「Stagesave」の16行目から19行目のコードをステージの数だけ複製していき、複製したコードは「if(save == x)」のxの数値を1ずつ増やしていきます。

「SceneManager.LoadScene(“);」には追加するステージのシーン名を入力します。

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

スクリプトができたらステージのセーブボタンにクリック時の処理を入れていきます。同じようにプロジェクトの「save」を「クリック時()」の右下に入れます。

左の項目にはスクリプトで作った「SAVE3〜」の関数があるのでそれを設定していけば完成です。

TOPに戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です