関連ブログ
- チャンクダウンローダーを用いたアセットの配布に関する問題対処事例 2024.12.25UE
- [UE5] 元の位置に戻るカメラの実装 2024.12.18UE
- [UE5]難易度変更に対応したシューティングゲームを作ってみよう 2024.12.11UE
CATEGORY
2023.02.01UE5UEUE/ C++
執筆バージョン: Unreal Engine 5.0
|
こんにちは!
今回は、指定した文字がひらがなかどうかを判別してみたいと思います。
いくつかのやり方がありますが、この記事では
「指定した文字の値が文字コードにおけるひらがなの範囲にあるかどうか」をプログラムで判定することにします。
公式ドキュメントによると
「Unreal Engine 4 (UE4) の全文字列は、FStrings や TCHAR 配列などの UTF-16 フォーマットでメモリに格納しています。」
とあります。
ということは、UTF-16(Unicode の一種) でのひらがなの値の範囲が必要ですね。
「UTF-16 ひらがな」でググると「0x3040 – 0x309f」っぽいことが分かります。
直接この値を使って比較してもいいのですが、単にこの範囲を用いるのであれば
エンジンの FUnicodeBlockRange を利用することができます。
それではサンプルとして、入力された文字列からひらがなだけを残して返す関数を作ってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include "MyBlueprintFunctionLibrary.h" #include "Fonts/UnicodeBlockRange.h" // 入力された文字列を1文字ずつ調べて、ひらがなだけをくっつけて返す関数。 FString UMyBlueprintFunctionLibrary::PassHiraganaOnly(const FString& InString) { FString OutString; const FInt32Range CharaRange = FUnicodeBlockRange::GetUnicodeBlockRange(EUnicodeBlockRange::Hiragana).Range; for (const TCHAR Chara : InString) { if (CharaRange.Contains(static_cast<int32>(Chara))) { OutString += Chara; } } return OutString; } |
なお、このコードをビルドするには、(プロジェクト名).Build.cs に以下のコード追加が必要です。
1 |
PrivateDependencyModuleNames.AddRange(new string[] { "SlateCore" }); |
EUnicodeBlockRange::Hiragana!分かりやすい!
ちなみに、EUnicodeBlockRange::Katakana もあります。分かりやすい!
さて、簡単なウィジェットを使ったテストレベルを作って確認してみましょう:
上段が入力、下段が出力です。ひらがな以外は弾かれていますね。
ところで、Unicode における「平仮名ブロック仕様」には、「ゐ」「ゑ」「゛(濁点単体)」「ゝ(繰り返し記号)」なんてのも含まれています。
引用元: 平仮名 (Unicodeのブロック) – Wikipedia
作りたいゲームの仕様にもよりますが、入れたくない文字があれば、個別に弾くのをお忘れなく。
なお「フォントで表示できるひらがなかどうか」さえ判別できればよいのであれば
「FUnicodeBlockRange と使った判定」に「フォントに含まれる文字かの判定」を組み合わせることで実現できます。
「フォントに含まれる文字かどうかを判定する方法」については、こちらのブログ記事をぜひご参照ください!
[UE4]フォント非対応の文字を置換する方法