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

    C# 言語のサポート

    HPC#

    Burst は、HPC# (High Performance C#) と呼ばれる高パフォーマンスの C# をサポートしています。

    HPC# でサポートされる C# の機能

    HPC# では、C# のほとんどの式とステートメントを使用できます。具体的には以下のとおりです。

    サポートされる機能 メモ
    拡張メソッド
    構造体のインスタンスメソッド
    アンセーフコードとポインターの操作
    静的読み取り専用フィールドからのロード 詳細については、静的読み取り専用フィールドと静的コンストラクター に関するドキュメントを参照してください。
    通常の C# コントロールフロー if
    else
    switch
    case
    for
    while
    break
    continue
    ref と out パラメーター
    fixed ステートメント
    一部の IL opcode cpblk
    initblk
    sizeof
    DllImport と内部呼び出し 詳細については、DllImport と内部呼び出し に関するドキュメントを参照してください。
    try と finally キーワード。Burst では関連する IDisposable パターン、using、foreach もサポート。 Burst で例外が発生した場合の動作は .NET とは異なります。.NET では、try ブロック内で例外が発生した場合、コントロールフローが finally ブロックに移ります。しかし、Burst では、try ブロック内外で例外が発生した場合、finally ブロックが存在しないかのように例外がスローされます。
    文字列と ProfilerMarker 詳細については、Unity プロファイラーのマーカーのサポート に関するドキュメントを参照してください。
    throw 式 Burst でサポートされるのは、throw new ArgumentException("Invalid argument") のようなシンプルな throw パターンだけです。このようなシンプルなパターンを使用した場合、Burst によって静的な文字列の例外メッセージが抽出され、生成コードに含められます。
    文字列と Debug.Log 部分的にのみサポートされています。詳細については、文字列のサポートと Debug.Log に関するドキュメントを参照してください。

    Burst には、HPC# で直接利用できない一部の C# コンストラクションの代替物も用意されています。

    • 関数ポインター: HPC# 内で使用するデリゲートの代替物
    • SharedStatic: C# と HPC# の両方から静的可変データにアクセスするために使用

    例外の式

    Burst は、例外処理のために throw 式をサポートしています。エディター でスローされた例外は、マネージコードでキャッチして、コンソールウィンドウに出力できます。プレイヤービルド で例外がスローされた場合は、必ずアプリケーションが強制中断されます。そのため、Burst を使う際は、例外的動作のためにのみ例外を使用することをお勧めします。Burst では、一般的なコントロールフローなどに対する例外でコードの実行が終わらないようにするため、[Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] 属性のないメソッド内で throw 試行をするコードに対して、以下のような警告が生成されます。

    Burst warning BC1370: An exception was thrown from a function without the correct [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] guard. Exceptions only work in the editor and so should be protected by this guard
    (Burst 警告 BC1370: 正しい [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] ガードのない関数から例外がスローされました。例外はエディターでのみ機能するため、このガードで保護する必要があります)

    HPC# でサポートされない C# の機能

    HPC# は以下の C# 機能をサポートしていません。

    • try/catch 内での catch による例外のキャッチ
    • 静的フィールドの格納 (SharedStatic を使用する場合を除く)
    • 文字列メソッドなど、マネージオブジェクトに関連するメソッド
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)