Adv Graphic Manager
投稿日:2024年5月16日 | 最終更新日:2024年5月27日
概要
Adv Graphic Managerは描画オブジェクトの制御を行っています。
Adv Graphic Manager以下にレイヤーシートで定義したレイヤーが自動作成され、それ以下にグラフィックオブジェクトが動的に作成・削除されるという形が、「宴」の基本的な描画の仕組みとなっています。
リファレンス
デリケートな複雑な処理に関わる部分があり、設定項目のいくつかはデバッグ用だったり、バグ修正前の動作を再現するための設定があり、それらの名前は取り消し線をつけています。
名前 | 内容 |
---|---|
Pixels To Units | スプライトを作成する際の、座標1.0単位辺りのピクセル数 |
現在未使用 | |
Bg Sprite Name | 背景オブジェクトのデフォルト名。詳細 |
Reset Character Transform On Change Layer | 表示済みのキャラクターのレイヤー変更時に、ローカルのTransform値をリセットするか引き継ぐか |
デバッグ用のフラグ(使用しないでください) | |
バグ修正前の動作をあえて維持したい後方互換用。 オブジェクトのクロスフェード時に、座標を保持する機能を無効化 |
|
バグ修正前の動作をあえて維持したい後方互換用。 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;
}
}
}
}
}