セーブデータを独自拡張する
投稿日:2015年9月29日 | 最終更新日:2024年5月18日
目次
概要
宴のセーブロード機能に、自分で拡張したデータを追加する方法です。
セーブロードをカスタムするには、IAdvSaveDataインターフェースを使ったコンポーネントを作成し、その中にセーブロードの処理を書く必要があります。
自分で作ったゲームのデータを宴の機能を使ってセーブすることも可能ですし、SendMessage、SendMessageByNameなどでプログラムを呼び出す方法とあわせて使えば、独自に拡張した演出などもセーブ可能になります。
インターフェースを使ったコンポーネントを作成
セーブロードの対象となるコンポーネントは、IAdvSaveDataインターフェースを使用する必要あります。
以下は、IAdvSaveDataインターフェースを実装したコンポーネントのサンプルです。
(「広告の表示フラグ」を宴のシナリオデータから操作可能な形でセーブデータにも反映させるサンプルです)
using UnityEngine;
using Utage;
using System.Collections;
/// ADV用SendMessageByNameコマンドから送られたメッセージを受け取る処理のサンプル
[AddComponentMenu("Utage/ADV/Examples/SendMessageByName")]
public class SampleSendMessageByName : MonoBehaviour, IAdvSaveData
{
//広告のオンオフフラグなど
public bool isAdOpen = false;
//シナリオからコマンドを呼んで切り替える
void SetEnableAdvertise(AdvCommandSendMessageByName command)
{
this.isAdOpen = command.ParseCellOptional<bool>(AdvColumnName.Arg3, false);
}
//セーブに使うキーは他のカスタムセーブデータを被らないように
public string SaveKey { get { return "SampleSendMessageByName"; } }
//クリアする
public void OnClear()
{
this.isAdOpen = false;
}
//バージョンチェックしたほうが安全
const int Version = 0;
//書き込み
public void OnWrite(System.IO.BinaryWriter writer)
{
writer.Write(Version);
writer.Write(this.isAdOpen);
}
//読み込み
public void OnRead(System.IO.BinaryReader reader)
{
//バージョンチェック
int version = reader.ReadInt32();
if (version == Version)
{
this.isAdOpen = reader.ReadBoolean();
}
else
{
Debug.LogError(LanguageErrorMsg.LocalizeTextFormat(ErrorMsg.UnknownVersion, version));
}
}
}
コンポーネントを使ったオブジェクトを作成
新しいオブジェクトを作成し、作成したコンポーネントをAddComponentする
SaveManagerにオブジェクトを登録
オブジェクトがAdvEngin以下にある場合、
(Version4.0.5以降)
IAdvSaveDataを継承したコンポーネントがAdvEngine以下にあるコンポーネントの場合は自動的にセーブ対象になります。
オブジェクトがAdvEngin以下にない場合、
IAdvSaveDataを継承したコンポーネントがAdvEngine以下にない場合は、Adv Save ManagerコンポーネントののCustom Save Data Objectsに設定する必要があります。
シナリオから操作
SendMessgaeByNameコマンドなどを使って、シナリオから対象オブジェクトを操作します。
セーブロードを確認
実際にセーブロードが判定されるか確認してみましょう。
セーブのタイミング
宴のセーブは、基本的に「各ページの冒頭の状態」を、ページが切り替わるごとにバッググランドでオートセーブしています。
「セーブボタンを押したタイミング」ではないので、その点は注意してください。
これはなぜかというと「ロード後には、ページの冒頭から再開する」必要があるためです。
関連