コンフィグにテキスト表示プレビューの追加

117 views
Skip to first unread message

kocyo...@yahoo.co.jp

unread,
Aug 12, 2019, 11:57:21 PM8/12/19
to 宴ユーザーグループ
お世話になります。

コンフィグにテキスト表示のプレビューを追加したい(テキストの表示速度、
メッセージウィンドウの透明度を実際に画面内で確認できるようにしたい)
のですが、どのように実装すればいいでしょうか?

以上です。よろしくお願いします。

Unityの習熟度:業務経験ありプログラマー
宴のバージョン:3.6.3
UnityのバージョンとOS:Unity2019.2.0f1 Windows10


マッドネスラボ

unread,
Aug 13, 2019, 3:25:07 AM8/13/19
to 宴ユーザーグループ
それは自力でプログラムするしかありません。

kocyo...@yahoo.co.jp

unread,
Aug 13, 2019, 3:59:59 AM8/13/19
to 宴ユーザーグループ
やはりそうなりますよね。

ご回答ありがとうございます。
今後もよろしくお願いします。

マッドネスラボ

unread,
Aug 13, 2019, 4:36:06 AM8/13/19
to utag...@googlegroups.com
サンプルで書くとこんな感じです。

任意のタイミングでPlayDemo()を呼びだすと、0文字からメッセージ送り速度に従って表示文字数を増やしていきます。
engine.Config.GetTimeSendChar(readMessage); で1文字を進めるのに必要な時間(秒)が取得できるので、それを使って表示文字数を調整します。
実際のノベル部分では、宴の独自のタグ処理や自動改行処理などが必要なので、
専用のテキストコンポーネントを使う必要があるなど色々違うのですが、
簡易的なデモ表示ならこれだけで大丈夫だと思います。

using UnityEngine;
using UnityEngine.UI;
namespace Utage
{
//メッセージスピードのデモ表示のサンプル
public class SampleMessageSpeedDemo : MonoBehaviour
{
[SerializeField]
AdvEngine engine;
//既読メッセージのスピードならtrue
[SerializeField]
bool readMessage = false;
//表示するテキスト文字
[SerializeField]
string message = "メッセージ速度のデモのテキスト";
//実際に表示をするTextコンポーネント
[SerializeField]
Text text;
bool IsPlaying { get; set; }
bool IsFirst { get; set; }
int CurrentTextLength { get; set; }
int TextLengthMax { get { return message.Length; } }
float DeltaTime { get; set; } 
public void PlayDemo()
{
IsPlaying = true;
IsFirst = true;
CurrentTextLength = 0;
DeltaTime = 0;
}
void Update()
{
if (IsPlaying)
{
UpdateText();
}
}
void UpdateText()
{
if (IsFirst)
{
//最初のフレームだけ長さ0をいったん表示
CurrentTextLength = 0;
IsFirst = false;
}
else
{
//文字送り
float timeCharSend = engine.Config.GetTimeSendChar(readMessage);
SendChar(timeCharSend);
}
text.text = message.Substring(0, CurrentTextLength);
if (CurrentTextLength>= TextLengthMax)
{
IsPlaying = false;
}
}
void SendChar(float timeCharSend)
{
if (timeCharSend <= 0)
{
CurrentTextLength = TextLengthMax;
return;
}
DeltaTime += UnityEngine.Time.deltaTime;
while (DeltaTime >= 0)
{
++CurrentTextLength;
DeltaTime -= timeCharSend;
if (CurrentTextLength > TextLengthMax)
{
CurrentTextLength = TextLengthMax;
break;
}
}
}
}
}

kocyo...@yahoo.co.jp

unread,
Aug 13, 2019, 9:21:15 AM8/13/19
to 宴ユーザーグループ
サンプルありがとうございます。
試してみたところ、自分のやりたかったことが実現できました。
また、メッセージウィンドウの透明度に関しては、engine.Config.MessageWindowTransparency
を使うことで実現できました。

お忙しいところ、ご回答頂きありがとうございました。
Reply all
Reply to author
Forward
0 new messages