UTAGEエリアを移動する方法

47 views
Skip to first unread message

Jaehyun Ha (한우마을)

unread,
May 8, 2024, 5:37:07 PMMay 8
to 宴ユーザーグループ
こんにちは.
翻訳機を使っているところなので、変な文章があったらすみません。
マニュアルを精読してみてもよくわからないことがあって質問します。
UTAGEをゲームの対話及びイベント用にのみ使用しようとセット中です。
LOG機能が画面いっぱいにならず、特定の領域だけを使用するようにするために、UICAMERAのLETTER BOX CAMERAでWidthとHeightを調節してサイズを調節するまでは成功しました。
ところで、UTAGEの領域を画面のCenterやLowerなどに固定させずに、好きなだけ領域を移動させることはできませんか?
画面の真ん中の狭い領域でのみUTAGEを使用し、back Logもその領域内でスクロールされるようにしたいです!
教えて頂くと幸いです.
よろしくお願いします!

マッドネスラボ

unread,
May 8, 2024, 6:22:23 PMMay 8
to 宴ユーザーグループ
最近、このようなドキュメントを追加しました。
キャラクターや背景の表示やテキストの表示用のオブジェクトをシーン内のUIに使うものです。
https://madnesslabo.net/utage/?page_id=14473
ただ、これはバックログなどは対象になっていないです。


バックログだけであれば、RectMask2Dコンポーネントを使って表示領域を固定したり、UIの大きさを調整するなどして対応できるかと思います。
ss_0189.png


UI全体の表示領域にマスクをかけたいのであれば、
AdvEngine>UIオブジェクト以下に Maskというオブジェクトを作り、そこでMask系のコンポーネントを追加し
BackLogなどのUIをMaskオブジェクトに以下におけばよいかと思います。
ss_0191.png

ただし、画面によってバックログなどのUIオブジェクトのレイアウトを変更する必要があって、AdvEngine>UI以下のオブジェクトを丸ごと入れ替えたいという場合はちょっと難しいかもしれません。



2024年5月9日木曜日 6:37:07 UTC+9 blit...@gmail.com:

マッドネスラボ

unread,
May 8, 2024, 6:46:09 PMMay 8
to 宴ユーザーグループ
この機能は、まだ公開したばかりなので、調整が必要だと思っています。
https://madnesslabo.net/utage/?page_id=14473

もし使ってみて、追加機能の要望などがあればご連絡ください。
たとえば、「バックログなども同じようにシーン内に埋め込んだものを使いたい」ということであれば実装できないか検討しようと思っています。
ただ、どこまで用意すればいいのかがわからないので、要望があればご連絡ください。

2024年5月9日木曜日 7:22:23 UTC+9 マッドネスラボ:

Jaehyun Ha (한우마을)

unread,
May 9, 2024, 9:05:34 AMMay 9
to 宴ユーザーグループ
迅速な対応に大変感謝いたします。
教えていただいた方法で試してみましたが、教えていただいた方法ではback logがきれいに作動しませんでした。( backボタンがずれたり、上や下に一部メッセージが隠れたりするなど)
教えていただいた方式は、UTAGE領域が縦長の場合はよく作動しましたが、添付ファイルのように中間にある場合はきれいに具現されないようです。
下の画像と同じようにセットしたいのですが、back logも完璧に作動できるように、ちょうどあのUTAGE領域をあらかじめ設定してsprite, messege, selection, ui, backlogがあそこに合うように作動したらいいと思います。
20240509_215114.png
そして加えて、selectionの複数の選択肢のうち一つだけspriteを異なるようにしたい場合は、arg4にselectionItemを異なるように選択してあげればいいですか?
(現在の設定変更中にutageするために一時的に作動しないため、ご質問いたします)

ありがとうございました!

2024년 5월 9일 목요일 오전 7시 46분 9초 UTC+9에 マッドネスラボ님이 작성:

マッドネスラボ

unread,
May 9, 2024, 4:34:33 PMMay 9
to 宴ユーザーグループ
>教えていただいた方法で試してみましたが、教えていただいた方法ではback logがきれいに作動しませんでした。( backボタンがずれたり、上や下に一部メッセージが隠れたりするなど)
マスクをただかけているだけなので、UIの位置調整は自動ではされないです。
新しく作った、AdvEngine>UI>Maskオブジェクトの位置や大きさの調整をし、
それ以下にあるUIパーツを、アンカー等を設定して親オブジェクトの位置に合わせて表示されるように設定したほうが良いかと思います。
(これは一般的なUnity開発と同じやり方でできると思います)

UiCameraのLetterBoxCameraコンポーネントは、文字通りLetterBoxのために特化した機能です。
特定のエリアにUIを表示するための機能ではないです。
これ以上の機能をつけようとすると、色々な例外的な対応しないといけなくなるので、難しいかもしれません。
AdvEngine>UIは、LetterBoxの設定に従ってUguiLetterBoxCanvasSclaerというもので、位置や大きさが決まっています。
もしこれが邪魔なようでしたら、通常のCanvasScalerにして、通常のUnityと同じように実装してみてください。
ss_0196.png



>そして加えて、selectionの複数の選択肢のうち一つだけspriteを異なるようにしたい場合は、arg4にselectionItemを異なるように選択してあげればいいですか?
はい。そうです。



2024年5月9日木曜日 22:05:34 UTC+9 blit...@gmail.com:

マッドネスラボ

unread,
May 9, 2024, 4:58:32 PMMay 9
to 宴ユーザーグループ
現在のところ、上記のようにAdvEngine以下のUIを調整するしかないのですが、

少し時間がかかるかもしれませんが、このページの機能拡張として解決したいと思っています。

バックログと選択肢もEmbed機能に対応するようにしようと思うのですが、
他に足りないと思われる機能はあるでしょうか?


2024年5月10日金曜日 5:34:33 UTC+9 マッドネスラボ:

Jaehyun Ha (한우마을)

unread,
May 9, 2024, 8:43:20 PMMay 9
to 宴ユーザーグループ
現在としては、上記の内容を適用していただければ十分だと思います!
迅速かつ親切なサポートに感謝いたします!

2024년 5월 10일 금요일 오전 5시 58분 32초 UTC+9에 マッドネスラボ님이 작성:

マッドネスラボ

unread,
May 10, 2024, 4:36:49 AMMay 10
to 宴ユーザーグループ
バックログと選択肢を、Emmedに対応しました。
添付のパッケージファイルを適用してください。

パッケージファイルを適用すると、selectionとbacklogの埋め込み設定が可能になります。
サンプルコードに追記しましたので、このように使ってください。
プログラムから任意のタイミングでEmbed()メソッドを呼ぶようにしてください。

// UTAGE: Unity Text Adventure Game Engine (c) Ryohei Tokimura
using System.Collections.Generic;
using UnityEngine;

//任意のUIにAdvEngineを埋め込み表示するためのサンプルプログラム
public class SampleAdvEngineEmbed : MonoBehaviour
{
// ADVエンジン
// ADVエンジンが別シーンにある場合は、外部プログラムからAdvEngineを設定すること
public AdvEngine AdvEngine
{
get => advEngine;
set => advEngine = value;
}
[SerializeField] AdvEngine advEngine;

//キャラ等を表示するレイヤー(UiCanvas)
[SerializeField] List<AdvGraphicLayerInScene> layers;
//メッセージウィンドウ
[SerializeField] AdvUguiMessageWindow messageWindow;

//選択肢
[SerializeField] AdvUguiSelectionManager selection;

//バックログ
[SerializeField] AdvUguiBacklogManager backlog;

bool IsEmbed { get; set; }

//埋め込み表示のセットアップ
public void Embed()
{
if (AdvEngine.IsWaitBootLoading)
{
//AdvEngineがまだ準備できていない場合は、エラーを表示して終了
Debug.LogError("Adv Engine is not ready yet. Please wait until it is ready.");
return;
}
//キャラ等を表示するレイヤー(UiCanvas)を埋め込む
foreach (var layer in layers)
{
AdvEngine.GraphicManager.EmbedLayer(layer);
}
if(messageWindow != null)
{
//メッセージウィンドウを埋め込む
AdvEngine.MessageWindowManager.EmbedWindow(messageWindow);
}

if(AdvEngine.UiManager is AdvUguiManager advUguiManager)
{
//現在の選択肢があるなら閉じる
if (advUguiManager.CurrentSelection != null)
{
advUguiManager.CurrentSelection.Close();
}
//選択肢を埋め込む
advUguiManager.SetEmbedSelection(selection);

//現在のバックログがあるなら閉じる
if (advUguiManager.CurrentBacklog != null)
{
advUguiManager.CurrentBacklog.Close();
}
//バックログを埋め込む
advUguiManager.SetEmbedBackLog(backlog);
}
IsEmbed = true;
}

//埋め込み表示の開放
public void RemoveEmbed()
{
IsEmbed = false;
if (AdvEngine == null) return;

//AdvEngineがまだ残っているなら、埋め込み表示を解除
foreach (var layer in layers)
{
AdvEngine.GraphicManager.RemoveEmbedLayer(layer);
}

if (messageWindow != null)
{
AdvEngine.MessageWindowManager.RemoveWindow(messageWindow);
}

if (AdvEngine.UiManager is AdvUguiManager advUguiManager)
{
//埋め込み選択肢を解除
advUguiManager.ReleaseEmbedSelection();

//埋め込みバックログを解除
advUguiManager.ReleaseEmbedBackLog();
}

}

private void OnDestroy()
{
if (IsEmbed)
{
//リークしないように、破棄時に埋め込み表示を解除
RemoveEmbed();
}

}
}


2024年5月10日金曜日 9:43:20 UTC+9 blit...@gmail.com:
FixEmbed.unitypackage

マッドネスラボ

unread,
May 10, 2024, 4:47:55 AMMay 10
to 宴ユーザーグループ
selectionとbacklogのUIは、AdvEngine以下からコピーして作成し、
任意のUI以下に置いくてださい。

ss_0197.png



サンプルコードのコンポーネントに、このコピーしたほうのオブジェクトを設定してください。
ss_0201.png



