Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


Native plug-in and internal call support

Read time 1 minuteLast updated 3 days ago

To call native functions, use
[DllImport]
:
[DllImport("MyNativeLibrary")]public static extern int Foo(int arg);
Burst also supports internal calls implemented inside Unity:
// In UnityEngine.Mathf[MethodImpl(MethodImplOptions.InternalCall)]public static extern int ClosestPowerOfTwo(int value);
DllImport
is only supported for native plug-ins, not platform-dependent libraries like
kernel32.dll
.
For all
DllImport
and internal calls, you can only use the following types as parameter or return types:

Type

Supported type

Built-in and intrinsic types
  • byte
    /
    sbyte
  • short
    /
    ushort
  • int
    /
    uint
  • long
    /
    ulong
  • float
  • double
  • System.IntPtr
    /
    System.UIntPtr
  • Unity.Burst.Intrinsics.v64
    /
    Unity.Burst.Intrinsics.v128
    /
    Unity.Burst.Intrinsics.v256
Pointers and references
  • sometype*
    : Pointer to any of the other types in this list
  • ref sometype
    : Reference to any of the other types in this list
Handle structs
  • unsafe struct MyStruct { void* Ptr; }
    : Struct containing a single pointer field
  • unsafe struct MyStruct { int Value; }
    : Struct containing a single integer field
Note
Passing structs by value isn't supported; you need to pass them through a pointer or reference. The only exception is that handle structs are supported. These are structs that contain a single field of pointer or integer type.

Additional resources