標準機能ではできないので、バックログのデータにプログラムでアクセスして実装する形になります。
必要な機能を拡張して、サンプルコードを追加してみました。
添付のパッケージファイルを適用してください。
(添付ファイルのダウンロード後に、拡張子が *. gzになっている場合は、*.unitypackageに変えてからプロジェクトに適用してください)
パッケージを適用すると、
Utage\Sample\Scripts\SampleReplayVoice.cs というファイルが追加されます。
それがボイス再生用のサンプルコードです。
サンプルでコアになるのは次の部分で、
バッグログを更新するコマンドを実行した直後に呼ばれます。(つまり現在のページのテキスト系コマンドを実行した直後です)
//現在のページのログデータ追加後に呼ばれる
void OnAddBackLogData(AdvBacklogManager backlogManager)
{
EnableVoice =TryGetLogVoiceFileName(out string fileName, out string characterLabel);
this.gameObject.SetActive(EnableVoice);
}
また、次のようにして、もっとも最近のバックログデータ(つまり今のページのログ)ですでにボイスがあったら、ボイスファイル名とキャラクター名を取得するようにしています。
//今のログデータからボイス名とそのキャラクター名を取得
bool TryGetLogVoiceFileName(out string fileName, out string characterLabel)
{
fileName = characterLabel = null;
if (Engine == null || !Engine.IsStarted)
{
return false;
}
var log = Engine.BacklogManager.LastLog;
if (log==null)
{
return false;
}
fileName = log.MainVoiceFileName;
if (fileName.IsNullOrEmpty())
{
return false;
}
characterLabel = log.FindCharacerLabel(fileName);
return true;
}
ただ、ボイスのボタン表示をオンオフしたりするのは、場合によってアレンジが必要になると思います。
あくまでサンプルなので、コピペするなりして独自にプログラムを作成し、必要に応じて調整してください。
サンプルではログが更新された際に
this.gameObject.SetActive(EnableVoice);
でやっています。つまり、このコンポーネントをボタンと同じgameObjectにつける前提です。
また、「ボイスがない」をどう定義するかによって、オンオフのタイミングが違うので、その辺も要調整だと思います。
このサンプルでは改ページの時にはオンオフをしていませんが、メッセージウィンドウが非表示であればボタン全体が非表示になるので、おそらく不要になると思うのですがちょっと微妙です。
必要に応じてOnBeiginPageなどを使ってアレンジしてみてください。
また、このサンプルは1ページ内に1ボイス以下なら機能すると思いますが、
ページ内を複数のテキストにわけて、ボイスファイルも分割している場合は、おそらく思ったように機能しないと思います。
その場合も、細かい仕様によって実装方法が変わります(分割したファイルを順番に鳴らすのか、分割のみ鳴らすのか、同一キャラなのか違うキャラである可能性があるのか、など)
このサンプルではそこまでカバーしていません。
2023年1月4日水曜日 22:00:44 UTC+9 パペットナイト: