# GetDefaultPlayerLoop()

> Returns a Player loop system representing the default update order of all engine systems in Unity.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.LowLevel](/engine/6000.6/script-reference/unityengine/lowlevel.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public static PlayerLoopSystem GetDefaultPlayerLoop()
```

### Returns

| Type                                                                                         | Description |
| -------------------------------------------------------------------------------------------- | ----------- |
| [PlayerLoopSystem](/engine/6000.6/script-reference/unityengine/lowlevel/playerloopsystem.md) |             |

### Remarks

The default update order is the order in which systems update unless you change it with [PlayerLoop.SetPlayerLoop](/engine/6000.6/script-reference/unityengine/lowlevel/playerloop/setplayerloop.md). The [PlayerLoopSystem](/engine/6000.6/script-reference/unityengine/lowlevel/playerloopsystem.md) returned by this method can be modified to create a custom update order which you can set using [PlayerLoop.SetPlayerLoop](/engine/6000.6/script-reference/unityengine/lowlevel/playerloop/setplayerloop.md). If a custom Player loop has been previously set, then use [PlayerLoop.GetCurrentPlayerLoop](/engine/6000.6/script-reference/unityengine/lowlevel/playerloop/getcurrentplayerloop.md) to retrieve and further modify the current update order.

### Examples

```csharp
using System.Text;
using UnityEngine.LowLevel;
using UnityEngine;

public static class PrintDefaultPlayerLoop
{
    //Retrieve the default Player loop system and iterate over its subsystems to print them.

    //Run this method on runtime initialization
    [RuntimeInitializeOnLoadMethod]
    private static void AppStart()
    {
        StringBuilder sb = new();
        // Pass the default Player loop to the recursive print function
        RecursivePlayerLoopPrint(PlayerLoop.GetDefaultPlayerLoop(), sb, 0);
        Debug.Log(sb.ToString());
    }
    // Loop through the Player loop tree structure and add the names of the systems to the StringBuilder
    private static void RecursivePlayerLoopPrint(PlayerLoopSystem playerLoopSystem, StringBuilder sb, int depth)
    {
        if (depth == 0)
        {
            sb.AppendLine("ROOT NODE");
        }
        else if (playerLoopSystem.type != null)
        {
            for (int i = 0; i < depth; i++)
            {
                sb.Append("\t");
            }
            sb.AppendLine(playerLoopSystem.type.Name);
        }
        if (playerLoopSystem.subSystemList != null)
        {
            depth++;
            foreach (var s in playerLoopSystem.subSystemList)
            {
                RecursivePlayerLoopPrint(s, sb, depth);
            }
            depth--;
        }
    }
}
```
