ボイスをユーザー操作でもう一度再生させたい

18 views
Skip to first unread message

パペットナイト

unread,
Jan 4, 2023, 8:00:44 AM1/4/23
to 宴ユーザーグループ
いつも大変お世話になっております。

宴のバージョン: 宴3.11.6
UnityのバージョンとOS: Unity2021.3.10f1 Windows

ユーザーの操作でボイスをもう一度再生させたいと思っています。

バックログを開きそのテキストボタンをクリックすることで
もう一度再生させることがきますが、
このケースでは普段のテキストウィンドウの横にサウンドアイコンを配置して
その振る舞いをさせたいと考えています。
(セーブ、ロード、スキップ、などと同じような感じの配置になります)

またバックログ同様、ボイスデータがないテキストではそのアイコンを非表示にしたいです。

これは宴の標準機能で実現できますでしょうか?

自分でカスタムする場合、どのようなアプローチで実装するのが好ましいでしょうか。

お手数おかけしますが、お知恵お借りできれば幸いです。
どうぞよろしくお願いいたします。

マッドネスラボ

unread,
Jan 4, 2023, 10:19:03 AM1/4/23
to 宴ユーザーグループ
標準機能ではできないので、バックログのデータにプログラムでアクセスして実装する形になります。

必要な機能を拡張して、サンプルコードを追加してみました。
添付のパッケージファイルを適用してください。
(添付ファイルのダウンロード後に、拡張子が *. 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 パペットナイト:
SampleReplayVoice.unitypackage
Reply all
Reply to author
Forward
0 new messages