Choose your operating system:
Windows
macOS
Linux
FName
When you name a new asset in the
Content Browser
, change a parameter in a Dynamic Material Instance, or access a bone in a Skeletal Mesh, you are using
FNames
. FNames provide a very lightweight system
for using strings, where a given string is stored only once in a data table, even if it is reused.
FNames are case-insensitive. They are immutable, and cannot be manipulated. The storage system and static nature of FNames means that it is fast to look up and access FNames with keys. Another feature of the FName subsystem is the use of a hash table to provide fast string to FName conversions.
FText
In Unreal Engine 4 (UE4) the primary component for
text localization
is the
FText
class. All user-facing text should use this class, as it supports text localization by providing the following features:
-
Formatting Text (to generate text from a placeholder pattern).
-
Generating derived text , such as making text upper or lower case.
FText
also features the
AsCultureInvariant
function (or the
INVTEXT
macro), which creates non-localized, or "culture invariant" text. This is useful for things like converting a player name from an external API into something you can display in your user interface.
You can create a blank
FText
using either
FText::GetEmpty()
, or by using just
FText()
.
FString
Unlike
FName
and
FText
,
FString
can be searched, modified, and compared against other strings. However, these manipulations can make
FStrings
more expensive than the immutable string classes. This is because
FString
objects store their own character arrays, while
FName
and
FText
objects store an index to a shared character array, and can establish equality based purely on this index value.
Printf
The
FString
function,
Printf
, can create
FString
objects the format argument specifiers as the C++
printf
function. Similarly, the
UE_LOG
macro prints a
printf
formatted string to the screen, log output, and log files, depending on what type of UE4 build is running.
Remember that to use these strings and conversion you will need to include the necessary header files. A list of which header files are needed can be found on the API reference page for each string.
Conversions
From |
To |
Example |
---|---|---|
FName |
FString |
|
FName |
FText |
FName -> FText is valid in some cases, but be aware that the FNames's content will not benefit from the FText's "auto localization". |
FString |
FName |
FString -> FName is dangerous as the conversion is lossy as FName's are case insensitive. |
FString |
FText |
FString -> FText is valid in some cases, but be aware that the FString's content will not benefit from the FText's "auto localization". |
FText |
FString |
FText -> FString is dangerous as it is a potentially lossy conversion for some languages. |
FText |
FName |
There is no direct conversion from FText to FName. Instead, convert to FString and then to FName. FText -> FString -> FName is dangerous as the conversion is lossy as FName's are case insensitive. |
FString |
int32 |
|
FString |
float |
|
int32 |
FString |
|
float |
FString |
|
Encoding
In general, you should be using the TEXT() macro when setting string variable literals. If you do not specify the TEXT() macro, your literal will be encoded using ANSI, which is highly limited in what characters it supports. Any ANSI literals being passed into FString need to undergo a conversion to TCHAR (native Unicode encoding), so it is more efficient to use TEXT().
For more about encoding, see the Character Encoding documentation.