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

    Burst でコンパイルされたコードの呼び出し

    Burst でコンパイルされたメソッドは、マネージコードから直接呼び出すことができます。ジェネリックメソッドや、宣言する型がジェネリックであるメソッドの呼び出しはサポートされていませんが、それ以外は 関数ポインター と同じルールが適用されます。しかし、関数ポインターに必要な追加のボイラープレートについて心配する必要はありません。

    以下の例に、Burst でコンパイルされるユーティリティクラスを示します。これは構造体を使用しているので、関数ポインター のルールに従い参照渡しを行います。

    [BurstCompile]
    public static class MyBurstUtilityClass
    {
        [BurstCompile]
        public static void BurstCompiled_MultiplyAdd(in float4 mula, in float4 mulb, in float4 add, out float4 result)
        {
            result = mula * mulb + add;
        }
    }
    

    このメソッドをマネージコードから使用するには、以下のようにします。

    public class MyMonoBehaviour : MonoBehaviour
    {
        void Start()
        {
            var mula = new float4(1, 2, 3, 4);
            var mulb = new float4(-1,1,-1,1);
            var add = new float4(99,0,0,0);
            MyBurstUtilityClass.BurstCompiled_MultiplyAdd(mula, mulb, add, out var result);
            Debug.Log(result);
        }
    }
    

    このスクリプトをオブジェクトにアタッチして実行すると、float4(98f, 2f, -3f, 4f) がログに出力されます。

    コードの変換

    Burst では、IL Post Processing を使用して、コードを関数ポインターと呼び出しに自動的に変換します。詳細については、関数ポインター に関するドキュメントを参照してください。

    直接呼び出しへの変換を無効にするには、以下のように BurstCompile オプションに DisableDirectCall = true を追加します。これにより、Post Processor でコードが実行されなくなります。

    [BurstCompile]
    public static class MyBurstUtilityClass
    {
        [BurstCompile(DisableDirectCall = true)]
        public static void BurstCompiled_MultiplyAdd(in float4 mula, in float4 mulb, in float4 add, out float4 result)
        {
            result = mula * mulb + add;
        }
    }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)