独自画面へのバッグログ画面の呼び出し

24 views
Skip to first unread message

ももんが

unread,
Aug 4, 2025, 11:20:44 AMAug 4
to 宴ユーザーグループ
Unity バージョン: 6000.0.32f1 (Unity 6)
宴 バージョン: 4.1.6
Unityの習熟度: 初心者。プログラムはcsを軽く触れる程度(一年目)。
いつもお世話になっております。
先日はとても丁寧な対応をありがとうございました。おかげさまで無事にシナリオの呼び出しに成功いたしました。
結果的ですが、PauseScenarioを使用して止めてから呼び出せたので現状の状態で進めせて頂いています。
今回質問ですが、バッグログの呼び出し機能を独自画面側でも行おうとしているのですが、バックログ画面を呼び出しても画面が空欄のままで、画面呼び出し前のテキストが表示されません。
以下呼び出しのソースになります。
申し訳ございませんがこちら呼び出し方の問題なのか、別の問題なのかご教授いただければ幸いです。
    void ShowBackLog()
    {
        if (advEngine != null)
        {
            Transform uiTransform = advEngine.transform.Find("UI");
            if (uiTransform != null)
            {
                Transform backLogTransform = uiTransform.Find("BackLog");
                if (backLogTransform != null)
                {
                    backLogTransform.gameObject.SetActive(true);
                }
            }
        }
    }

マッドネスラボ

unread,
Aug 4, 2025, 9:09:46 PMAug 4
to 宴ユーザーグループ
バックログを開いている間は、メッセージウィンドウを非表示にするなどの処理があるため、
下記のようにAdvEngine以下のUiManagerから操作するようにしてみてください。

advEngine .UiManager.Status = AdvUiManager.UiStatus.Backlog;


既存のコードとしては、Utage/Scripts/TemplateUI/UtageUguiMenuButtons.cs の以下のメソッドを参考にしてください。

//バックログボタンが押された
public virtual void OnTapBackLog()
{
Engine.UiManager.Status = AdvUiManager.UiStatus.Backlog;
}

2025年8月5日火曜日 0:20:44 UTC+9 ももんが:

ももんが

unread,
Aug 5, 2025, 12:40:57 PMAug 5
to 宴ユーザーグループ
返信ありがとうございます。
ただ、バックログ画面自体は呼び出されているのはデバッグで確認ができたのですが、独自画面が前面に来ているので実際は表示されません。
この場合独自画面の上のレイヤーに呼び出す場合はどうすればよいのでしょうか?
申し訳ございませんがよろしくお願いいたします。
2025年8月5日火曜日 10:09:46 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Aug 5, 2025, 10:09:34 PMAug 5
to 宴ユーザーグループ
UIの描画順はUnityの標準的な仕様に従って調整可能です。

UnityのUIの描画順はおおざっぱに言うと、各UIかそれより親にあるオブジェクトのCavasコンポーネントの設定でだいたい決まります。
  • CanvasのRenderModeが「ScreenSpace-Overlay」になっているものは常に最前面に描画される
  • CanvasのRenderModeが「ScreenSpace-Camera」または「World Space」になっているものは、設定されたカメラ(EventCamera)の描画順にしたがって描画される
    • 複数カメラがある場合、カメラ同士の描画順は
      • 作成時のUnityプロジェクトがBuiltInRenderPipeLineであれば、カメラのDepth
      • 作成時のUnityプロジェクトが URPであれば
        • カメラのRenderTypeがBaseの場合はPriority
        • カメラのRenderTypeがOverlayの場合は Overlay するBase側のカメラのStack項目の順番
          • (URPで複数カメラを使うならこちらになる場合が多いはずです)
  • 同じカメラのなかでの描画順は
    • SortingLayerの順番
    • SortingLayerが同じならOrderInLayerの順番
    • SortingLayerOrderInLayerが同じなら、Hieralchウィンドウでのオブジェクトの順番(上にあるオブジェクトほど先に描画される)
  • カメラのLayerMaskでチェックのあるLayerが、そのカメラがどのオブジェクトを描画するかの設定。
    • 各オブジェクトのLayer(インスペクターウィンドウの右上の項目)が、 カメラのLayerMaskに対応
      • 宴 プロジェクトをノベルゲームとして作成したであれば、UIは「UI」というLayer設定になっている
      • 宴 プロジェクトを会話シーンとして作成したのであれば、 UIはその時に指定したLayer設定になっている( デフォルトでは「UtageUI」 )


独自UIのCanvas設定が「ScreenSpace-Overlay」の場合、そのUIは常に最前面に描画されてしまうので、その設定を変えるしかありません。
「ScreenSpace-Camera」にして、宴のUIで使用するカメラよりも奥に描画されるカメラ(Main Cameraなど)か、宴のUIと同じカメラを設定してください。

独自UIのCanvasに、宴のUIと同じカメラ(UI-Camera)を設定した場合、
UI-CameraのLayerMaskに「UI」を追加するなどして、独自UIのオブジェクトが宴のUIカメラにも描画されるようにしてください。
宴のUI全体の表示順は、AdvEngine-CanvasのSortingOrderで制御できます。
ss_1040.png

Canvasは入れ子にできますので、(Canvas設定したオブジェクトの子オブジェクトにもCanvasを設定可能)
BackLogだけほかのUIよりも手前にしたい場合は、BackLogオブジェクトにCanvasコンポーネントをAddComponentして、そこで設定を調整してください。
ss_1041.png


最近のUnityだと、プロジェクト作成時にURPがデフォルトで選択されるテンプレートになっているのですが、
今までの標準的なやりかた(BuiltIn Render Pipeline) とはカメラ周りの仕様が大きく変わっているため、インターネットで調べたときなどに情報が食い違うことがあるかもしれません。
もしURPでプロジェクトを作成したのであれば、その点ご注意ください。

2025年8月6日水曜日 1:40:57 UTC+9 ももんが:
Reply all
Reply to author
Forward
0 new messages