Version: Unity 6.1 Alpha (6000.1)
LanguageEnglish
  • C#

UnsafeUtility

class in Unity.Collections.LowLevel.Unsafe

/

Implemented in:UnityEngine.CoreModule

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

Provides a collection of low-level, unsafe utility methods for memory operations in Unity.

The UnsafeUtility class provides functions for direct memory manipulation. These functions are unsafe because they allow you to bypass the safety restrictions of managed code. You can perform operations such as memory allocation, deallocation, copying, and setting memory directly.

Use these methods with extreme caution to avoid memory leaks, access violations, or data corruption. The UnsafeUtility class is intended for scenarios where performance is critical, and the overhead of managed memory safety is prohibitive.

Common use cases include interaction with native code, performance-critical sections in custom collections or game systems, and low-level manipulation required by specific algorithms.

using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using UnityEngine;

public class UnsafeUtilityExample : MonoBehaviour { void Start() { unsafe { // Allocate a block of unmanaged memory to store 10 integers int sizeOfInt = UnsafeUtility.SizeOf<int>(); int length = 10; void* memoryBlock = UnsafeUtility.Malloc(sizeOfInt * length, 4, Allocator.Temp);

// Write data to the allocated memory for (int i = 0; i < length; i++) { UnsafeUtility.WriteArrayElement<int>(memoryBlock, i, i * 10); }

// Read and print data from the allocated memory for (int i = 0; i < length; i++) { int value = UnsafeUtility.ReadArrayElement<int>(memoryBlock, i); Debug.Log("Value: " + value); }

// Free the allocated unmanaged memory UnsafeUtility.Free(memoryBlock, Allocator.Temp); } } }

Static Methods

AddressOfObtains the memory address of the specified object as a pointer.
AlignOfRetrieves the minimum memory alignment requirement for a specified struct type.
ArrayElementAsRefObtains a reference to a value of type T in an array at a specified index in memory.
AsPerforms an unsafe cast of a specified object to a different type.
AsRefGets a reference to a struct at a specific memory location.
CheckForLeaksGets a list of memory leaks.
CopyObjectAddressToPtrAssigns an object reference to a struct or pinned class.
CopyPtrToStructureCopies sizeof(T) bytes from a memory pointer to a struct.
CopyStructureToPtrCopies sizeof(T) bytes from a memory pointer to a struct.
EnumEqualsDetermines whether specified enums are equal without boxing.
EnumToIntGets the integer representation of an enum value without boxing.
ForgiveLeaksTells the leak checking system to ignore any memory allocations made up to that point.
FreeFrees a block of memory that was previously allocated.
FreeTrackedFree memory with leak tracking.
GetFieldOffsetReturns the offset of the field relative struct or class it is contained in.
GetLeakDetectionModeGets the mode of memory leak detection.
IsBlittableGets whether a struct is blittable.
IsNativeContainerTypeChecks whether a struct or type is a NativeContainer.
IsUnmanagedChecks whether the struct or type is unmanaged.
IsValidAllocator Returns true if the allocator label is valid and can be used to allocate or deallocate memory.
IsValidNativeContainerElementTypeChecks whether the type is acceptable as an element type in a native container.
MallocAllocates a block of memory of a specified size and alignment.
MallocTrackedAllocates a block of memory with specified size, alignment, and tracking information.
MemClearClears a block of memory, setting all bytes to zero.
MemCmpChecks whether two memory regions are identical.
MemCpyCopies a specified number of bytes from a source memory location to a destination memory location.
MemCpyReplicateCopies memory from a source to a destination and replicates it multiple times.
MemCpyStrideCopies data between memory blocks with specified strides, allowing skipped bytes in both source and destination.
MemMoveCopies a specified number of bytes from a source memory location to a destination, allowing overlapping regions.
MemSetSets a block of memory to a specified byte value for a defined size.
MemSwapSwap the content of two memory buffers of the same size.
PinGCArrayAndGetDataAddressPins a garbage-collected (GC) array and returns the address of its first element, ensuring the array's memory location remains fixed.
PinGCObjectAndGetAddressPins an object in memory, ensuring it remains at a fixed memory location during garbage collection.
ReadArrayElementRead array element.
ReadArrayElementWithStrideRead array element with stride.
ReleaseGCObjectReleases a GC handle obtained from UnsafeUtility.PinGCObjectAndGetAddress or UnsafeUtility.PinGCArrayAndGetDataAddress.
SetLeakDetectionModeSet the leak detection mode.
SizeOfDetermines the size, in bytes, of a specified type, including padding for alignment.
WriteArrayElementWrite array element.
WriteArrayElementWithStrideWrite array element with stride.