コンフィグのメッセージウィンドウ透過度

45 views
Skip to first unread message

ダイス

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

お世話になります。

最近になってUnityをいじり始め、こちらの内容を参考にコンフィグ画面にてメッセージウィンドウ透過度のサンプルを表示しようとやっていました。

宴エンジン参照抜きで動いたものの、どうやらコンフィグ画面の表示とシナリオ表示側でメッセージウィンドウの透過度設定が逆転していました。
Value=1に設定するとシナリオ側は透明になります。コンフィグ側ではValue=1で透過なしになります。

フォント変更も試しでボタン切り替えで作っていじったんですが、シナリオ側に反映されなかったのもこういう影響なのだろうと思いました。

コンフィグ画面の設定を正しくシナリオ側に反映させるにはどうすればいいでしょうか?宴エンジンを参照できれば使えるでしょうか?
参照の仕方とかが分からず、どう書けばいいのかも分かりません。このページも確認してみました。

よろしくお願いします。
こちら、実際に使用したコードです。

using UnityEngine;
using UnityEngine.UI;

public class MessageWindowConfig : MonoBehaviour
{
    public Image MessageWindowCanvas;
    public Slider transparencySlider;

    private void Start()
    {
        // スライダーの初期値を設定
        float initialTransparency = 0.8f;
        transparencySlider.value = initialTransparency;
        UpdateTransparency(initialTransparency);
    }

    public void OnTransparencySliderValueChanged()
    {
        float transparency = transparencySlider.value;
        UpdateTransparency(transparency);
    }

    private void UpdateTransparency(float transparency)
    {
        // メッセージウィンドウの透過度を変更
        Color color = MessageWindowCanvas.color;
        color.a = transparency;
        MessageWindowCanvas.color = color;
    }
}

マッドネスラボ

unread,
Jul 27, 2023, 6:59:21 AM7/27/23
to 宴ユーザーグループ
原因は複数あると思います。

>メッセージウィンドウの透過度設定が逆転していました。
まず、UnityのCororのa(アルファ値)は「不透明度」です。なので、aの値が0の場合は透明になって1の場合は不透明になります。
いっぽう、宴のコンフィグ画面のメッセージウィンドウの値は「透明度」です。なので、0の場合は不透明になって1の場合は透明になります。
つまり、逆になります。
これは、一般的なゲームの仕様(透明度を扱う)と、一般的なゲーム開発の仕様(透明度ではなく不透明度を扱う)が逆転しているからで、宴でもそれに合わせています。
サンプルプログラムを、下記のように修正すれば思います(実際は、コンフィグデータへ値を反映する必要があるので、これは不要なプログラムです)
        color.a = 1.0f-transparency;


宴のコンフィグデータは、セーブデータに反映させたりシナリオに反映させたりする必要があるので、
AdvConfigのほうに値を設定する必要があります。

宴側で書いているコンフィグ画面のソースコードは以下にあります。
Utage/Scripts/TemplateUI/UtageUguiConfig.cs

//メッセージウィンドウの透過色(バー)
public virtual float MessageWindowTransparency { set { if (!IsInit) return; Config.MessageWindowTransparency = value; } }

宴のコンフィグ画面では、下記のように各ボタンやスライダーのOnValueChangedから各パラメータのsetプロパティを呼び出して、値の変化を反映させています。
ss_1237.png


ポイントとしては、最終的に Config.MessageWindowTransparency に値を設定されるようにするということです。

なので、上記のソースコードの場合であれば、以下のように追記・修正する必要があります。

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

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

private void UpdateTransparency(float transparency)
{
// メッセージウィンドウの透過度を変更
Config.MessageWindowTransparency = transparency;
}

2023年7月27日木曜日 18:35:13 UTC+9 ダイス:

ダイス

unread,
Jul 27, 2023, 10:09:24 AM7/27/23
to 宴ユーザーグループ
指摘されたものと追記修正を施し、実際に動作確認して正しい挙動になっているのを確認しました。
ありがとうございました。

これを参考に、また自分でも色々と試してみようと思います。

2023年7月27日木曜日 19:59:21 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages