Adv Graphic Manager


投稿日:2024年5月16日 | 最終更新日:2024年5月27日

概要

Adv Graphic Managerは描画オブジェクトの制御を行っています。
Adv Graphic Manager以下にレイヤーシートで定義したレイヤーが自動作成され、それ以下にグラフィックオブジェクトが動的に作成・削除されるという形が、「宴」の基本的な描画の仕組みとなっています。

リファレンス

デリケートな複雑な処理に関わる部分があり、設定項目のいくつかはデバッグ用だったり、バグ修正前の動作を再現するための設定があり、それらの名前は取り消し線をつけています。

名前 内容
Pixels To Units スプライトを作成する際の、座標1.0単位辺りのピクセル数
Sort Oder To Z Units 現在未使用
Bg Sprite Name 背景オブジェクトのデフォルト名。詳細
Reset Character Transform On Change Layer 表示済みのキャラクターのレイヤー変更時に、ローカルのTransform値をリセットするか引き継ぐか
Debug Auto Reset Canvas Position デバッグ用のフラグ(使用しないでください)
Ignore Keep Position On Cross Fade バグ修正前の動作をあえて維持したい後方互換用。
オブジェクトのクロスフェード時に、座標を保持する機能を無効化
Ignore Override 2D Prefab Sorting Order バグ修正前の動作をあえて維持したい後方互換用。
2DプレハブのSortingOrderの上書きを無効化
Render Texture Manager RenderTextureManagerの参照設定。設定されてない場合は自動作成する。
Video Manager VideoManagerの参照設定。設定されてない場合は自動作成する。
Layer List あらかじめシーン内にあるレイヤーリスト。詳細:シーン内のUIに宴のシナリオ再生を埋め込む
On Init Graphic Object グラフィックオブジェクトが新しく作成されて初期化されたとき呼ばれるイベント
On Draw Graphic Object グラフィックオブジェクトの描画開始時によばれるイベント。
AdvGraphicInfoは、キャラクターシートなどのパターンごとの情報が入っている
グラフィックオブジェクトのパターンを変更したときにも呼ばれる。

グラフィックオブジェクトのカスタムイベント

宴のグラフィックオブジェクトは作成時にプレハブなどの仕組みを使わずにプログラムから作成されるものが多いです。
そのため、カスタムする場合は作成時に呼ばれるカスタムイベントを使って、プログラム上から行う必要があります。

サンプルコード

SampleAdvGraphicObjectEvent

以下のサンプルコードは、Assets/Utage/Sample/Scripts/SampleAdvGraphicObjectEvent.csにあります。
「指定の名前のオブジェクトを指定の色にし、グラフィックオブジェクトの設定シートにAlphaという列があったら、そこに記述されている値でアルファ値を変化せる」というものです。

using UnityEngine;

namespace 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;
            }
        }

        //グラフィックオブジェクトの描画時によばれるイベント。AdvGraphicInfoは、キャラクターシートのパターンごとの情報が入っている
        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);
            }
        }
    }
}

SampleVideoObjectCustomMaterial

ビデオオブジェクトの場合のみ指定のマテリアルにするサンプルです。

using UnityEngine;
using UnityEngine.UI;
using Utage;

namespace Utage
{

    //宴のビデオオブジェクトのマテリアルを変更するサンプル
    //GraphicManagerのOnInitGraphicObjectイベントを使う
    public class SampleVideoObjectCustomMaterial : MonoBehaviour
    {
        public AdvEngine engine = null;
        public Material material;

        void Awake()
        {
            if (engine != null)
            {
                engine.GraphicManager.OnDrawGraphicObject.AddListener(OnDrawGraphicObject);             
            }
        }

        //グラフィックオブジェクトの描画時によばれるイベント。AdvGraphicInfoは、キャラクターシートのパターンごとの情報が入っている
        void OnDrawGraphicObject(AdvGraphicObject graphicObject, AdvGraphicInfo graphicInfo)
        {
//          Debug.Log($"{nameof(OnDrawGraphicObject)} {graphicObject.name}");
            if (graphicInfo.FileType == AdvGraphicInfo.FileTypeVideo)
            {
                if (graphicObject.TargetObject.TryGetComponent(out RawImage rawImage))
                {
//                  Debug.Log("Change material");
                    rawImage.material = material;
                }
            }
        }
    }
}