こんにちは、ほしみです。
ビジュアルノベル用アセット「宴」を使い、Adventure Creator(AC)おける会話シーンを作成します。なおコーディングの知識はほぼ不要で、ACエディター側での操作もありません。
(AC自体にも会話シーンを作る機能はあるんですが、ちょっと編集と管理がメンドウなんですよね。宴をつかったほうがたぶんラクです)
以下、メモがてらまとめておきます。誤りがあれば指摘していただけると助かります。なお今回の例では「画像ボタンを押すと会話が発生する」というイベントを作ります。
「公式解説は?」
▼ 会話シーンとして宴を使う方法 公式解説

上記の解説だけではわからなかったので、ほかにいろいろ調べたことを含めて補足的にまとめていきます。
「ざっくり教えて!」
- 宴 ⇒ New Project ⇒ Add To Current Scene
- Excelシナリオデータにシナリオラベル「*」追加
- SamleAdvEngineController.csをUtage/Scripts/ADVに追加
- スクリプトのエラーをVisualStudioで修正(エラー行のアイコンクリック⇒using Utage;選択)
- 画像のインスペクターにSamleAdvEngineControllerスクリプトを追加
- 画像の「Adv Engine」項目にヒエラルキーのAdvEngineをD&D
- 画像にButtonコンポーネント追加
- クリック時()⇒ Runtime Only | 画像| SamleAdvEngineController.JumpScenario | *シナリオラベル
- 画像にImageコンポーネント追加
- Imageコンポーネントの色を透明化
- シーン再生して画像ボタンをクリックしてみる
「くわしく教えて!」
宴プロジェクト作成
- 宴をアセットストアから追加
- メニューの「ツール⇒Utage⇒New Project」
- プロジェクト名を打ちこむ
- Typeは「Add To Current Scene(現在のシーンに追加)を選択
シナリオデータ作成
- 宴プロジェクト名/宴プロジェクト名.xlsを開く
- Startシート選択
- ジャンプ用のシナリオラベル(例 *test)をCommandに追加
- そのほか編集
無料ソフト「Libre Office」で編集した例。なおシナリオラベル「*test」を追記した以外はデフォルトのまま。
スクリプトの作成
▼ SamleAdvEngineController.csのコード

using System;
using System.Collections;
using UnityEngine;
using UtageExtensions;
public class SampleAdvEngineController : MonoBehaviour
{
// ADVエンジン
public AdvEngine AdvEngine { get { return advEngine; } }
[SerializeField]
protected AdvEngine advEngine;
//再生中かどうか
public bool IsPlaying { get; private set; }
float defaultSpeed = -1;
//指定のラベルのシナリオを再生する
public void JumpScenario(string label)
{
StartCoroutine(JumpScenarioAsync(label, null));
}
//指定のラベルのシナリオを再生する
//終了した時にonCompleteが呼ばれる
public void JumpScenario(string label, Action onComplete)
{
StartCoroutine(JumpScenarioAsync(label, onComplete));
}
IEnumerator JumpScenarioAsync(string label, Action onComplete)
{
IsPlaying = true;
AdvEngine.JumpScenario(label);
while (!AdvEngine.IsEndOrPauseScenario)
{
IsPlaying = false;
yield return null;
}
if(onComplete !=null) onComplete();
}
//指定のラベルのシナリオを再生する
//ラベルがなかった場合を想定
public void JumpScenario(string label, Action onComplete, Action onFailed)
{
JumpScenario(label, null, onComplete, onFailed);
}
//指定のラベルのシナリオを再生する
//ラベルがなかった場合を想定
public void JumpScenario(string label, Action onStart, Action onComplete, Action onFailed)
{
if (string.IsNullOrEmpty(label))
{
if(onFailed!=null)onFailed();
Debug.LogErrorFormat("シナリオラベルが空です");
return;
}
if (label[0] == '*')
{
label = label.Substring(1);
}
if (AdvEngine.DataManager.FindScenarioData(label) == null)
{
if(onFailed!=null)onFailed();
Debug.LogErrorFormat("{0}はまだロードされていないか、存在しないシナリオです", label);
return;
}
if (onStart != null) onStart();
JumpScenario(
label,
onComplete);
}
//シナリオの呼び出し以外に、
//AdvEngineを操作する処理をまとめておくと、便利
//何が必要かはプロジェクトによるので、場合によって増やしていく
//以下、メッセージウィンドのテキスト表示速度を操作する処理のサンプル
//メッセージウィンドのテキスト表示の速度を指定のスピードに
public void ChangeMessageSpeed( float speed)
{
if (defaultSpeed < 0 )
{
defaultSpeed = AdvEngine.Config.MessageSpeed;
}
AdvEngine.Config.MessageSpeed = speed;
}
//メッセージウィンドのテキスト表示の速度を元に戻す
public void ResetMessageSpeed()
{
if (defaultSpeed >= 0)
{
AdvEngine.Config.MessageSpeed = defaultSpeed;
}
}
}
- SamleAdvEngineController.csというスクリプトファイルを「Utage/Scripts/ADV」に作成
- Visual Studioで上記コードを貼りつける
- 名前をつけて保存⇒UTF-8で保存(文字化け回避のため)
- エラー行のアイコンをクリック⇒using Utage;選択
画像ボタンの設定
- 画像のインスペクターにスクリプトを追加(コンポーネントを追加)
- 「Adv Engine」項目にヒエラルキーのAdvEngineをD&D(アタッチ)
- 画像にButton(ボタン)コンポーネント追加
- クリック時()の欄をさがす
- 「Runtime Only | 画像をアタッチ| SamleAdvEngineController.JumpScenario | シナリオラベル」とする
- 画像にImage(画像)コンポーネント追加
- Imageコンポーネントの色を透明化
- 画像にGraphicRaycasterコンポーネント追加
「.JumpScenario」は特定シナリオラベルにジャンプするということ。
Imageコンポーネントを追加しないと画像ボタンはクリックできないので注意。初期状態ではボタン画像が白塗りされてしまうので、「色」をクリックして透明度を0に設定する。
テストする
▼ 再生してボタンをクリックしてみる
テスト環境なので背景の雑さは気にしないでください。
まとめ「わりとカンタン」
予想よりもカンタンに組みこめて助かりました。
Adventure Creatorだけでなく、ほかのゲームの会話シーンにも使えそうですね。ただし宴のデフォルトUIはシンプルすぎるので、ビジュアル面の改良は必要になるとおもいます。
今回は以上です。よきゲーム制作ライフを────ではまたφ(・ω・ )
▼ ゲーム制作チャンネル

▼ 関連記事








