【Unity】QuickSaveを実装、手軽なセーブ機能

当サイトで紹介する商品・サービス等の外部リンクは、アフィリエイト広告を含む場合があります。
スポンサーリンク
本記事を読むと以下の実行ができます

Q.Loadボタンを押したときに、Q.Saveボタンを押してセーブしたシーンをロードする。

第7回-クイックセーブとクイックロードを実装の動作確認

Unityで作るノベルゲーム第7回は、Unityでクイックセーブ、クイックロードを実装します。

前回までのノベルゲーム制作は、セリフの管理や素材、テキストの表示を導入してきました。

今回は、ゲームにおいて最も大切なセーブとロードに関する機能を作成していきます。

Unityには、セーブやロードを作る方法がたくさんあります。

例えば、Unity標準のセーブ・ロード機能「PlayerPrefs」やオブジェクトをJSON(JavaScript Object Notation)に変換する「JsonUtility」を使ったセーブ・ロード機能、アセット「Easy Save」を使った方法が挙げられます。

しかし、以上の方法によるセーブ・ロード機能は以下のデメリットがあります。

PlayerPrefs処理が遅い、データが分割される、保存先がレジストリ、セーブデータの改ざん
JSONデータの可変性、バージョン管理が複雑
Easy Save有料($75.90←およそ1万円)

JSONはおすすめの方法ですが、本記事では、別の方法として、バイナリを使ってセーブデータを管理します。

バイナリを使えば、複数のセーブデータの管理も可能になります。

本記事では、セーブ・ロード機能の第一歩として、クイックセーブとクイックロードの実装をします。

本記事は次の人におすすめ
  • ノベルゲームの作り方を知りたい。
  • クイックセーブとクイックロードの使い方を知りたい。
スポンサーリンク

クイックセーブ・クイックロード

クイックセーブ・クイックロードの確認

ノベルゲームにおける「QuickSave」と「QuickRoad」は、プレイヤーがゲームをよりスムーズに進行させるための機能です。

通常のセーブやロードは、セーブボタンを押して、用意された100個程度のセーブが保存できて、それぞれをロードボタンを押して、でそのシーンまで戻ることができます。

一方で、クイックセーブとクイックロードは、1つ、2つと数少ないですが、短時間で手軽にゲームの状態を保存・読み込みすることができます。

クイックセーブとクイックロードは、プレイヤーにとって便利な機能であり、ゲームの進行を効率化することができます。

特にノベルゲームではストーリーの流れや選択肢の結果によって展開が変わるため、プレイヤーが自由にセーブ・ロードできることは重要な要素となります。

選択肢でも重要なシーンでもないけれど、セーブしたい。

そんなときに役立つのがクイックセーブとクイックロードの機能になります。

クイックセーブ

クイックセーブは、プレイヤーが現在のゲームの進行状況を瞬時に保存する機能です。

特定のポイントでゲームを一時停止し、その時点の状態を保存します。

例えば、表示されているテキストや選択肢の進行度などを保存します。

通常、ノベルゲームのクイックセーブはメニューやシステムボタンからアクセスできるようになっています。

クイックロード

クイックロードは、クイックセーブで保存されたゲームの状態を瞬時に読み込む機能です。

プレイヤーはクイックロードを選択することで、最後に行ったクイックセーブの状態からゲームを再開できます。

クイックロードを使用すると、瞬時に前回のセーブポイントからゲームを再開することができます。

クイックセーブとクイックロードの実装

ここまで、クイックセーブとクイックロードの機能と実用性を理解したところで、ここからはノベルゲームに実装していきます。

通常のセーブ・ロードに比べて、クイックセーブとクイックロードは変数の値を互いに交換する操作のみで非常に簡単に実装できます。

交換をする変数「A」・「B」として具体的に考えます。

//クイックセーブ
A=B;

//クイックロード
B=A;

本記事で紹介するソースコードでは、Aは「csvcontroler.i」、Bは「QPoint」となります。

「csvcontroler.i」は前回まで使用していたスクリプト「csvcontroler.cs」において静的なint型変数「i」を用いています。

ソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class QSave_Load : MonoBehaviour
{
    int QPoint;

    private void Start()
    {
        Debug.Log(csvcontroler.i);
    }

    public void QSave()
    {
        QPoint = csvcontroler.i; // csvcontroler クラスの静的変数 i の値を保存
        Debug.Log("Saved QPoint: " + QPoint);
    }

    public void QLoad()
    {
        csvcontroler.i = QPoint; // 保存した QPoint の値を csvcontroler クラスの静的変数 i にロード
        Debug.Log("Loaded QPoint: " + csvcontroler.i);
    }
}

思い通りのゲームが作れない

Unityでゲーム開発しているけど完成しない。
技術的な壁や知識不足が原因で、思い描いたゲームを実現するのは難しいです。

