オートモード中のプログレスバー表示

83 views
Skip to first unread message

ダイス

unread,
Jul 30, 2023, 12:16:33 AM7/30/23
to 宴ユーザーグループ
・宴のバージョン:3.12.4
・Unityのバージョン:2022.3.4.f1
・OSバージョン:Windows11
・Unityの習熟度:初心者、プログラム経験なし

お世話になります。

コードを見て色々といじっていましたが、オートモード中にプログレスバーを表示してオートモード動作中の表示時間を作れないかやっていました。

AdvEngineやUtageUguiConfig、UtageUguiMainGame辺りも見ていたのですが、パラメータが合っているのかすら分かりません。
とりあえずエラーは出ずにUnityに組み込めたものの動作がまだまだ見込めてない状態です。

組み込むのは難易度が高いでしょうか?
この辺りも関連がありそうだとは思いましたが、まだ実際に触れてはいません。

こちら、色々と組み込んでやっていたコードです。エラーが出て手に負えなくなる前のものです。
現状の問題としてはプログレスバーが表示されない、オートモードとプログレスバーの進捗が合わないという点です。

プログレスバー表示がされていた時もありましたがコンフィグ設定を読み込んでいない、今現在は表示が出なくなりました。
オートモード中にテキストが表示されたらプログレスバーが連動して進捗表示、次のテキストが出たら再度プログレスバーを表示して連動させたいというのが本音です。

よろしくお願いします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Utage;
using UtageExtensions;

public class AutoProgress : MonoBehaviour
{
    public AdvEngine Engine { get { return this.GetComponentCacheFindIfMissing(ref this.engine); } }
    [SerializeField]
    protected AdvEngine engine;

    //コンフィグデータへのインターフェース
    protected virtual AdvConfig Config { get { return Engine.Config; } }

    public Image progress; // サークルプログレスバーのImageコンポーネントをここにアタッチ
    public Slider pageSpeedSlider;

    public float autoModeDuration = 5f; // オートモードが完了するまでの時間

    private float currentTime = 0f;
    private bool isAutoMode = false;

    private void Start()
    {
        currentTime = 0f;
        isAutoMode = false;

        // 初期値を設定
        float initialPageSpeed = 5f;
        pageSpeedSlider.value = initialPageSpeed;
        UpdatePageSpeed(initialPageSpeed);
    }

    private void Update()
    {
        if (isAutoMode)
        {
            if (currentTime < autoModeDuration)
            {
                currentTime += Time.deltaTime;
                float fillAmount = currentTime / autoModeDuration;
                progress.fillAmount = fillAmount;
            }
            else
            {
                // オートモードが完了したら何らかの処理を行う場合はここに追加
                isAutoMode = false;
            }
        }
    }

    private void OnPageSpeedSliderValueChanged()
    {
            float pageSpeed = pageSpeedSlider.value;
            UpdatePageSpeed(pageSpeed);
    }

    private void UpdatePageSpeed(float pageSpeed)
    {
        // オートモードを変更

        Config.AutoBrPageSpeed = pageSpeed;
    }


    // オートモードを開始するメソッド
    public void StartAutoMode()
    {
        if (!isAutoMode)
        {
            currentTime = 0f;
            isAutoMode = true;
        }
    }

    // オートモードを停止するメソッド
    public void StopAutoMode()
    {
        isAutoMode = false;
    }
}

別スクリプトでボタントグル制御によりプログレスバー関連の画像の呼び出しはできるようにはしています。(サークル型なので背景と中心部のセット)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ToggleProgressBar : MonoBehaviour
{
    public Image progress; // プログレスバーのImageコンポーネントをここにアタッチ
    public Image ProgressCenter; // プログレスバーのImageコンポーネントをここにアタッチ
    public Image ProgressBase; // プログレスバーのImageコンポーネントをここにアタッチ
    public Toggle toggleButton; // トグルボタンをここにアタッチ

    private void Update()
    {
        // Toggleボタンのアクティブ状態をチェックしてプログレスバーを表示・非表示にする
        if (toggleButton != null && progress != null)
        if (toggleButton != null && ProgressCenter != null)
        if (toggleButton != null && ProgressBase != null)
        {
            progress.gameObject.SetActive(toggleButton.isOn);
        }
    }
}

