文字列のサポート
Burst では、以下のシナリオで文字列を使用できます。
Debug.LogUnity.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)}") を含めることはできません。
- 文字列で使用できるのは値型のみです。
- 文字列が受け取れる引数の型は、以下のビルトイン型のみです。
charbooleanbyte/sbytedoublefloatshort/ushortint/uintlong/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}`");