selectionとbacklogの位置調整等をしてください。
ss_0202.png


selectionの使用するプレハブも、コピーして新しく作ったプレハブを設定してください。
ss_0198.png

backlogのプレハブの同様です。
ss_0199.png


実行結果のサンプル画像です。
ss_0203.png



2024年5月10日金曜日 17:36:49 UTC+9 マッドネスラボ:

Jaehyun Ha (한우마을)

unread,
May 10, 2024, 5:40:41 PMMay 10
to 宴ユーザーグループ
とても迅速で親切なお返事ありがとうございます!
テストしてみたら、私が望む仕様にほぼ近づいたようです!

1) ただし、Embed()をStartで使用すると、次のようなエラーが発生します。

20240511_062536.png

Startの時点でまだエンジンが用意されていないようですが、プログラミングに慣れていない人たちがこのタイミングを合わせるのが難しいので、今後正式にアップデートしてくださるようでしたら、この部分もチェックボックスなどで「エンジンの方で準備ができたらEmbedする」などを自動的に進めていただけますか?
私は一応他の部分のコードに入れて進めはしました。

2) また、テキストを出力する時、Message Window 2つが重なって見えたので、
AdvEngine>UI>MessageWindowManagerで以下のように設定した後,
20240511_062625.png
AdvEngine>UI>MessageWindowManager>の下にあった原本のMessageWindowは削除してしまったところ、うまく作動しました。
これが正しい使い方ですか?

3) 上記のような方法で使用する場合、すべてがうまくいっていますが、Message Windowがクリックを受けられません。
もしかして、Input Managerの設定を変えたり、こちらもEmbedしなければならないのですか?

4) 送っていただいた使い方のスクリーンショットを見ると、Message Window Embedの方はまだこのコードに挿入して使わず、ホームページに載っている方法を使うべきですか?
ss_0201.png

--------------------------
初歩的な質問も含まれているようで申し訳ありません。 非常に迅速かつ専門的な対応に感謝し、UTAGE 1から4まで使用しているユーザーとしてツールの完成度がますます高くなることに非常に自負心を感じます。 ありがとうございます。

2024년 5월 10일 금요일 오후 5시 47분 55초 UTC+9에 マッドネスラボ님이 작성:

Jaehyun Ha (한우마을)

unread,
May 10, 2024, 5:47:30 PMMay 10
to 宴ユーザーグループ
3)について付け加えると、SelectionとBacklogはうまくクリックでき、Message Windowだけがクリックできず、スペースバーやエンターを押して進めました。

2024년 5월 11일 토요일 오전 6시 40분 41초 UTC+9에 Jaehyun Ha (한우마을)님이 작성:

マッドネスラボ

unread,
May 10, 2024, 6:41:24 PMMay 10
to 宴ユーザーグループ
> 1) ただし、Embed()をStartで使用すると、次のようなエラーが発生します。
>「エンジンの方で準備ができたらEmbedする」
了解しました。サンプルにそのようなメソッドを追加しておきます。


>2) また、テキストを出力する時、Message Window 2つが重なって見えたので、
>原本のMessageWindowは削除してしまったところ、うまく作動しました。
初期状態のウィンドウの状態は、シーンに設定されている状態になるので、
初期状態で使用しないウィンドウはアクティブをオフにしてください。
使わないなら削除してもよいです。

>3) 上記のような方法で使用する場合、すべてがうまくいっていますが、Message Windowがクリックを受けられません。
>Input Managerの設定を変えたり
そうなります。ドキュメントに追記しておきました。


4) 送っていただいた使い方のスクリーンショットを見ると、Message Window Embedの方はまだこのコードに挿入して使わず、ホームページに載っている方法を使うべきですか?
AdvEngineとMessage Window Embedが同じシーンにあるのであれば、AdvUguiMessageWindowManagerコンポーネントの「Message Window List」に設定するだけでも問題ないです。
違うシーンにある場合は、プログラム経由でしか設定できないので、サンプルプログラムのようなやり方が必要です。
レイヤーに関しても同様です。

selectionとbacklogの変更はプログラムからしかできませんので、基本的にはプログラムを使ってください。

selectionとbacklogを一種類しか使わないなら次のようにデフォルトとして設定することも可能です。
・デフォルトのSelectionとBacklogを削除して
ss_0207.png
・EmbedのほうのSelectionとBacklogをAdvUguiManagerコンポーネントに設定
ss_0208.png


2024年5月11日土曜日 6:47:30 UTC+9 blit...@gmail.com:

Jaehyun Ha (한우마을)

unread,
May 10, 2024, 7:41:26 PMMay 10
to 宴ユーザーグループ
ありがとうございます。
これで、私が望んでいたことはすべて完全に解決されました。
また、説明してくださる過程でUTAGEの構造についてもっとよく理解するようになり、新しい応用法も考え出すことができました。
驚くほど速くて完璧な対応にとても感謝しており、UTAGEが勢いに乗って長く良いゲームがたくさん発売されることを祈ります。

2024년 5월 11일 토요일 오전 7시 41분 24초 UTC+9에 マッドネスラボ님이 작성:
Reply all
Reply to author
Forward
0 new messages