こんにちは、ほしみです。
ビジュアルノベル用アセット「宴」を使い、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はシンプルすぎるので、ビジュアル面の改良は必要になるとおもいます。
今回は以上です。よきゲーム制作ライフを────ではまたφ(・ω・ )
▼ ゲーム制作チャンネル
▼ 関連記事