docs.unity3d.com
    目次を表示する/隠す

    文字列のサポート

    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}`");
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)