String support
Read time 3 minutesLast updated 12 days ago
Burst supports string usage in the following scenarios:
Debug.Log- Assigning a string to the structs that
FixedStringprovides, for exampleUnity.Collections.FixedString128Bytes - The attributes
System.Runtime.CompilerServices,[CallerLineNumber], and[CallerMemberName]on arguments to Burst functions. However, you can only pass the strings directly to calls to[CallerFilePath].Debug.Log
A string can be either:
- A string literal. For example: .
"This is a string literal" - An interpolated string using or using
$"This is an integer {value}, where the string to format is also a string literal.string.Format
For example, Burst supports the following constructions:
-
Logging with a string literal:Debug.Log("This a string literal");
-
Logging using string interpolation:int value = 256;Debug.Log($"This is an integer value {value}");This is the same as usingdirectly:
string.Formatint value = 256;Debug.Log(string.Format("This is an integer value {0}", value));
Supported Debug methods
Burst supports the following methods:
DebugDebug.Log(object)Debug.LogWarning(object)Debug.LogError(object)
String interpolation support
String interpolation has the following restrictions:
-
The string must be a string literal
-
Burst supports the followingmethods:
string.Formatstring.Format(string, object)string.Format(string, object, object)string.Format(string, object, object, object)- . Use this for a string interpolation that contains more than three arguments, for example
string.Format(string, object[]). In this case, the$"{arg1} {arg2} {arg3} {arg4} {arg5}"array needs to be a constant size and no arguments should involve control flows (for example,object[]).$"This is a {(cond ? arg1 : arg2)}"
-
The string must only use value types
-
The string must take only built-in type arguments:
charboolean- /
bytesbyte doublefloat- /
shortushort - /
intuint - /
longulong
-
Burst supports all vector types (for example,
int2), exceptfloat3vector types. For example:halfvar value = new float3(1.0f, 2.0f, 3.0f);// Logs "This value float3(1f, 2f, 3f)"Debug.Log($"This value `{value}`"); -
Burst doesn't supportof structs. It displays the full name of the struct instead.
ToString()
For more information, refer to the .NET documentation on String interpolation and Standard numeric format strings.
Managed strings
You can pass a managed literal or an interpolated string directly to , but you can't pass a string to a user method or use them as fields in a struct. To pass around or store strings, use one of the structs in the package:
stringDebug.LogFixedStringUnity.Collectionsint value = 256;FixedString128Bytes text = $"This is an integer value {value} used with FixedString128Bytes";MyCustomLog(text);// ...// String can be passed as an argument to a method using a FixedString, // but not using directly a managed `string`:public static void MyCustomLog(in FixedString128Bytes log){ Debug.Log(log);}
Arguments and specifiers
Burst has limited support for string format arguments and specifiers:
int value = 256;// Padding left: "This value ` 256`Debug.Log($"This value `{value,5}`");// Padding right: "This value `256 `Debug.Log($"This value `{value,-5}`");// Hexadecimal uppercase: "This value `00FF`Debug.Log($"This value `{value:X4}`");// Hexadecimal lowercase: "This value `00ff`Debug.Log($"This value `{value:x4}`");// Decimal with leading-zero: "This value `0256`Debug.Log($"This value `{value:D4}`");