# Integrate Unity into Windows applications

> Integrate the Unity Runtime Library into Windows.

You can use the Unity as a Library feature to integrate the Unity Runtime Library in Windows applications.

This feature enables you to include Unity-powered features in your application, such as:

* 3D/2D Real-Time Rendering
* AR Experience
* 3D model interaction
* 2D mini-games

The Unity Runtime Library exposes controls to manage when and how to load, activate, and unload content within the application.

On Windows, you can embed a Unity build into your application in the following ways:

* [Launch Unity as an external build](#launch-unity-as-an-external-build) - This is the easier option.
* [Embed Unity within your existing operating system process](#embed-unity-within-your-existing-operating-system-process)

## Launch Unity as an external build

You can launch Unity as an external build from your application and specify a window in which Unity will initialize and render with the `-parentHWND 'HWND' delayed` [command line argument](/engine/6000.0/manual/unity-editor/command-line-arguments/player.md).

When you pass `-parentHWND 'HWND' delayed`, the Unity application hides while the command runs. To successfully embed the window, you must:

For an example of a Unity application embedded in a window, refer to the [EmbeddedWindow downloadable example](/api/download.md?file=/engine/6000.0/media/downloads/EmbeddedWindow.zip).

### Resize the window

To resize the Unity window, check its [GWLP\_USERDATA](https://docs.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-getwindowlongptra?redirectedfrom=MSDN) in Microsoft's `GetWindowLongPtr` function:

* Its lowest bit is set to 1 when the graphics initialize and it's safe to resize.
* Its second lowest bit is set to 1 after the Unity splash screen finishes displaying.

## Embed Unity within your existing operating system process

To embed Unity within your existing operating system process:

1. Load `UnityPlayer.dll` directly into your Win32 application.

2. Call the `UnityMain` entry point with the following signature:

   ```cpp
   extern "C" int UnityMain2(HINSTANCE hInst, LPCWSTR customDataFolder, LPWSTR szCmdLine, int nCmdShow);
   ```

3. Pass command line arguments to Unity via the `lpCmdLine` parameter. You can use this to control settings such as resolution, job threads, or the parent HWND.

For a full list of valid arguments you can pass to `lpCmdLine`, refer to the [Unity Standalone Player command line arguments](/engine/6000.0/manual/unity-editor/command-line-arguments/player.md) documentation.

## Additional resources

* [Using Unity as a Library in other applications](/engine/6000.0/manual/platform-specific/cross-platform-features/unityasa-library.md)
* [Unity Standalone Player command line arguments](/engine/6000.0/manual/unity-editor/command-line-arguments/player.md)
