一文字ずつ表示するとテキストの色変更が欲しい結果にならない

RichTextを使用して、一文字’表示を行うとRichText</>と色変更を行うときに記述していた記号までの文字が表示されるまで、色変更とほしい結果のテキスト表示が行われません

こちらなにか対処法などご存知方いますでしょうか?
3枚目が大まかな現在のノード構成になります

よろしくお願いいたします



RichTextの開始タグが切り取り範囲(表示範囲)に入っていて、なおかつ終了タグが切り取り範囲(表示範囲)に入っていない場合に、終了タグを末尾に追加すれば良いかと思います
RichTextのタグは開始と終了が揃わない限り、範囲が確定しないのでスタイルの置き換えは発生しません

あとは、タグの部分は文字数に含めないようにしたほうが良いかと思います
具体的には、 次の文字が < の場合は > が来るまで進める、などです


なお、ノードグラフを貼っていただいていますが、解像度が低すぎるので全く参考になりません

お返事ありがとうございます。
解像度に関してすみません。画像のほう追加させていただきました。




RichTextのタグは開始と終了が揃わない限り、範囲が確定しないのでスタイルの置き換えは発生しません
上記に関して理解しました。

RichTextの開始タグが切り取り範囲(表示範囲)に入っていて、なおかつ終了タグが切り取り範囲(表示範囲)に入っていない場合 に、終了タグを末尾に追加すれば良いかと思います**

あとは、タグの部分は文字数に含めないようにしたほうが良いかと思います
具体的には、 次の文字が < の場合は > が来るまで進める、などです

タグを文字に含めないようにするにはForEachLoopなどで分割するのがいいのでしょうか?
上記ふたつに関して処理の組み方が現在の実力だと組み方が思いつきませんでした

1文字ずつ送る際に今何文字目まで取得するのか、を変数に持っていると思います(おそらく Current Page でしょうか?)

その指定した位置にある1文字(最後の1文字)を確認して < であれば、 > が来るまで文字数カウントを進めればよいです
このとき、別の関数に開始タグの数を記録しておくとよいでしょう
上記の条件でカウントを進める際に+1しておけばよいです

終了タグの場合は必ず < のあとに / が来るので、この場合は開始タグのカウントを-1します

そうして進めたカウントを元に文字列を取得し、先に記録した開始タグの数の分だけ、末尾に終了タグを追加して補完すればよいです

1 Like

WhileLoopを使う例です

TestRichText

1 Like

T_Sumisakiさん手法を参考に組もうとしたのですが、うまく処理が組めず、
kiruru002さんのノード群を参考に処理を組ませていただいたのですが、===,!==はどのように作成されたのでしょうか?

==,!=とテキスト型の===を使用して上記ノード代替えを行おうとしたのですが、Kiruruさんの動画のような結果が得られませんでした

お手すきの際にご確認いただけますと幸いです




None

===,!==はどのように作成されたのでしょうか?

Equal exactly (String) ですね

これは文字列同士の比較をするノードで、String型を引っ張っているときに===と入力すれば出てきます

UE5.5を使用しており、Stringから引っ張ってみたのですが呼び出し一覧表示されないようです。
Kiruruさんの環境はC++環境でしょうか?

私が使っているのは5.3です
試しにUE5.5をインストールしてみましたが、普通に出てきますね
右クリックメニューで、試しにStringなどと検索して一覧で見たほうが見つかると思います


(post deleted by author)

===(Strig)が呼ばれなかったのはConfig設定を変更しているのが原因でした。
無事、色変更の適用もありながらテキスト表示が行えました!

WhilteLoop,SetWidgetSpace等、普段扱ったことのないノードのことが知れてとても勉強になりました。ノードを共有していただきありがとうございました!

こちらで解決とさせていただきます。
,

1 Like