しかし、Udemyは動画で実践的なゲーム開発を解説していて、
購入した講座は再生・停止・スキップなどが可能なオンデマンド形式なので、
専門的な内容を自分のペースで学習できます。

Udemyの特徴
  • プロのエンジニアによる講習が受けられる
  • 自分のペースで学習を進められる
  • オンデマンド形式だから何度でも視聴可能
  • 不満足なコースは視聴していても返金可能返金ポリシー

Unityの機能を網羅したいや作りたいゲームがある人はUdemy学習を取り入れましょう。
数多くある講座の中から特におすすめな講座を3つ紹介します。

Unityのはじめの一歩としておすすめ。開発例に物理挙動やアニメーションを使用しているので、今後の開発が円滑になる。

トランプを題材にした講座。カードゲームやボードゲーム開発に応用可能

UnityエンジンのインストールやC#の文法に加えて、App StoreとGoogle Playにゲームをリリース方法を解説。

容量不足を解消

Unityのプロジェクトは1.5GB~3.5GBと大きく、クリエイターはHDD・SSD増設が必要です。

価格耐久性静音性読み書きサイズ
HDD
SSD

注目点は、HDDは安価だけど壊れやすい。SSDは丈夫だけど高価。
したがって、データの持ち運びをしない場合はHDD、持ち運びする場合はSSDがおすすめです。

  • 据え置きHDD
  • 外付けSDD
  • 内蔵SSD

ぜひ、あなたのクリエイティブな作業環境に兼ね備えたストレージをお役立てください。

解説

今回のスクリプトでは、名前空間の変更がありません。

「QPoint」はint型の変数で、保存および読み込みされるゲームデータを保持します。

 int QPoint;

Startメソッドは、csvcontrolerクラスの静的変数iの値を出力しています。
別に必要ではありませんが、consoleウィンドウにて処理できているか確認するために入れています。

    private void Start()
    {
        Debug.Log(csvcontroler.i);
    }

QSaveメソッドは、ゲームデータを保存するためのメソッドです。
QPointにcsvcontrolerクラスの静的変数iの値を代入し、デバッグログに保存された値を表示します。

    public void QSave()
    {
        QPoint = csvcontroler.i; // csvcontroler クラスの静的変数 i の値を保存
        Debug.Log("Saved QPoint: " + QPoint);
    }

QLoadメソッドは、ゲームデータを読み込むためのメソッドです。
csvcontrolerクラスの静的変数iに保存されたQPointの値を代入し、デバッグログにロードされた値を表示します。

    public void QLoad()
    {
        csvcontroler.i = QPoint; // 保存した QPoint の値を csvcontroler クラスの静的変数 i にロード
        Debug.Log("Loaded QPoint: " + csvcontroler.i);
    }

実演

以下から動作確認ができます。

お借りしている素材

今回のスクリプト「QSave_Load.cs」をHierarchyウィンドウにアタッチをしてください。

また、クイックセーブとクイックロードを処理するUIボタン「Q.Save」と「Q.Load」を選択して、onclickの項目でそれぞれQSaveメソッドとQLoadメソッドをアタッチしてください。

アタッチする。

ここまで完了しましたら、再生ボタンを押してください。

冒頭のような処理が行われば、成功です。

まとめ

ノベルゲームにおける「クイックセーブ」と「クイックロード」は、プレイヤーがゲームをスムーズに進行させるための便利な機能です。

通常のセーブやロードとは異なり、クイックセーブとクイックロードではセーブポイントを短時間で保存・読み込みすることができます。

クイックセーブは、プレイヤーが現在のゲームの進行状況を瞬時に保存する機能です。特定のポイントでゲームを一時停止し、その時点の状態を保存します。通常、ノベルゲームではメニューやシステムボタンからアクセスできるようになっています。

クイックロードは、クイックセーブで保存されたゲームの状態を瞬時に読み込む機能です。プレイヤーはクイックロードを選択することで、最後に行ったクイックセーブの状態からゲームを再開できます。クイックロードを使用すると、前回のセーブポイントからゲームを即座に再開することができます。

クイックセーブとクイックロードの実装は比較的簡単で、変数の値を互いに交換するだけです。

// クイックセーブ
QPoint = csvcontroler.i;

// クイックロード
csvcontroler.i = QPoint;

クイックセーブでは、「csvcontroler.i」の値を「QPoint」に代入し、クイックロードではその逆の操作を行います。

クイックセーブとクイックロードは、ノベルゲームにおいて重要な要素であり、プレイヤーが自由にゲームの進行を管理できるようにするための機能です。

これにより、プレイヤーは選択肢やストーリーの展開によって影響を受ける前に、自由にセーブ・ロードすることができます。

タイトルとURLをコピーしました