マッドネスラボ

unread,
Jul 30, 2023, 4:54:42 AM7/30/23
to 宴ユーザーグループ
オートによる入力待ち時間は、エフェクトやテキスト表示の間は進まないなど色々条件があります。
それらを含めて、改ページなどのページ処理を内部で行っているのは、AdvEngine.PageにあるAdvPageコンポーネントになります。
直接的にオートによる入力待ち状態であるか?とか、経過時間がどれくらい経ったかという数値をとってくることはできないのですが、
OnChangePageStatusという、現在のページの状態が変わったときに呼ばれるイベントがあるので、これを使えば現在オート入力待ちかの判定を行うことができます。


以下、サンプルコードです。

using UnityEngine;
using UnityEngine.UI;
using Utage;
using UtageExtensions;

//オートモード入力待ちのプログレス表示のサンプル
public class SampleAutoProgress : MonoBehaviour

{
    public AdvEngine Engine
    {
        get { return this.GetComponentCacheFindIfMissing(ref this.engine); }
    }
    [SerializeField] protected AdvEngine engine;
   
    public Image progress; // サークルプログレスバーのImageコンポーネントをここにアタッチ

    //コンフィグデータへのインターフェース
    protected virtual AdvConfig Config
    {
        get { return Engine.Config; }
    }

    public float AutoModeDuration => Config.AutoPageWaitTime; // オートモードが完了するまでの時間


    private float currentTime = 0f;

    bool IsAutoMode
    {
        get => isAutoMode;
        set
        {
            if (isAutoMode == value) return;
            isAutoMode = value;
            if (!isAutoMode)
            {
                // オートモードが完了したら何らかの処理を行う場合はここに追加
            }
        }
    }
    bool isAutoMode;


    void Awake()
    {
        Engine.Page.OnChangeStatus.AddListener(OnChangePageStatus);
    }

    //現在のページの状態が変わったときに呼ばれる
    void OnChangePageStatus(AdvPage page)
    {
        //待ち時間はここでリセット
        currentTime = 0f;
        //オート状態を更新
        IsAutoMode = CheckAutoMode(page);
    }
   
    //オート入力待ち状態かのチェック
    bool CheckAutoMode(AdvPage page)
    {
        if (!Config.IsAutoBrPage)
        {
            //オート設定でなければfalse
            return false;
        }

        switch (page.Status)
        {
            //ページの状態が入力待ち状態になったらtrue
            case AdvPage.PageStatus.WaitInputBrPage:
            case AdvPage.PageStatus.WaitInputInPage:
                return true;
            default:
                return false;
        }
    }


    private void Update()
    {
        if (!IsAutoMode)
        {
            //オート入力待ち状態じゃない
            progress.fillAmount = 0f;
            return;
        }
       
        //ボイス再生中はオート待ち時間進まない
        if (!Engine.SoundManager.IsPlayingVoice())
        {
            //時間更新
            currentTime += Engine.Time.DeltaTime;
        }

        //プログレス表示に反映
        progress.fillAmount = Mathf.Clamp01(currentTime / AutoModeDuration);
    }
}


2023年7月30日日曜日 13:16:33 UTC+9 ダイス:
SampleAutoProgress.cs

ダイス

unread,
Jul 30, 2023, 9:31:14 AM7/30/23
to 宴ユーザーグループ
ありがとうございます。

AdvPageだったんですね。挙動としては十分すぎました。
視認できれば良かったので、機能しただけでもとても嬉しいです。
2023年7月30日日曜日 17:54:42 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages