Excluding code from Burst compilation
Read time 1 minuteLast updated 14 days ago
By default, Burst compiles all methods in jobs decorated with the attribute. But some methods aren't appropriate for Burst compilation. For example, methods that perform logging using managed objects or that check the validity of something only valid in a managed environment can only run in a .NET runtime. In such cases you can use the attribute on a method or property to exclude it from Burst compilation:
[BurstCompile][BurstDiscard][BurstCompile]public struct MyJob : IJob{ public void Execute() { // Only executed when running from a full .NET runtime // this method call will be discard when compiling this job with // [BurstCompile] attribute MethodToDiscard(); } [BurstDiscard] private static void MethodToDiscard(int arg) { Debug.Log($"This is a test: {arg}"); }}
You can use a or parameter, which indicates whether the code is running on Burst or managed:
refout[BurstDiscard]private static void SetIfManaged(ref bool b) => b = false;private static bool IsBurst(){ var b = true; SetIfManaged(ref b); return b;}