要望:キャラクター設定シートでのAlpha(透明度)値

99 views
Skip to first unread message

Roseverte Games

unread,
Mar 19, 2022, 7:34:46 AM3/19/22
to 宴ユーザーグループ
宴3.11.3&unity2019.4.29を利用しております。

お世話になっております。
今作ってるゲームで、幽霊のキャラクター出てくるので、出来ればキャラクターシートでXYZのほかにA(Alpha)値も設定できるようになればいいなと思っておりますが、可能でしょうか?
難しければこちらでカスタムコードを作って実装する予定です。

よろしくお願いします。

Roseverte Games

unread,
Mar 19, 2022, 7:39:25 AM3/19/22
to 宴ユーザーグループ
記載し忘れてしまいました。
立ち絵キャラクターは基本アバタータイプを使用しております。

マッドネスラボ

unread,
Mar 19, 2022, 6:06:47 PM3/19/22
to 宴ユーザーグループ
基本機能として汎用的にするには、既存のプロジェクトとの互換性を保つようにセーブデータを拡張しないといけなかったりするので、ちょっと難しいです。

プロジェクトごとにカスタムして、キャラクターシートにアルファ値を指定できるように拡張しましたので、添付のパッケージファイルを適用してください。
(拡張子が  .unitypackage ではなく、 .gz となってDLされる場合がありますので、その場合は拡張子を.unitypackageに戻してから、Unityプロジェクトに適用してください)

パッケージを適用すると、 Assets/Utage/Sample/Scripts/SampleAdvGraphicObjectEvent.cs というサンプルコードが追加されます。

using UnityEngine;
using Utage;

        //特定のオブジェクトの色をカスタムする
        public class SampleAdvGraphicObjectEvent : MonoBehaviour
        {
                public AdvEngine engine = null;
                public string customObjectName = "hoge";
                public Color customColor = Color.white;
               
                void Awake()
                {
                        engine.GraphicManager.OnInitGraphicObject.AddListener(OnInit);
                        engine.GraphicManager.OnDrawGraphicObject.AddListener(OnDraw);
                }

                void OnInit(AdvGraphicObject graphicObject )
                {
//                        Debug.Log($"OnInit {graphicObject.name}");
                        if (graphicObject.name == customObjectName)
                        {
                                graphicObject.EffectColor.ScriptColor = customColor;
                        }
                }
               
                void OnDraw(AdvGraphicObject graphicObject, AdvGraphicInfo graphicInfo )
                {
//                        Debug.Log($"OnDraw {graphicInfo.Key}");
                        if (graphicInfo.RowData.TryParseCell("Alpha", out float a))
                        {
//                                Debug.Log($"OnDraw Alpha = {a}");
                                graphicObject.EffectColor.ScriptColor = new Color(1.0f,1.0f,1.0f,a);
                        }
                }
        }



OnInitGraphicObject は、グラフィックオブジェクトが新しく作成されて初期化されたとき呼ばれるイベントです。
指定名のキャラクターは統一のα値にしたいときなどは、キャラクターシートを使わずにプログラムだけで対応可能なものですが、逆に表示パターンごとにアルファ値を変えることはできません。

OnDrawGraphicObject は、描画時によばれるイベントです。AdvGraphicInfoは、キャラクターシートのパターンごとの情報が入っています。
graphicInfo.RowDataが、エクセル一行のデータになっています。
TryParseCell("Alpha", out float a) とすると、「"Alpha"行にデータがある場合は、float型として取得」という意味になります。
これを使うことで「α値が設定してある場合は、アルファ値をカスタムする」ということができるようになります。
ss_0251.png

色の制御は、 graphicObject.EffectColor.ScriptColorを使って下さい。
宴の表示オブジェクトの色の制御は、AdvEffectColorで制御しています。
それのメンバ変数のScriptColorは、デフォルトでは使ってないので、これを使ってください。
他のメンバ変数で似たようなものに、CustomColorというのもあるのですが、これは「しゃべっていないキャラをグレーアウトする」のところで使ってしまっています。
https://madnesslabo.net/utage/?page_id=6398#i-3


上記のものはサンプルコードになりますので、要不要に合わせてコードを書き換えてください。



2022年3月19日土曜日 20:39:25 UTC+9 rosever...@gmail.com:
FixGraphicObjectCustomEvent.unitypackage

Roseverte Games

unread,
Mar 19, 2022, 6:20:23 PM3/19/22
to 宴ユーザーグループ
わざわざありがとうございます。
しゃべっていないキャラのグレーアウトはもともと使っているスクリプトだったので、なんとなくわかります。
本当に早い対応でありがとうございました!
Reply all
Reply to author
Forward
0 new messages