文字列のサポート
Burst では、以下のシナリオで文字列を使用できます。
Debug.Log
Unity.Collections
に用意されているFixedString
構造体 (FixedString128
など) への文字列の割り当て- Burst 関数の引数での
System.Runtime.CompilerServices
属性の[CallerLineNumber]
、[CallerMemberName]
、[CallerFilePath]
の使用。ただし、Debug.Log
の呼び出しに直接渡せるのは文字列だけです。
文字列には以下のいずれかを指定できます。
- 文字列リテラル。例:
"This is a string literal"
$"This is an integer {value}"
またはstring.Format
を使用して補間された文字列。ただし、Format に渡す文字列も文字列リテラルです。
例えば、Burst は以下のコンストラクションをサポートします。
文字列リテラルを使ったログ:
Debug.Log("This a string literal");
文字列補間を使ったログ:
int value = 256; Debug.Log($"This is an integer value {value}");
string.Format
を直接使用した上記と同じ処理:int value = 256; Debug.Log(string.Format("This is an integer value {0}", value));
サポートされている Debug.Log
のメソッド
Burst は、Debug.Log
の以下のメソッドをサポートしています。
Debug.Log(object)
Debug.LogWarning(object)
Debug.LogError(object)
文字列補間のサポート
文字列補間には、以下の制限事項があります。
- 文字列は文字列リテラルでなければなりません。
- Burst でサポートされる
string.Format
メソッドは以下のとおりです。string.Format(string, object)
string.Format(string, object, object)
string.Format(string, object, object, object)
string.Format(string, object[])
。これは、4 つ以上の引数 (例:$"{arg1} {arg2} {arg3} {arg4} {arg5}"
) が含まれる文字列補間に使用します。この場合、object[]
配列は一定のサイズである必要があり、引数にコントロールフロー (例:$"This is a {(cond ? arg1 : arg2)}"
) を含めることはできません。
- 文字列で使用できるのは値型のみです。
- 文字列が受け取れる引数の型は、以下のビルトイン型のみです。
char
boolean
byte
/sbyte
double
float
short
/ushort
int
/uint
long
/ulong
Burst は、
half
ベクトル型を除く、すべてのベクトル型 (int2
、float3
など) をサポートしています。以下に例を示します。``c# var value = new float3(1.0f, 2.0f, 3.0f); // "This value float3(1f, 2f, 3f)" を記録します Debug.Log($"This value
{value}`");- Burst では構造体の
ToString()
はサポートされません。代わりに構造体の完全名が表示されます。
詳細については、文字列補間 と 標準の数値書式指定文字列 に関する .NET ドキュメントを参照してください。
マネージ文字列
マネージ string
リテラルや補間された文字列を直接 Debug.Log
に渡すことはできますが、文字列をユーザーメソッドに渡したり、構造体のフィールドとして使用したりすることはできません。文字列を渡したり格納したりするには、Unity.Collections
パッケージに含まれるいずれかの FixedString
構造体を使用します。
int value = 256;
FixedString128 text = $"This is an integer value {value} used with FixedString128";
MyCustomLog(text);
// ...
// 文字列を引数としてメソッドに渡すには以下のように FixedString を使用します。
// マネージ `string` を直接使用することはできません。
public static void MyCustomLog(in FixedString128 log)
{
Debug.Log(text);
}
引数と指定子
Burst は、文字列の書式設定引数と指定子を部分的にサポートしています。
int value = 256;
// 左にパディング: "This value ` 256`
Debug.Log($"This value `{value,5}`");
// 右にパディング: "This value `256 `
Debug.Log($"This value `{value,-5}`");
// 16 進数大文字: "This value `00FF`
Debug.Log($"This value `{value:X4}`");
// 16 進数小文字: "This value `00ff`
Debug.Log($"This value `{value:x4}`");
// 10 進数、先頭に 0: "This value `0256`
Debug.Log($"This value `{value:D4}`");