会話シーンとして宴を使っている場合のパラメーターについて

458 views
Skip to first unread message

T

unread,
Jun 15, 2023, 10:27:38 PM6/15/23
to 宴ユーザーグループ
宴のバージョン: 宴3.11.2
Unityの習熟度:初心者。簡単なプログラミング程度

お世話になっております。
現在会話シーンとして宴を使っているのですが、独自に作ったボタンなどで宴のパラメーター(好感度や経過日数など)をセーブすること、ロードすることは可能でしょうか?

初歩的な質問で申し訳ありません。


マッドネスラボ

unread,
Jun 16, 2023, 5:48:47 AM6/16/23
to 宴ユーザーグループ
プロジェクトの仕様次第でいくつかやり方が考えられるのですが、

●その1 作っているゲームにセーブ機能がすでにあるパターン
 そこに宴パラメーターのセーブデータを追加する形で拡張するようにプログラムことは可能です。
 ・その1-1 作っているゲームのセーブデータに好感度等の項目を作るパターン
    セーブロードのタイミングで宴のパラメーターに、それらのパラメーターを一つ一つ読み書きするようにプログラムします。
    
 ・その1-2 作っているゲームのセーブデータに宴のパラメーター丸ごとのデータを読み書きするパターン
    宴のパラメーター全体をバイナリ化して読み書きできるので、それを文字列にエンコードしてゲーム側のセーブデータに読み書きします
    (サンプルプログラムが必要ならご連絡ください。)


●その2 作っているゲームにセーブ機能がないパターン
宴のセーブデータは
・ノベルゲーム用のその他のセーブデータとセットになっている
・オートでロードされるわけではなく、セーブロード用のUIが必要
という形になっています。
なので、やるとすれば
・ゲームの仕様に合わせて宴のセーブデータを拡張する
・セーブロードのUIを作る(またはオートロードの仕組みを作る)
・セーブロードのタイミングで、ゲームの仕様に合わせて必要な初期化を行う
などが必要になってきます。
具体的には、ゲームごとの仕様次第なので、私の方からはなんともいえません。




2023年6月16日金曜日 11:27:38 UTC+9 T:

Chacha Fndlti0107

unread,
Aug 15, 2023, 9:26:16 PM8/15/23
to 宴ユーザーグループ
作成者では無いのですが、
お手数ですがもし宜しければ、
作っているゲームにセーブ機能がすでにあるパターンとして
ゲーム側のセーブデータに読み書きするためのサンプルプログラムを書いて貰っていいでしょうか?

セーブの部分で困っており検索したらこの質問があったので
このような形でお願いしたしてすみません。

宜しくお願い致します。


2023년 6월 16일 금요일 오후 6시 48분 47초 UTC+9에 マッドネスラボ님이 작성:

マッドネスラボ

unread,
Aug 15, 2023, 10:32:07 PM8/15/23
to 宴ユーザーグループ
了解しました。下記にサンプルを示します。

>  ・その1-1 作っているゲームのセーブデータに好感度等の項目を作るパターン
>     セーブロードのタイミングで宴のパラメーターに、それらのパラメーターを一つ一つ読み書きするようにプログラムします。
これに関してはシンプルに対象となるパラメーターのキーを指定して、SetParameterとGetParameterを使ってプログラムしてください。

> ・その1-2 作っているゲームのセーブデータに宴のパラメーター丸ごとのデータを読み書きするパターン
>      宴のパラメーター全体をバイナリ化して読み書きできるので、それを文字列にエンコードしてゲーム側のセーブデータに読み書きします
>      (サンプルプログラムが必要ならご連絡ください。)

こちらに関しては、下記がサンプルになります。
扱いやすいように、バイナリ化したものを文字列にコンバートして扱っていますが、直接バイナリを扱うのであればコンバートの部分を省略するなどしてください。


public class SampleParamIO : MonoBehaviour
{
/// <summary>ADVエンジン</summary>
public AdvEngine Engine { get { return this.GetComponentCacheFindIfMissing( ref engine ); } }
[SerializeField]
protected AdvEngine engine;

//宴のパラメーターを文字列として書き出す
//第二引数を、AdvParamData.FileType.Systemにすると、System系のパラメーターを書き出す
public string WriteParam(AdvParamData.FileType fileType = AdvParamData.FileType.Default)
{
if (Engine.IsWaitBootLoading)
{
Debug.LogError("宴の起動処理が終わっていません");
}

//宴のパラメーターをバイナリ化
byte[] buffer = BinaryUtil.BinaryWrite((writer) => Engine.Param.Write(writer, fileType));
//バイナリを文字列化
string saveData = System.Convert.ToBase64String(buffer);
return saveData;
}

//文字列化したデータから、宴のパラメーターを読み込む
//第二引数を、AdvParamData.FileType.Systemにすると、System系のパラメーターに書き込む
public void ReadParam(string saveData, AdvParamData.FileType fileType = AdvParamData.FileType.Default)
{
if (Engine.IsWaitBootLoading)
{
Debug.LogError("宴の起動処理が終わっていません");
}

//文字列をバイナリ化
byte[] buffer = System.Convert.FromBase64String(saveData);
//バイナリから宴のパラメーターを読み込み
BinaryUtil.BinaryRead(buffer, (reader) => Engine.Param.Read(reader, fileType));
}

const string UtageSaveKey = "UtageSaveKey";

//Unity公式のPlayerPrefsを使ってパラメーターのみを書き込むサンプル
public void LoadSaveDataByPlayerPrefs()
{
PlayerPrefs.SetString(UtageSaveKey, WriteParam());
}

//Unity公式のPlayerPrefsを使ってパラメーターのみを読み込むサンプル
public void ReadSaveDataByPlayerPrefs()
{
var saveData = PlayerPrefs.GetString(UtageSaveKey);
if (string.IsNullOrEmpty(saveData))
{
//まだセーブされてない
return;
}

ReadParam(saveData);
}

}
2023年8月16日水曜日 10:26:16 UTC+9 fndlt...@gmail.com:

Chacha Fndlti0107

unread,
Aug 15, 2023, 11:39:39 PM8/15/23
to 宴ユーザーグループ
物凄く素早い対応ありがとうございます!

いつもお世話になっております。
そしてこの様な素敵なアセットを開発して下さって本当にありがとうございます。
今後ともよろしくお願い致します。


2023년 8월 16일 수요일 오전 11시 32분 7초 UTC+9에 マッドネスラボ님이 작성:
Reply all
Reply to author
Forward
0 new messages