Add Unity Pipeline package support

This commit is contained in:
ud18010
2026-07-31 17:34:04 +08:00
parent d1a526094e
commit 786b7ffff9
590 changed files with 51995 additions and 2 deletions
@@ -0,0 +1,89 @@
using Unity.Pipeline.Commands;
using UnityEngine;
namespace Unity.Pipeline.Runtime.Commands
{
/// <summary>
/// Runtime application control commands for Unity Player builds.
/// Provides basic application lifecycle and performance control.
/// </summary>
public static class RuntimeApplicationCommand
{
[CliCommand("quit", "Gracefully quit the Unity application", MainThreadRequired = true, RuntimeOnly = true)]
public static string QuitApplication(
[CliArg("exitCode", "Exit code for the application")] int exitCode = 0)
{
// Schedule quit on next frame to allow HTTP response to be sent
var quitObject = new GameObject("PipelineQuitScheduler");
var quitScheduler = quitObject.AddComponent<QuitScheduler>();
quitScheduler.Initialize(exitCode);
return $"Application quit scheduled with exit code {exitCode}";
}
[CliCommand("set_target_framerate", "Set the target frame rate for the application", MainThreadRequired = true, RuntimeOnly = true)]
public static string SetTargetFrameRate(
[CliArg("frameRate", "Target frame rate (-1 for platform default, 0 for unlimited)", Required = true)] int frameRate)
{
var previousFrameRate = Application.targetFrameRate;
Application.targetFrameRate = frameRate;
var frameRateDescription = frameRate switch
{
-1 => "platform default",
0 => "unlimited (VSync)",
_ => $"{frameRate} FPS"
};
return $"Target frame rate set to {frameRateDescription} (was {previousFrameRate})";
}
[CliCommand("set_timescale", "Set the time scale for the application", MainThreadRequired = true, RuntimeOnly = true)]
public static string SetTimeScale(
[CliArg("scale", "Time scale multiplier (0.0 to pause, 1.0 for normal speed)", Required = true)] float scale)
{
if (scale < 0f)
{
return "Error: Time scale cannot be negative";
}
var previousScale = Time.timeScale;
Time.timeScale = scale;
var scaleDescription = scale switch
{
0f => "paused",
1f => "normal speed",
_ => $"{scale}x speed"
};
return $"Time scale set to {scaleDescription} (was {previousScale}x)";
}
/// <summary>
/// MonoBehaviour to handle delayed application quit.
/// Allows HTTP response to be sent before application terminates.
/// </summary>
private class QuitScheduler : MonoBehaviour
{
private int m_ExitCode;
private float m_QuitTime;
public void Initialize(int exitCode)
{
m_ExitCode = exitCode;
m_QuitTime = Time.realtimeSinceStartup + 0.1f; // 100ms delay
DontDestroyOnLoad(gameObject);
}
private void Update()
{
if (Time.realtimeSinceStartup >= m_QuitTime)
{
Debug.Log($"Pipeline: Quitting application with exit code {m_ExitCode}");
Application.Quit(m_ExitCode);
}
}
}
}
}