using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using UnityEngine;
#if UNITY_2021_2_OR_NEWER
using LocalMcp.UnityServer.UIToolkit;
using LocalMcp.UnityServer.UIToolkit.DI;
using LocalMcp.UnityServer.UIToolkit.Animation;
using LocalMcp.UnityServer.UIToolkit.Theme;
using LocalMcp.UnityServer.UIToolkit.Presets;
using LocalMcp.UnityServer.UIToolkit.Responsive;
using LocalMcp.UnityServer.UIToolkit.Accessibility;
using LocalMcp.UnityServer.UIToolkit.Localization;
using LocalMcp.UnityServer.UIToolkit.Debug;
using LocalMcp.UnityServer.UIToolkit.AssetDependencies;
#endif
namespace LocalMcp.UnityServer
{
/// <summary>
/// HTTP REST API server for MCP protocol bridge compatibility.
/// Runs alongside the WebSocket server on port 5051.
/// </summary>
public class UnityMcpHttpServer
{
private HttpListener httpListener;
private Thread listenerThread;
private bool isRunning = false;
private int port = 5051;
public static UnityMcpHttpServer Instance { get; private set; }
public UnityMcpHttpServer()
{
Instance = this;
}
/// <summary>
/// Starts the HTTP server.
/// </summary>
public void StartServer(int serverPort = 5051)
{
if (isRunning)
{
Debug.LogWarning("[MCP HTTP] Server is already running");
return;
}
port = serverPort;
isRunning = true;
listenerThread = new Thread(ServerLoop);
listenerThread.IsBackground = true;
listenerThread.Start();
Debug.Log($"[MCP HTTP] Server started on http://localhost:{port}");
}
/// <summary>
/// Stops the HTTP server.
/// </summary>
public void StopServer()
{
if (!isRunning)
{
return;
}
isRunning = false;
if (httpListener != null && httpListener.IsListening)
{
httpListener.Stop();
httpListener.Close();
httpListener = null;
}
if (listenerThread != null && listenerThread.IsAlive)
{
listenerThread.Join(1000);
listenerThread = null;
}
Debug.Log("[MCP HTTP] Server stopped");
}
private void ServerLoop()
{
try
{
httpListener = new HttpListener();
httpListener.Prefixes.Add($"http://localhost:{port}/");
httpListener.Start();
Debug.Log($"[MCP HTTP] Server listening on port {port}");
while (isRunning)
{
try
{
var context = httpListener.GetContext();
ThreadPool.QueueUserWorkItem((_) => HandleRequest(context));
}
catch (HttpListenerException)
{
// Expected when stopping
break;
}
}
}
catch (ThreadAbortException)
{
// Silently handle thread abort during domain reload
Thread.ResetAbort();
}
catch (Exception e)
{
// Only log unexpected errors
if (isRunning)
{
Debug.LogError($"[MCP HTTP] Server error: {e.Message}");
}
}
}
private void HandleRequest(HttpListenerContext context)
{
try
{
var request = context.Request;
var response = context.Response;
// Enable CORS
response.AddHeader("Access-Control-Allow-Origin", "*");
response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
response.AddHeader("Access-Control-Allow-Headers", "Content-Type");
// Handle preflight
if (request.HttpMethod == "OPTIONS")
{
response.StatusCode = 200;
response.Close();
return;
}
// Health check endpoint
if (request.HttpMethod == "GET" && request.Url.AbsolutePath == "/health")
{
// Get project info from main thread
string healthJson = UnityMainThreadDispatcher.EnqueueAndWait(() =>
{
return $"{{\"status\":\"ok\",\"projectName\":\"{Application.productName}\",\"unityVersion\":\"{Application.unityVersion}\",\"timestamp\":{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}}}";
});
response.StatusCode = 200;
response.ContentType = "application/json";
byte[] healthBytes = Encoding.UTF8.GetBytes(healthJson);
response.ContentLength64 = healthBytes.Length;
response.OutputStream.Write(healthBytes, 0, healthBytes.Length);
response.Close();
return;
}
// Only accept POST requests to /api/mcp
if (request.HttpMethod != "POST" || !request.Url.AbsolutePath.StartsWith("/api/mcp"))
{
response.StatusCode = 404;
byte[] errorBytes = Encoding.UTF8.GetBytes("{\"error\":\"Not found\"}");
response.OutputStream.Write(errorBytes, 0, errorBytes.Length);
response.Close();
return;
}
// Read request body
string requestBody;
using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
{
requestBody = reader.ReadToEnd();
}
Debug.Log($"[MCP HTTP] Received: {requestBody}");
// Extract method and params from JSON manually
// (JsonUtility doesn't handle 'object' type fields properly)
string method = ExtractJsonField(requestBody, "method");
string paramsJson = ExtractJsonObject(requestBody, "params");
string idStr = ExtractJsonField(requestBody, "id");
object id = null;
if (!string.IsNullOrEmpty(idStr))
{
if (int.TryParse(idStr, out int intId))
id = intId;
else
id = idStr;
}
if (string.IsNullOrEmpty(method))
{
SendErrorResponse(response, "Invalid JSON-RPC request: method is required");
return;
}
Debug.Log($"[MCP HTTP] Method: {method}, Params: {paramsJson}, ID: {id}");
// Process request
string responseText = ProcessRequestDirect(method, paramsJson, id);
// Record success or failure based on response
if (responseText.Contains("\"error\""))
{
ConnectionHealthMonitor.RecordFailure();
}
else
{
ConnectionHealthMonitor.RecordSuccess();
}
// Send response
response.StatusCode = 200;
response.ContentType = "application/json";
byte[] responseBytes = Encoding.UTF8.GetBytes(responseText);
response.ContentLength64 = responseBytes.Length;
response.OutputStream.Write(responseBytes, 0, responseBytes.Length);
response.Close();
Debug.Log($"[MCP HTTP] Response sent");
}
catch (Exception e)
{
Debug.LogError($"[MCP HTTP] Error handling request: {e.Message}");
try
{
SendErrorResponse(context.Response, e.Message);
}
catch
{
// Ignore errors when sending error response
}
}
}
private void SendErrorResponse(HttpListenerResponse response, string message)
{
response.StatusCode = 500;
response.ContentType = "application/json";
string errorJson = JsonRpcResponseHelper.ErrorMessage(message, null);
byte[] errorBytes = Encoding.UTF8.GetBytes(errorJson);
response.ContentLength64 = errorBytes.Length;
response.OutputStream.Write(errorBytes, 0, errorBytes.Length);
response.Close();
}
private string ProcessRequestDirect(string method, string paramsJson, object id)
{
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
string result = null;
try
{
// Execute on main thread using UnityMainThreadDispatcher
result = UnityMainThreadDispatcher.EnqueueAndWait(() => ProcessRequestOnMainThread(method, paramsJson, id));
stopwatch.Stop();
// ログ記録(エラーレスポンスかどうかを判定)
if (result != null && result.Contains("\"error\""))
{
// エラーメッセージを抽出
string errorMsg = ExtractJsonField(result, "message") ?? "Unknown error";
McpApiLogger.Instance.LogError(method, paramsJson, errorMsg, stopwatch.ElapsedMilliseconds);
}
else
{
McpApiLogger.Instance.LogSuccess(method, paramsJson, result, stopwatch.ElapsedMilliseconds);
}
return result;
}
catch (Exception e)
{
stopwatch.Stop();
McpApiLogger.Instance.LogError(method, paramsJson, e.Message, stopwatch.ElapsedMilliseconds);
throw;
}
}
private string ProcessRequestOnMainThread(string method, string paramsJson, object id)
{
Debug.Log($"[MCP HTTP] ProcessRequestOnMainThread called with method: '{method}'");
if (string.IsNullOrEmpty(paramsJson))
{
paramsJson = "{}";
}
// Route to appropriate handler (same as McpSession)
// MCP tools/list - API Discovery (Issue #73)
if (method == "tools/list")
{
return GetToolsList(paramsJson, id);
}
else if (method == "tools/categories")
{
return GetToolsCategories(id);
}
else if (method == "unity.log.stream")
{
// Note: HTTP doesn't support streaming, so this will just return status
return JsonRpcResponseHelper.SuccessMessage("Log streaming not supported over HTTP. Use WebSocket instead.", id);
}
else if (method == "unity.log.history")
{
// Initialize GlobalLogCapture if not already done
var logCapture = GlobalLogCapture.Instance;
// Parse parameters
int limit = ExtractIntParam(paramsJson, "limit", 50);
string level = ExtractJsonField(paramsJson, "level") ?? "all";
// Get logs
var logs = logCapture.GetLogs(limit, level);
var logsJson = new List<string>();
foreach (var log in logs)
{
string escapedMessage = log.message.Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("\n", "\\n").Replace("\r", "\\r");
string escapedStack = log.stackTrace.Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("\n", "\\n").Replace("\r", "\\r");
logsJson.Add($"{{\"message\":\"{escapedMessage}\",\"type\":\"{log.type}\",\"timestamp\":\"{log.timestamp}\",\"stackTrace\":\"{escapedStack}\"}}");
}
string result = $"{{\"logs\":[{string.Join(",", logsJson)}],\"total\":{logs.Count},\"totalCaptured\":{logCapture.GetTotalLogCount()}}}";
return JsonRpcResponseHelper.SuccessMessage(result, id);
}
else if (method == "unity.connection.status")
{
return ConnectionHealthMonitor.GetStatus(id);
}
else if (method == "unity.connection.ping")
{
return ConnectionHealthMonitor.Ping(id);
}
else if (method == "unity.connection.reset")
{
return ConnectionHealthMonitor.Reset(id);
}
else if (method == "unity.editor.play")
{
return EditorPlayModeControl.Play(id);
}
else if (method == "unity.editor.stop")
{
return EditorPlayModeControl.Stop(id);
}
else if (method == "unity.editor.pause")
{
return EditorPlayModeControl.Pause(id);
}
else if (method == "unity.editor.resume")
{
return EditorPlayModeControl.Resume(id);
}
else if (method == "unity.editor.step")
{
return EditorPlayModeControl.Step(id);
}
else if (method == "unity.editor.playModeStatus")
{
return EditorPlayModeControl.GetStatus(id);
}
else if (method == "unity.editor.playAndCaptureLogs")
{
return EditorPlayModeControl.PlayAndCaptureLogs(paramsJson, id);
}
else if (method == "unity.test.runAll")
{
return UnityTestRunnerControl.RunAllTests(paramsJson, id);
}
else if (method == "unity.test.runByCategory")
{
return UnityTestRunnerControl.RunTestsByCategory(paramsJson, id);
}
else if (method == "unity.test.runByAssembly")
{
return UnityTestRunnerControl.RunTestsByAssembly(paramsJson, id);
}
else if (method == "unity.test.runSpecific")
{
return UnityTestRunnerControl.RunSpecificTest(paramsJson, id);
}
else if (method == "unity.test.getResults")
{
return UnityTestRunnerControl.GetTestResults(id);
}
else if (method == "unity.test.list")
{
return UnityTestRunnerControl.ListTests(paramsJson, id);
}
else if (method == "unity.test.status")
{
return UnityTestRunnerControl.GetStatus(id);
}
else if (method == "unity.test.getFailedTests")
{
return UnityTestRunnerControl.GetFailedTests(id);
}
else if (method == "unity.test.saveResults")
{
return UnityTestRunnerControl.SaveResults(paramsJson, id);
}
else if (method == "unity.test.runWithLog")
{
return UnityTestRunnerControl.RunWithLog(paramsJson, id);
}
else if (method == "unity.test.exportResults")
{
return UnityTestRunnerControl.ExportResults(paramsJson, id);
}
else if (method == "unity.test.clearResults")
{
return UnityTestRunnerControl.ClearResults(id);
}
else if (method == "unity.test.runSelected")
{
return UnityTestRunnerControl.RunSelected(paramsJson, id);
}
else if (method == "unity.test.runFailed")
{
return UnityTestRunnerControl.RunFailed(paramsJson, id);
}
else if (method == "unity.test.runEditMode")
{
return UnityTestRunnerControl.RunEditMode(paramsJson, id);
}
else if (method == "unity.test.runPlayMode")
{
return UnityTestRunnerControl.RunPlayMode(paramsJson, id);
}
else if (method == "unity.scene.list")
{
return SceneSetupCommand.ListScene(paramsJson, id);
}
else if (method == "unity.scene.setup")
{
return SceneSetupCommand.SetupScene(paramsJson, id);
}
else if (method == "unity.scene.save")
{
return SceneSetupCommand.SaveScene(paramsJson, id);
}
else if (method == "unity.project.save")
{
return SceneSetupCommand.SaveProject(paramsJson, id);
}
else if (method == "unity.scene.open")
{
return SceneSetupCommand.OpenScene(paramsJson, id);
}
else if (method == "unity.create")
{
return SceneSetupCommand.CreateGameObject(paramsJson, id);
}
else if (method == "unity.debug.log")
{
return SceneSetupCommand.DebugLog(paramsJson, id);
}
else if (method == "unity.editor.executeMenuItem")
{
return SceneSetupCommand.ExecuteMenuItem(paramsJson, id);
}
else if (method == "unity.scene.findObjectOfType")
{
return SceneSetupCommand.FindObjectOfType(paramsJson, id);
}
else if (method == "unity.scene.setupArchitecture")
{
return SceneSetupCommand.SetupSceneArchitecture(paramsJson, id);
}
// GameObject operations
else if (method == "unity.gameObject.delete")
{
return SceneSetupCommand.DeleteGameObject(paramsJson, id);
}
else if (method == "unity.gameObject.setActive")
{
return SceneSetupCommand.SetGameObjectActive(paramsJson, id);
}
else if (method == "unity.gameObject.setParent")
{
return SceneSetupCommand.SetGameObjectParent(paramsJson, id);
}
else if (method == "unity.transform.setPosition")
{
return SceneSetupCommand.SetTransformPosition(paramsJson, id);
}
else if (method == "unity.transform.setRotation")
{
return SceneSetupCommand.SetTransformRotation(paramsJson, id);
}
else if (method == "unity.transform.setScale")
{
return SceneSetupCommand.SetTransformScale(paramsJson, id);
}
else if (method == "unity.gameobject.destroy")
{
return SceneSetupCommand.DestroyGameObject(paramsJson, id);
}
// Prefab operations
else if (method == "unity.prefab.instantiate")
{
return PrefabOperations.InstantiatePrefab(paramsJson, id);
}
else if (method == "unity.prefab.create")
{
return PrefabOperations.CreatePrefab(paramsJson, id);
}
else if (method == "unity.prefab.apply")
{
return PrefabOperations.ApplyPrefabChanges(paramsJson, id);
}
else if (method == "unity.prefab.revert")
{
return PrefabOperations.RevertPrefabChanges(paramsJson, id);
}
else if (method == "unity.prefab.unpack")
{
return PrefabOperations.UnpackPrefab(paramsJson, id);
}
else if (method == "unity.asset.list")
{
return AssetDatabaseProvider.ListAssets(paramsJson, id);
}
else if (method == "unity.asset.find")
{
return AssetDatabaseProvider.FindAsset(paramsJson, id);
}
else if (method == "unity.asset.refresh")
{
return AssetDatabaseProvider.RefreshAssetDatabase(paramsJson, id);
}
else if (method == "unity.asset.delete")
{
return AssetDatabaseProvider.DeleteAsset(paramsJson, id);
}
else if (method == "unity.asset.move")
{
return AssetDatabaseProvider.MoveAsset(paramsJson, id);
}
else if (method == "unity.asset.copy")
{
return AssetDatabaseProvider.CopyAsset(paramsJson, id);
}
else if (method == "unity.component.list")
{
return ComponentReflection.ListComponents(paramsJson, id);
}
else if (method == "unity.component.inspect")
{
return ComponentReflection.InspectComponent(paramsJson, id);
}
else if (method == "unity.component.set")
{
return ComponentReflection.SetField(paramsJson, id);
}
else if (method == "unity.component.setProperty")
{
return ComponentReflection.SetProperty(paramsJson, id);
}
else if (method == "unity.component.invoke")
{
return ComponentReflection.InvokeMethod(paramsJson, id);
}
else if (method == "unity.component.add")
{
return ComponentReflection.AddComponent(paramsJson, id);
}
else if (method == "unity.component.remove")
{
return ComponentReflection.RemoveComponent(paramsJson, id);
}
else if (method == "unity.component.setReference")
{
return ComponentReflection.SetReference(paramsJson, id);
}
else if (method == "unity.component.setSerializedProperty")
{
Debug.Log("[MCP HTTP] SerializedProperty method called!");
return SerializedPropertyWriter.SetSerializedProperty(paramsJson, id);
}
else if (method == "unity.compile.status")
{
return CompileWaitHelper.GetCompileStatus(id);
}
else if (method == "unity.compile.waitForCompile")
{
return CompileWaitHelper.WaitForCompile(paramsJson, id);
}
else if (method == "unity.project.getPlayerSettings")
{
return ProjectSettingsController.GetPlayerSettings(id);
}
else if (method == "unity.project.setPlayerSettings")
{
return ProjectSettingsController.SetPlayerSettings(paramsJson, id);
}
else if (method == "unity.project.getQualitySettings")
{
return ProjectSettingsController.GetQualitySettings(id);
}
else if (method == "unity.project.setQualitySettings")
{
return ProjectSettingsController.SetQualitySettings(paramsJson, id);
}
else if (method == "unity.project.getPhysicsSettings")
{
return ProjectSettingsController.GetPhysicsSettings(id);
}
else if (method == "unity.project.setPhysicsSettings")
{
return ProjectSettingsController.SetPhysicsSettings(paramsJson, id);
}
else if (method == "unity.project.getTimeSettings")
{
return ProjectSettingsController.GetTimeSettings(id);
}
else if (method == "unity.project.setTimeSettings")
{
return ProjectSettingsController.SetTimeSettings(paramsJson, id);
}
else if (method == "unity.component.setArrayElement")
{
return ComponentReflection.SetArrayElement(paramsJson, id);
}
else if (method == "unity.component.addArrayElement")
{
return ComponentReflection.AddArrayElement(paramsJson, id);
}
else if (method == "unity.component.removeArrayElement")
{
return ComponentReflection.RemoveArrayElement(paramsJson, id);
}
else if (method == "unity.animator.create")
{
return AnimatorBuilder.CreateController(paramsJson, id);
}
else if (method == "unity.animator.addState")
{
return AnimatorBuilder.AddState(paramsJson, id);
}
else if (method == "unity.animator.addTransition")
{
return AnimatorBuilder.AddTransition(paramsJson, id);
}
else if (method == "unity.animator.addParameter")
{
return AnimatorBuilder.AddParameter(paramsJson, id);
}
else if (method == "unity.animator.assignClip")
{
return AnimatorBuilder.AssignClip(paramsJson, id);
}
else if (method == "unity.animator.bind")
{
return AnimatorControl.BindController(paramsJson, id);
}
// AnimatorOverrideController APIs
else if (method == "unity.animator.createOverride")
{
return AnimatorOverrideBuilder.CreateOverride(paramsJson, id);
}
else if (method == "unity.animator.setOverrideController")
{
return AnimatorOverrideBuilder.SetOverrideController(paramsJson, id);
}
else if (method == "unity.animator.setOverrideClip")
{
return AnimatorOverrideBuilder.SetOverrideClip(paramsJson, id);
}
else if (method == "unity.animator.getOverrideClips")
{
return AnimatorOverrideBuilder.GetOverrideClips(paramsJson, id);
}
else if (method == "unity.animator.clearOverrideClip")
{
return AnimatorOverrideBuilder.ClearOverrideClip(paramsJson, id);
}
#if UNITY_2021_2_OR_NEWER
else if (method == "unity.uitoolkit.createUIDocument")
{
return UIToolkitAssetCreator.CreateUIDocument(paramsJson, id);
}
else if (method == "unity.uitoolkit.createStyleSheet")
{
return UIToolkitAssetCreator.CreateStyleSheet(paramsJson, id);
}
else if (method == "unity.uitoolkit.createPanelSettings")
{
return UIToolkitAssetCreator.CreatePanelSettings(paramsJson, id);
}
else if (method == "unity.uitoolkit.addUIDocumentComponent")
{
return UIToolkitAssetCreator.AddUIDocumentComponent(paramsJson, id);
}
#endif // UNITY_2021_2_OR_NEWER
// TextMeshPro APIs
else if (method == "unity.textmeshpro.create")
{
return TextMeshProController.Create(paramsJson, id);
}
else if (method == "unity.textmeshpro.setText")
{
return TextMeshProController.SetText(paramsJson, id);
}
else if (method == "unity.textmeshpro.setStyle")
{
return TextMeshProController.SetStyle(paramsJson, id);
}
else if (method == "unity.textmeshpro.setLayout")
{
return TextMeshProController.SetLayout(paramsJson, id);
}
else if (method == "unity.textmeshpro.setAutoSize")
{
return TextMeshProController.SetAutoSize(paramsJson, id);
}
else if (method == "unity.textmeshpro.setOverflow")
{
return TextMeshProController.SetOverflow(paramsJson, id);
}
else if (method == "unity.textmeshpro.setFont")
{
return TextMeshProController.SetFont(paramsJson, id);
}
else if (method == "unity.textmeshpro.getInfo")
{
return TextMeshProController.GetInfo(paramsJson, id);
}
else if (method == "unity.textmeshpro.createMultiple")
{
return TextMeshProController.CreateMultiple(paramsJson, id);
}
else if (method == "unity.textmeshpro.listFontAssets")
{
return TextMeshProController.ListFontAssets(paramsJson, id);
}
else if (method == "unity.textmeshpro.getFontAssetInfo")
{
return TextMeshProController.GetFontAssetInfo(paramsJson, id);
}
// Material APIs
else if (method == "unity.material.getInfo")
{
return MaterialController.GetInfo(paramsJson, id);
}
else if (method == "unity.material.getProperty")
{
return MaterialController.GetProperty(paramsJson, id);
}
else if (method == "unity.material.setProperty")
{
return MaterialController.SetProperty(paramsJson, id);
}
else if (method == "unity.material.setColor")
{
return MaterialController.SetColor(paramsJson, id);
}
else if (method == "unity.material.setFloat")
{
return MaterialController.SetFloat(paramsJson, id);
}
else if (method == "unity.material.setVector")
{
return MaterialController.SetVector(paramsJson, id);
}
else if (method == "unity.material.setTexture")
{
return MaterialController.SetTexture(paramsJson, id);
}
else if (method == "unity.material.setKeyword")
{
return MaterialController.SetKeyword(paramsJson, id);
}
else if (method == "unity.material.setRenderQueue")
{
return MaterialController.SetRenderQueue(paramsJson, id);
}
else if (method == "unity.material.listProperties")
{
return MaterialController.ListProperties(paramsJson, id);
}
else if (method == "unity.material.create")
{
return MaterialController.Create(paramsJson, id);
}
else if (method == "unity.material.copyProperties")
{
return MaterialController.CopyProperties(paramsJson, id);
}
else if (method == "unity.material.apply")
{
return MaterialController.Apply(paramsJson, id);
}
else if (method == "unity.material.getFromObject")
{
return MaterialController.GetFromObject(paramsJson, id);
}
else if (method == "unity.material.listFromObject")
{
return MaterialController.ListFromObject(paramsJson, id);
}
else if (method == "unity.material.setSharedMaterial")
{
return MaterialController.SetSharedMaterial(paramsJson, id);
}
// ============================================
// Renderer APIs
// ============================================
else if (method == "unity.renderer.setMaterial")
{
return MaterialController.SetRendererMaterial(paramsJson, id);
}
// ============================================
// Build Pipeline APIs (3)
// ============================================
else if (method == "unity.build.buildPlayer")
{
return BuildPipelineController.BuildPlayer(paramsJson, id);
}
else if (method == "unity.build.getSettings")
{
return BuildPipelineController.GetBuildSettings(id);
}
else if (method == "unity.build.setSettings")
{
return BuildPipelineController.SetBuildSettings(paramsJson, id);
}
#if UNITY_2022_1_OR_NEWER
// ============================================
// Build Profile APIs (5) - Unity 2022.1+
// ============================================
else if (method == "unity.buildProfile.list")
{
return BuildProfileController.ListProfiles(id);
}
else if (method == "unity.buildProfile.activate")
{
return BuildProfileController.ActivateProfile(paramsJson, id);
}
else if (method == "unity.buildProfile.create")
{
return BuildProfileController.CreateProfile(paramsJson, id);
}
else if (method == "unity.buildProfile.getSettings")
{
return BuildProfileController.GetProfileSettings(paramsJson, id);
}
else if (method == "unity.buildProfile.setSettings")
{
return BuildProfileController.SetProfileSettings(paramsJson, id);
}
#endif
// ============================================
// Package APIs (7)
// ============================================
else if (method == "unity.package.export")
{
return PackageController.ExportPackage(paramsJson, id);
}
else if (method == "unity.package.import")
{
return PackageController.ImportPackage(paramsJson, id);
}
else if (method == "unity.package.list")
{
return PackageController.ListPackages(paramsJson, id);
}
else if (method == "unity.package.add")
{
return PackageController.AddPackage(paramsJson, id);
}
else if (method == "unity.package.remove")
{
return PackageController.RemovePackage(paramsJson, id);
}
else if (method == "unity.package.embed")
{
return PackageController.EmbedPackage(paramsJson, id);
}
else if (method == "unity.package.pack")
{
return PackageController.PackPackage(paramsJson, id);
}
// ============================================
// uGUI - RectTransform APIs (6)
// ============================================
else if (method == "unity.rectTransform.setSize")
{
return uGUIController.SetSize(paramsJson, id);
}
else if (method == "unity.rectTransform.setPosition")
{
return uGUIController.SetPosition(paramsJson, id);
}
else if (method == "unity.rectTransform.setAnchors")
{
return uGUIController.SetAnchors(paramsJson, id);
}
else if (method == "unity.rectTransform.setPivot")
{
return uGUIController.SetPivot(paramsJson, id);
}
else if (method == "unity.rectTransform.setOffsets")
{
return uGUIController.SetOffsets(paramsJson, id);
}
else if (method == "unity.rectTransform.getInfo")
{
return uGUIController.GetInfo(paramsJson, id);
}
// ============================================
// uGUI - Canvas APIs (3)
// ============================================
else if (method == "unity.canvas.create")
{
return uGUIController.CreateCanvas(paramsJson, id);
}
else if (method == "unity.canvas.setScaler")
{
return uGUIController.SetScaler(paramsJson, id);
}
else if (method == "unity.canvas.getInfo")
{
return uGUIController.GetCanvasInfo(paramsJson, id);
}
// ============================================
// uGUI - UI Element Presets (4)
// ============================================
else if (method == "unity.ui.createButton")
{
return uGUIController.CreateButton(paramsJson, id);
}
else if (method == "unity.ui.createPanel")
{
return uGUIController.CreatePanel(paramsJson, id);
}
else if (method == "unity.ui.createImage")
{
return uGUIController.CreateImage(paramsJson, id);
}
else if (method == "unity.ui.createText")
{
return uGUIController.CreateText(paramsJson, id);
}
// Asset creation APIs
else if (method == "unity.asset.createMaterial")
{
return UnityAssetCreator.CreateMaterial(paramsJson, id);
}
else if (method == "unity.asset.createScene")
{
return UnityAssetCreator.CreateScene(paramsJson, id);
}
else if (method == "unity.asset.createFolder")
{
return UnityAssetCreator.CreateFolder(paramsJson, id);
}
else if (method == "unity.asset.createPhysicsMaterial")
{
return UnityAssetCreator.CreatePhysicsMaterial(paramsJson, id);
}
else if (method == "unity.asset.createPhysicsMaterial2D")
{
return UnityAssetCreator.CreatePhysicsMaterial2D(paramsJson, id);
}
else if (method == "unity.asset.createAudioMixer")
{
return UnityAssetCreator.CreateAudioMixer(paramsJson, id);
}
else if (method == "unity.asset.createAnimationClip")
{
return UnityAssetCreator.CreateAnimationClip(paramsJson, id);
}
else if (method == "unity.asset.createRenderTexture")
{
return UnityAssetCreator.CreateRenderTexture(paramsJson, id);
}
else if (method == "unity.asset.createAvatarMask")
{
return UnityAssetCreator.CreateAvatarMask(paramsJson, id);
}
else if (method == "unity.asset.createScriptableObject" || method == "unity.asset.create")
{
return UnityAssetCreator.CreateScriptableObject(paramsJson, id);
}
// SerializedObject inspection
else if (method == "unity.serialized.inspect")
{
return SerializedObjectInspector.InspectSerializedObject(paramsJson, id);
}
else if (method == "unity.serialized.validateMissingReferences")
{
return SerializedObjectInspector.ValidateMissingReferences(paramsJson, id);
}
else if (method == "unity.serialized.validateSceneMissingReferences")
{
return SerializedObjectInspector.ValidateSceneMissingReferences(paramsJson, id);
}
// Editor method invocation
else if (method == "unity.editor.executeMenuItem")
{
return EditorMethodInvoker.ExecuteMenuItem(paramsJson, id);
}
else if (method == "unity.editor.invokeStaticMethod")
{
return EditorMethodInvoker.InvokeStaticMethod(paramsJson, id);
}
else if (method == "unity.editor.listMenuItems")
{
return EditorMethodInvoker.ListMenuItems(paramsJson, id);
}
// ============================================
// Timeline APIs (Reflection-based)
// ============================================
// Timeline API - TimelineAsset管理 (6個)
else if (method == "unity.timeline.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineBuilder, "Create", paramsJson, id);
}
else if (method == "unity.timeline.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineBuilder, "Delete", paramsJson, id);
}
else if (method == "unity.timeline.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineBuilder, "Get", paramsJson, id);
}
else if (method == "unity.timeline.list")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineBuilder, "List", paramsJson, id);
}
else if (method == "unity.timeline.setDuration")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineBuilder, "SetDuration", paramsJson, id);
}
else if (method == "unity.timeline.duplicate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineBuilder, "Duplicate", paramsJson, id);
}
// Timeline API - PlayableDirector制御 (10個)
else if (method == "unity.timeline.director.bind")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "Bind", paramsJson, id);
}
else if (method == "unity.timeline.director.play")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "Play", paramsJson, id);
}
else if (method == "unity.timeline.director.stop")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "Stop", paramsJson, id);
}
else if (method == "unity.timeline.director.pause")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "Pause", paramsJson, id);
}
else if (method == "unity.timeline.director.resume")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "Resume", paramsJson, id);
}
else if (method == "unity.timeline.director.setTime")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "SetTime", paramsJson, id);
}
else if (method == "unity.timeline.director.evaluate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "Evaluate", paramsJson, id);
}
else if (method == "unity.timeline.director.getState")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "GetState", paramsJson, id);
}
else if (method == "unity.timeline.director.setBinding")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "SetBinding", paramsJson, id);
}
else if (method == "unity.timeline.director.getBindings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineDirectorControl, "GetBindings", paramsJson, id);
}
// Timeline API - Track操作 (10個)
else if (method == "unity.timeline.track.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "Create", paramsJson, id);
}
else if (method == "unity.timeline.track.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "Delete", paramsJson, id);
}
else if (method == "unity.timeline.track.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "Get", paramsJson, id);
}
else if (method == "unity.timeline.track.list")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "List", paramsJson, id);
}
else if (method == "unity.timeline.track.setMuted")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "SetMuted", paramsJson, id);
}
else if (method == "unity.timeline.track.setLocked")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "SetLocked", paramsJson, id);
}
else if (method == "unity.timeline.track.setParent")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "SetParent", paramsJson, id);
}
else if (method == "unity.timeline.track.reorder")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "Reorder", paramsJson, id);
}
else if (method == "unity.timeline.track.setAnimationTrackSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "SetAnimationTrackSettings", paramsJson, id);
}
else if (method == "unity.timeline.track.setActivationTrackSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineTrackBuilder, "SetActivationTrackSettings", paramsJson, id);
}
// Timeline API - Clip操作 (12個)
else if (method == "unity.timeline.clip.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "Create", paramsJson, id);
}
else if (method == "unity.timeline.clip.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "Delete", paramsJson, id);
}
else if (method == "unity.timeline.clip.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "Get", paramsJson, id);
}
else if (method == "unity.timeline.clip.list")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "List", paramsJson, id);
}
else if (method == "unity.timeline.clip.setTiming")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetTiming", paramsJson, id);
}
else if (method == "unity.timeline.clip.setBlend")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetBlend", paramsJson, id);
}
else if (method == "unity.timeline.clip.setEase")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetEase", paramsJson, id);
}
else if (method == "unity.timeline.clip.setDisplayName")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetDisplayName", paramsJson, id);
}
else if (method == "unity.timeline.clip.setAnimationClipSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetAnimationClipSettings", paramsJson, id);
}
else if (method == "unity.timeline.clip.setAudioClipSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetAudioClipSettings", paramsJson, id);
}
else if (method == "unity.timeline.clip.setControlClipSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "SetControlClipSettings", paramsJson, id);
}
else if (method == "unity.timeline.clip.duplicate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineClipBuilder, "Duplicate", paramsJson, id);
}
// Timeline API - Marker操作 (4個)
else if (method == "unity.timeline.marker.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineMarkerBuilder, "Create", paramsJson, id);
}
else if (method == "unity.timeline.marker.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineMarkerBuilder, "Delete", paramsJson, id);
}
else if (method == "unity.timeline.marker.list")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineMarkerBuilder, "List", paramsJson, id);
}
else if (method == "unity.timeline.marker.setSignalEmitterSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Timeline, PackageTypes.TimelineMarkerBuilder, "SetSignalEmitterSettings", paramsJson, id);
}
// ============================================
// Recorder APIs (Reflection-based)
// ============================================
// Recorder APIs - Basic Operations
else if (method == "unity.recorder.createSession")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "CreateSession", paramsJson, id);
}
else if (method == "unity.recorder.prepareRecording")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PrepareRecording", paramsJson, id);
}
else if (method == "unity.recorder.startRecording")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "StartRecording", paramsJson, id);
}
else if (method == "unity.recorder.stopRecording")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "StopRecording", paramsJson, id);
}
else if (method == "unity.recorder.isRecording")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "IsRecording", paramsJson, id);
}
else if (method == "unity.recorder.getStatus")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "GetStatus", paramsJson, id);
}
// Recorder APIs - Settings
else if (method == "unity.recorder.setFrameRate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "SetFrameRate", paramsJson, id);
}
else if (method == "unity.recorder.setRecordModeManual")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "SetRecordModeManual", paramsJson, id);
}
else if (method == "unity.recorder.setRecordModeFrameInterval")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "SetRecordModeFrameInterval", paramsJson, id);
}
else if (method == "unity.recorder.setRecordModeTimeInterval")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "SetRecordModeTimeInterval", paramsJson, id);
}
else if (method == "unity.recorder.setRecordModeSingleFrame")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "SetRecordModeSingleFrame", paramsJson, id);
}
// Recorder APIs - Presets
else if (method == "unity.recorder.preset.qaTestVideo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PresetQaTestVideo", paramsJson, id);
}
else if (method == "unity.recorder.preset.gifCapture")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PresetGifCapture", paramsJson, id);
}
else if (method == "unity.recorder.preset.thumbnailSequence")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PresetThumbnailSequence", paramsJson, id);
}
else if (method == "unity.recorder.preset.cinematicExport")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PresetCinematicExport", paramsJson, id);
}
else if (method == "unity.recorder.preset.motionCapture")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PresetMotionCapture", paramsJson, id);
}
else if (method == "unity.recorder.preset.audioCapture")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "PresetAudioCapture", paramsJson, id);
}
// Recorder APIs - Detailed Recorders
else if (method == "unity.recorder.createMovieRecorder")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "CreateMovieRecorder", paramsJson, id);
}
else if (method == "unity.recorder.createImageRecorder")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "CreateImageRecorder", paramsJson, id);
}
else if (method == "unity.recorder.createAnimationRecorder")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "CreateAnimationRecorder", paramsJson, id);
}
// Recorder APIs - Management
else if (method == "unity.recorder.listRecorderSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "ListRecorderSettings", paramsJson, id);
}
else if (method == "unity.recorder.clearSession")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "ClearSession", paramsJson, id);
}
else if (method == "unity.recorder.setCapFrameRate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Recorder, PackageTypes.RecorderController, "SetCapFrameRate", paramsJson, id);
}
// ============================================
// Cinemachine APIs (Reflection-based)
// ============================================
// Phase 1: Basic Virtual Camera
else if (method == "unity.cinemachine.createVirtualCamera")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineControl, "CreateVirtualCamera", paramsJson, id);
}
else if (method == "unity.cinemachine.deleteVirtualCamera")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineControl, "DeleteVirtualCamera", paramsJson, id);
}
else if (method == "unity.cinemachine.listVirtualCameras")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineControl, "ListVirtualCameras", paramsJson, id);
}
else if (method == "unity.cinemachine.setVirtualCameraTarget")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineControl, "SetVirtualCameraTarget", paramsJson, id);
}
else if (method == "unity.cinemachine.setVirtualCameraPriority")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineControl, "SetVirtualCameraPriority", paramsJson, id);
}
else if (method == "unity.cinemachine.getVirtualCameraInfo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineControl, "GetVirtualCameraInfo", paramsJson, id);
}
// Phase 2: Body/Aim
else if (method == "unity.cinemachine.setBodyType")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineBodyAim, "SetBodyType", paramsJson, id);
}
else if (method == "unity.cinemachine.setAimType")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineBodyAim, "SetAimType", paramsJson, id);
}
else if (method == "unity.cinemachine.setFollowOffset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineBodyAim, "SetFollowOffset", paramsJson, id);
}
else if (method == "unity.cinemachine.setDamping")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineBodyAim, "SetDamping", paramsJson, id);
}
else if (method == "unity.cinemachine.setDeadZone")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineBodyAim, "SetDeadZone", paramsJson, id);
}
else if (method == "unity.cinemachine.setSoftZone")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineBodyAim, "SetSoftZone", paramsJson, id);
}
// Phase 3: Advanced Cameras
else if (method == "unity.cinemachine.createFreeLookCamera")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineAdvanced, "CreateFreeLookCamera", paramsJson, id);
}
else if (method == "unity.cinemachine.setFreeLookRig")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineAdvanced, "SetFreeLookRig", paramsJson, id);
}
else if (method == "unity.cinemachine.createBlendListCamera")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineAdvanced, "CreateBlendListCamera", paramsJson, id);
}
else if (method == "unity.cinemachine.createClearShot")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineAdvanced, "CreateClearShot", paramsJson, id);
}
// Phase 4: Dolly System
else if (method == "unity.cinemachine.createDollyTrack")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "CreateDollyTrack", paramsJson, id);
}
else if (method == "unity.cinemachine.addDollyWaypoint")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "AddDollyWaypoint", paramsJson, id);
}
else if (method == "unity.cinemachine.updateDollyWaypoint")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "UpdateDollyWaypoint", paramsJson, id);
}
else if (method == "unity.cinemachine.removeDollyWaypoint")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "RemoveDollyWaypoint", paramsJson, id);
}
else if (method == "unity.cinemachine.getDollyTrackInfo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "GetDollyTrackInfo", paramsJson, id);
}
else if (method == "unity.cinemachine.createDollyCamera")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "CreateDollyCamera", paramsJson, id);
}
else if (method == "unity.cinemachine.setDollyPathPosition")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "SetDollyPathPosition", paramsJson, id);
}
else if (method == "unity.cinemachine.setDollyLoopMode")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineDolly, "SetDollyLoopMode", paramsJson, id);
}
// Phase 5: Transitions
else if (method == "unity.cinemachine.setBrainSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineTransition, "SetBrainSettings", paramsJson, id);
}
else if (method == "unity.cinemachine.setDefaultBlend")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineTransition, "SetDefaultBlend", paramsJson, id);
}
else if (method == "unity.cinemachine.setCustomBlend")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineTransition, "SetCustomBlend", paramsJson, id);
}
else if (method == "unity.cinemachine.triggerCameraSwitch")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineTransition, "TriggerCameraSwitch", paramsJson, id);
}
// Phase 6: Target Groups
else if (method == "unity.cinemachine.createTargetGroup")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "CreateTargetGroup", paramsJson, id);
}
else if (method == "unity.cinemachine.addTargetGroupMember")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "AddTargetGroupMember", paramsJson, id);
}
else if (method == "unity.cinemachine.removeTargetGroupMember")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "RemoveTargetGroupMember", paramsJson, id);
}
else if (method == "unity.cinemachine.updateTargetGroupMember")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "UpdateTargetGroupMember", paramsJson, id);
}
else if (method == "unity.cinemachine.getTargetGroupInfo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "GetTargetGroupInfo", paramsJson, id);
}
else if (method == "unity.cinemachine.createGroupCamera")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "CreateGroupCamera", paramsJson, id);
}
else if (method == "unity.cinemachine.setGroupFramingMode")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "SetGroupFramingMode", paramsJson, id);
}
else if (method == "unity.cinemachine.setGroupFramingSize")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "SetGroupFramingSize", paramsJson, id);
}
else if (method == "unity.cinemachine.frameTargets")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "FrameTargets", paramsJson, id);
}
else if (method == "unity.cinemachine.frameAllTargets")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineGroup, "FrameAllTargets", paramsJson, id);
}
// Phase 7: Effects
else if (method == "unity.cinemachine.createCameraShake")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineEffects, "CreateCameraShake", paramsJson, id);
}
else if (method == "unity.cinemachine.triggerImpulse")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineEffects, "TriggerImpulse", paramsJson, id);
}
else if (method == "unity.cinemachine.setNoiseProfile")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineEffects, "SetNoiseProfile", paramsJson, id);
}
else if (method == "unity.cinemachine.createConfiner")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineEffects, "CreateConfiner", paramsJson, id);
}
else if (method == "unity.cinemachine.setScreenComposition")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachineEffects, "SetScreenComposition", paramsJson, id);
}
// Phase 8: Presets
else if (method == "unity.cinemachine.applyPreset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachinePresets, "ApplyPreset", paramsJson, id);
}
else if (method == "unity.cinemachine.createCinematicShot")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachinePresets, "CreateCinematicShot", paramsJson, id);
}
else if (method == "unity.cinemachine.saveCameraState")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachinePresets, "SaveCameraState", paramsJson, id);
}
else if (method == "unity.cinemachine.loadCameraState")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Cinemachine, PackageTypes.CinemachinePresets, "LoadCameraState", paramsJson, id);
}
// ============================================
// ShaderGraph APIs (Reflection-based)
// ============================================
else if (method == "unity.shaderGraph.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ShaderGraph, PackageTypes.ShaderGraphBuilder, "CreateShaderGraph", paramsJson, id);
}
else if (method == "unity.shaderGraph.getInfo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ShaderGraph, PackageTypes.ShaderGraphBuilder, "GetShaderGraphInfo", paramsJson, id);
}
else if (method == "unity.shaderGraph.getNodes")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ShaderGraph, PackageTypes.ShaderGraphBuilder, "GetNodes", paramsJson, id);
}
else if (method == "unity.shaderGraph.getProperties")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ShaderGraph, PackageTypes.ShaderGraphBuilder, "GetProperties", paramsJson, id);
}
else if (method == "unity.shaderGraph.getConnections")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ShaderGraph, PackageTypes.ShaderGraphBuilder, "GetConnections", paramsJson, id);
}
// ============================================
// Shader APIs
// ============================================
// Core Shader APIs
else if (method == "unity.shader.getInfo")
{
return ShaderController.GetInfo(paramsJson, id);
}
else if (method == "unity.shader.reimport")
{
return ShaderController.Reimport(paramsJson, id);
}
else if (method == "unity.shader.getCompileErrors")
{
return ShaderController.GetCompileErrors(paramsJson, id);
}
else if (method == "unity.shader.listAll")
{
return ShaderController.ListAll(paramsJson, id);
}
else if (method == "unity.shader.find")
{
return ShaderController.Find(paramsJson, id);
}
// TextMeshPro Shader APIs
else if (method == "unity.shader.tmp.listPresets")
{
return ShaderController.TMPListPresets(paramsJson, id);
}
else if (method == "unity.shader.tmp.applyDistanceField")
{
return ShaderController.TMPApplyDistanceField(paramsJson, id);
}
else if (method == "unity.shader.tmp.setOutline")
{
return ShaderController.TMPSetOutline(paramsJson, id);
}
else if (method == "unity.shader.tmp.setGlow")
{
return ShaderController.TMPSetGlow(paramsJson, id);
}
else if (method == "unity.shader.tmp.setBevel")
{
return ShaderController.TMPSetBevel(paramsJson, id);
}
else if (method == "unity.shader.tmp.setUnderlay")
{
return ShaderController.TMPSetUnderlay(paramsJson, id);
}
// UI Shader APIs
else if (method == "unity.shader.ui.listPresets")
{
return ShaderController.UIListPresets(paramsJson, id);
}
else if (method == "unity.shader.ui.applyDefault")
{
return ShaderController.UIApplyDefault(paramsJson, id);
}
else if (method == "unity.shader.ui.setMask")
{
return ShaderController.UISetMask(paramsJson, id);
}
else if (method == "unity.shader.ui.setStencil")
{
return ShaderController.UISetStencil(paramsJson, id);
}
// Particle Shader APIs
else if (method == "unity.shader.particle.listPresets")
{
return ShaderController.ParticleListPresets(paramsJson, id);
}
else if (method == "unity.shader.particle.applyShader")
{
return ShaderController.ParticleApplyShader(paramsJson, id);
}
else if (method == "unity.shader.particle.setBlendMode")
{
return ShaderController.ParticleSetBlendMode(paramsJson, id);
}
// Skybox Shader APIs
else if (method == "unity.shader.skybox.listPresets")
{
return ShaderController.SkyboxListPresets(paramsJson, id);
}
else if (method == "unity.shader.skybox.applyProcedural")
{
return ShaderController.SkyboxApplyProcedural(paramsJson, id);
}
else if (method == "unity.shader.skybox.applyCubemap")
{
return ShaderController.SkyboxApplyCubemap(paramsJson, id);
}
else if (method == "unity.shader.skybox.applyPanoramic")
{
return ShaderController.SkyboxApplyPanoramic(paramsJson, id);
}
// Sprite Shader APIs
else if (method == "unity.shader.sprite.listPresets")
{
return ShaderController.SpriteListPresets(paramsJson, id);
}
else if (method == "unity.shader.sprite.applyShader")
{
return ShaderController.SpriteApplyShader(paramsJson, id);
}
// ============================================
// Camera APIs (Public Plan)
// ============================================
else if (method == "unity.camera.create")
{
return CameraController.CreateCamera(paramsJson, id);
}
else if (method == "unity.camera.delete")
{
return CameraController.DeleteCamera(paramsJson, id);
}
else if (method == "unity.camera.list")
{
return CameraController.ListCameras(paramsJson, id);
}
else if (method == "unity.camera.getInfo")
{
return CameraController.GetCameraInfo(paramsJson, id);
}
else if (method == "unity.camera.setProperty")
{
return CameraController.SetCameraProperty(paramsJson, id);
}
else if (method == "unity.camera.setViewport")
{
return CameraController.SetViewport(paramsJson, id);
}
else if (method == "unity.camera.setTargetDisplay")
{
return CameraController.SetTargetDisplay(paramsJson, id);
}
else if (method == "unity.camera.setCullingMask")
{
return CameraController.SetCullingMask(paramsJson, id);
}
else if (method == "unity.camera.setRenderingPath")
{
return CameraController.SetRenderingPath(paramsJson, id);
}
// ============================================
// Audio APIs (Direct call - Core Unity feature)
// ============================================
else if (method == "unity.audio.createSource")
{
return AudioController.CreateSource(paramsJson, id);
}
else if (method == "unity.audio.deleteSource")
{
return AudioController.DeleteSource(paramsJson, id);
}
else if (method == "unity.audio.play")
{
return AudioController.Play(paramsJson, id);
}
else if (method == "unity.audio.stop")
{
return AudioController.Stop(paramsJson, id);
}
else if (method == "unity.audio.pause")
{
return AudioController.Pause(paramsJson, id);
}
else if (method == "unity.audio.setClip")
{
return AudioController.SetClip(paramsJson, id);
}
else if (method == "unity.audio.setProperty")
{
return AudioController.SetProperty(paramsJson, id);
}
else if (method == "unity.audio.getInfo")
{
return AudioController.GetInfo(paramsJson, id);
}
else if (method == "unity.audio.list")
{
return AudioController.ListSources(paramsJson, id);
}
else if (method == "unity.audio.loadMixer")
{
return AudioController.LoadMixer(paramsJson, id);
}
else if (method == "unity.audio.setMixerFloat")
{
return AudioController.SetMixerFloat(paramsJson, id);
}
else if (method == "unity.audio.getMixerFloat")
{
return AudioController.GetMixerFloat(paramsJson, id);
}
else if (method == "unity.audio.listMixerGroups")
{
return AudioController.ListMixerGroups(paramsJson, id);
}
else if (method == "unity.audio.listClips")
{
return AudioController.ListClips(paramsJson, id);
}
else if (method == "unity.audio.getClipInfo")
{
return AudioController.GetClipInfo(paramsJson, id);
}
else if (method == "unity.audio.importClip")
{
return AudioController.ImportClip(paramsJson, id);
}
else if (method == "unity.audio.createListener")
{
return AudioController.CreateListener(paramsJson, id);
}
else if (method == "unity.audio.deleteListener")
{
return AudioController.DeleteListener(paramsJson, id);
}
else if (method == "unity.audio.listListeners")
{
return AudioController.ListListeners(paramsJson, id);
}
else if (method == "unity.audio.getListenerInfo")
{
return AudioController.GetListenerInfo(paramsJson, id);
}
else if (method == "unity.audio.setListenerProperty")
{
return AudioController.SetListenerProperty(paramsJson, id);
}
// AudioMixer Extended APIs - グループ操作
else if (method == "unity.audio.createMixerGroup")
{
return AudioController.CreateMixerGroup(paramsJson, id);
}
else if (method == "unity.audio.deleteMixerGroup")
{
return AudioController.DeleteMixerGroup(paramsJson, id);
}
else if (method == "unity.audio.renameMixerGroup")
{
return AudioController.RenameMixerGroup(paramsJson, id);
}
else if (method == "unity.audio.setGroupVolume")
{
return AudioController.SetGroupVolume(paramsJson, id);
}
else if (method == "unity.audio.setGroupOutput")
{
return AudioController.SetGroupOutput(paramsJson, id);
}
// AudioMixer Extended APIs - エフェクト操作
else if (method == "unity.audio.addEffect")
{
return AudioController.AddEffect(paramsJson, id);
}
else if (method == "unity.audio.removeEffect")
{
return AudioController.RemoveEffect(paramsJson, id);
}
else if (method == "unity.audio.moveEffect")
{
return AudioController.MoveEffect(paramsJson, id);
}
else if (method == "unity.audio.listEffects")
{
return AudioController.ListEffects(paramsJson, id);
}
else if (method == "unity.audio.setEffectParameter")
{
return AudioController.SetEffectParameter(paramsJson, id);
}
else if (method == "unity.audio.getEffectParameter")
{
return AudioController.GetEffectParameter(paramsJson, id);
}
else if (method == "unity.audio.listEffectTypes")
{
return AudioController.ListEffectTypes(paramsJson, id);
}
// AudioMixer Extended APIs - スナップショット操作
else if (method == "unity.audio.createSnapshot")
{
return AudioController.CreateSnapshot(paramsJson, id);
}
else if (method == "unity.audio.deleteSnapshot")
{
return AudioController.DeleteSnapshot(paramsJson, id);
}
else if (method == "unity.audio.listSnapshots")
{
return AudioController.ListSnapshots(paramsJson, id);
}
else if (method == "unity.audio.transitionToSnapshot")
{
return AudioController.TransitionToSnapshot(paramsJson, id);
}
// AudioMixer Extended APIs - センド操作
else if (method == "unity.audio.addSend")
{
return AudioController.AddSend(paramsJson, id);
}
else if (method == "unity.audio.setSendLevel")
{
return AudioController.SetSendLevel(paramsJson, id);
}
// ============================================
// Volume / Post Processing APIs (Reflection-based)
// Requires: com.unity.render-pipelines.universal
// ============================================
else if (method == "unity.volume.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "CreateVolume", paramsJson, id);
}
else if (method == "unity.volume.createProfile")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "CreateProfile", paramsJson, id);
}
else if (method == "unity.volume.assignProfile")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "AssignProfile", paramsJson, id);
}
else if (method == "unity.volume.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "DeleteVolume", paramsJson, id);
}
else if (method == "unity.volume.list")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "ListVolumes", paramsJson, id);
}
else if (method == "unity.volume.getInfo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "GetVolumeInfo", paramsJson, id);
}
else if (method == "unity.volume.setBloom")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetBloom", paramsJson, id);
}
else if (method == "unity.volume.setVignette")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetVignette", paramsJson, id);
}
else if (method == "unity.volume.setColorAdjustments")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetColorAdjustments", paramsJson, id);
}
else if (method == "unity.volume.setDepthOfField")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetDepthOfField", paramsJson, id);
}
else if (method == "unity.volume.setMotionBlur")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetMotionBlur", paramsJson, id);
}
else if (method == "unity.volume.setToneMapping")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetToneMapping", paramsJson, id);
}
else if (method == "unity.volume.setFilmGrain")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetFilmGrain", paramsJson, id);
}
else if (method == "unity.volume.setChromaticAberration")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetChromaticAberration", paramsJson, id);
}
else if (method == "unity.volume.setLensDistortion")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetLensDistortion", paramsJson, id);
}
else if (method == "unity.volume.setWhiteBalance")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "SetWhiteBalance", paramsJson, id);
}
else if (method == "unity.volume.applyPreset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "ApplyPreset", paramsJson, id);
}
else if (method == "unity.volume.removeOverride")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Volume, PackageTypes.VolumeController, "RemoveOverride", paramsJson, id);
}
// ============================================
// InputSystem APIs (Reflection-based)
// ============================================
// Asset APIs
else if (method == "unity.inputsystem.createAsset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "CreateAsset", paramsJson, id);
}
else if (method == "unity.inputsystem.deleteAsset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "DeleteAsset", paramsJson, id);
}
else if (method == "unity.inputsystem.getAsset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "GetAsset", paramsJson, id);
}
else if (method == "unity.inputsystem.listAssets")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "ListAssets", paramsJson, id);
}
// ActionMap APIs
else if (method == "unity.inputsystem.addActionMap")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "AddActionMap", paramsJson, id);
}
else if (method == "unity.inputsystem.removeActionMap")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "RemoveActionMap", paramsJson, id);
}
else if (method == "unity.inputsystem.getActionMap")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "GetActionMap", paramsJson, id);
}
// Action APIs
else if (method == "unity.inputsystem.addAction")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "AddAction", paramsJson, id);
}
else if (method == "unity.inputsystem.removeAction")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "RemoveAction", paramsJson, id);
}
else if (method == "unity.inputsystem.getAction")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "GetAction", paramsJson, id);
}
// Binding APIs
else if (method == "unity.inputsystem.addBinding")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "AddBinding", paramsJson, id);
}
else if (method == "unity.inputsystem.removeBinding")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "RemoveBinding", paramsJson, id);
}
else if (method == "unity.inputsystem.addCompositeBinding")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "AddCompositeBinding", paramsJson, id);
}
// ControlScheme APIs
else if (method == "unity.inputsystem.addControlScheme")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "AddControlScheme", paramsJson, id);
}
else if (method == "unity.inputsystem.removeControlScheme")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "RemoveControlScheme", paramsJson, id);
}
else if (method == "unity.inputsystem.listControlSchemes")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "ListControlSchemes", paramsJson, id);
}
// Device APIs
else if (method == "unity.inputsystem.listDevices")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "ListDevices", paramsJson, id);
}
else if (method == "unity.inputsystem.listLayouts")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "ListLayouts", paramsJson, id);
}
// Utility APIs
else if (method == "unity.inputsystem.generateScript")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "GenerateScript", paramsJson, id);
}
else if (method == "unity.inputsystem.addPlayerInput")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemControl, "AddPlayerInput", paramsJson, id);
}
// InputSystem Setup APIs (Platform Presets)
else if (method == "unity.inputsystem.setup.desktop")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "SetupDesktop", paramsJson, id);
}
else if (method == "unity.inputsystem.setup.mobile")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "SetupMobile", paramsJson, id);
}
else if (method == "unity.inputsystem.setup.console")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "SetupConsole", paramsJson, id);
}
else if (method == "unity.inputsystem.setup.vr")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "SetupVR", paramsJson, id);
}
// InputSystem Game Genre Presets
else if (method == "unity.inputsystem.preset.fps")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "PresetFPS", paramsJson, id);
}
else if (method == "unity.inputsystem.preset.thirdPerson")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "PresetThirdPerson", paramsJson, id);
}
else if (method == "unity.inputsystem.preset.platformer")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "PresetPlatformer", paramsJson, id);
}
else if (method == "unity.inputsystem.preset.ui")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "PresetUI", paramsJson, id);
}
// InputSystem Settings Management
else if (method == "unity.inputsystem.settings.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "GetSettings", paramsJson, id);
}
else if (method == "unity.inputsystem.settings.set")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "SetSettings", paramsJson, id);
}
else if (method == "unity.inputsystem.settings.reset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "ResetSettings", paramsJson, id);
}
else if (method == "unity.inputsystem.setInputHandling")
{
return PackageApiInvoker.Invoke(PackageAssemblies.InputSystem, PackageTypes.InputSystemSetup, "SetInputHandling", paramsJson, id);
}
// ============================================
// ProBuilder APIs (Reflection-based)
// ============================================
// Mode Management APIs
else if (method == "unity.probuilder.mode.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderModeManager, "GetMode", paramsJson, id);
}
else if (method == "unity.probuilder.mode.set")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderModeManager, "SetMode", paramsJson, id);
}
else if (method == "unity.probuilder.selection.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderModeManager, "GetSelection", paramsJson, id);
}
else if (method == "unity.probuilder.selection.clear")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderModeManager, "ClearSelection", paramsJson, id);
}
// Object Mode APIs
else if (method == "unity.probuilder.object.createPrimitive")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "CreatePrimitive", paramsJson, id);
}
else if (method == "unity.probuilder.object.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "DeleteObject", paramsJson, id);
}
else if (method == "unity.probuilder.object.getMeshInfo")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "GetMeshInfo", paramsJson, id);
}
else if (method == "unity.probuilder.object.list")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "ListObjects", paramsJson, id);
}
else if (method == "unity.probuilder.object.duplicate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "Duplicate", paramsJson, id);
}
else if (method == "unity.probuilder.object.combineMeshes")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "CombineMeshes", paramsJson, id);
}
else if (method == "unity.probuilder.object.mirror")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "Mirror", paramsJson, id);
}
else if (method == "unity.probuilder.object.proBuilderize")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "ProBuilderize", paramsJson, id);
}
else if (method == "unity.probuilder.object.freezeTransform")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "FreezeTransform", paramsJson, id);
}
else if (method == "unity.probuilder.object.centerPivot")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "CenterPivot", paramsJson, id);
}
else if (method == "unity.probuilder.object.conformNormals")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "ConformNormals", paramsJson, id);
}
else if (method == "unity.probuilder.object.flipNormals")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "FlipNormals", paramsJson, id);
}
else if (method == "unity.probuilder.object.setCollider")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "SetCollider", paramsJson, id);
}
else if (method == "unity.probuilder.object.setTrigger")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "SetTrigger", paramsJson, id);
}
else if (method == "unity.probuilder.object.setVertexColors")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "SetVertexColors", paramsJson, id);
}
else if (method == "unity.probuilder.object.getVertexColors")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "GetVertexColors", paramsJson, id);
}
else if (method == "unity.probuilder.object.export")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderObjectOperations, "Export", paramsJson, id);
}
// Vertex Mode APIs
else if (method == "unity.probuilder.vertex.select")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Select", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.move")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Move", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.weld")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Weld", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.collapse")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Collapse", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.connect")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Connect", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.split")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Split", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "Delete", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.fillHole")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "FillHole", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.getPositions")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "GetPositions", paramsJson, id);
}
else if (method == "unity.probuilder.vertex.setColor")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderVertexOperations, "SetColor", paramsJson, id);
}
// Edge Mode APIs
else if (method == "unity.probuilder.edge.select")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Select", paramsJson, id);
}
else if (method == "unity.probuilder.edge.extrude")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Extrude", paramsJson, id);
}
else if (method == "unity.probuilder.edge.subdivide")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Subdivide", paramsJson, id);
}
else if (method == "unity.probuilder.edge.bevel")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Bevel", paramsJson, id);
}
else if (method == "unity.probuilder.edge.bridge")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Bridge", paramsJson, id);
}
else if (method == "unity.probuilder.edge.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Delete", paramsJson, id);
}
else if (method == "unity.probuilder.edge.loop")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Loop", paramsJson, id);
}
else if (method == "unity.probuilder.edge.ring")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Ring", paramsJson, id);
}
else if (method == "unity.probuilder.edge.connect")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Connect", paramsJson, id);
}
else if (method == "unity.probuilder.edge.insertLoop")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "InsertLoop", paramsJson, id);
}
else if (method == "unity.probuilder.edge.fillHole")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "FillHole", paramsJson, id);
}
else if (method == "unity.probuilder.edge.offset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderEdgeOperations, "Offset", paramsJson, id);
}
// Face Mode APIs
else if (method == "unity.probuilder.face.select")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Select", paramsJson, id);
}
else if (method == "unity.probuilder.face.extrude")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Extrude", paramsJson, id);
}
else if (method == "unity.probuilder.face.inset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Inset", paramsJson, id);
}
else if (method == "unity.probuilder.face.detach")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Detach", paramsJson, id);
}
else if (method == "unity.probuilder.face.delete")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Delete", paramsJson, id);
}
else if (method == "unity.probuilder.face.duplicate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Duplicate", paramsJson, id);
}
else if (method == "unity.probuilder.face.merge")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Merge", paramsJson, id);
}
else if (method == "unity.probuilder.face.subdivide")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Subdivide", paramsJson, id);
}
else if (method == "unity.probuilder.face.triangulate")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Triangulate", paramsJson, id);
}
else if (method == "unity.probuilder.face.flip")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Flip", paramsJson, id);
}
else if (method == "unity.probuilder.face.conformNormals")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "ConformNormals", paramsJson, id);
}
else if (method == "unity.probuilder.face.loop")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Loop", paramsJson, id);
}
else if (method == "unity.probuilder.face.ring")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Ring", paramsJson, id);
}
else if (method == "unity.probuilder.face.setMaterial")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "SetMaterial", paramsJson, id);
}
else if (method == "unity.probuilder.face.setColor")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "SetColor", paramsJson, id);
}
else if (method == "unity.probuilder.face.offset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "Offset", paramsJson, id);
}
else if (method == "unity.probuilder.face.flipEdge")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderFaceOperations, "FlipEdge", paramsJson, id);
}
// Boolean Operations APIs
else if (method == "unity.probuilder.boolean.union")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderBooleanOperations, "Union", paramsJson, id);
}
else if (method == "unity.probuilder.boolean.intersection")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderBooleanOperations, "Intersection", paramsJson, id);
}
else if (method == "unity.probuilder.boolean.subtraction")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderBooleanOperations, "Subtraction", paramsJson, id);
}
else if (method == "unity.probuilder.smoothing.set")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderBooleanOperations, "SetSmoothingGroup", paramsJson, id);
}
else if (method == "unity.probuilder.smoothing.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderBooleanOperations, "GetSmoothingGroups", paramsJson, id);
}
else if (method == "unity.probuilder.smoothing.clear")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderBooleanOperations, "ClearSmoothing", paramsJson, id);
}
// UV Operations APIs
else if (method == "unity.probuilder.uv.setAutoUV")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderUVOperations, "SetAutoUV", paramsJson, id);
}
else if (method == "unity.probuilder.uv.reset")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderUVOperations, "ResetUV", paramsJson, id);
}
else if (method == "unity.probuilder.uv.get")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderUVOperations, "GetUVs", paramsJson, id);
}
else if (method == "unity.probuilder.uv.set")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderUVOperations, "SetUVs", paramsJson, id);
}
else if (method == "unity.probuilder.uv.projectPlanar")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderUVOperations, "ProjectPlanar", paramsJson, id);
}
else if (method == "unity.probuilder.uv.projectBox")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderUVOperations, "ProjectBox", paramsJson, id);
}
// Selection Operations APIs
else if (method == "unity.probuilder.selection.grow")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderSelectionOperations, "Grow", paramsJson, id);
}
else if (method == "unity.probuilder.selection.shrink")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderSelectionOperations, "Shrink", paramsJson, id);
}
else if (method == "unity.probuilder.selection.byMaterial")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderSelectionOperations, "SelectByMaterial", paramsJson, id);
}
else if (method == "unity.probuilder.selection.byColor")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderSelectionOperations, "SelectByColor", paramsJson, id);
}
else if (method == "unity.probuilder.selection.holes")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderSelectionOperations, "SelectHoles", paramsJson, id);
}
else if (method == "unity.probuilder.selection.invert")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderSelectionOperations, "Invert", paramsJson, id);
}
// PolyShape Operations APIs
else if (method == "unity.probuilder.polyshape.create")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderPolyShapeOperations, "Create", paramsJson, id);
}
else if (method == "unity.probuilder.polyshape.setControlPoints")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderPolyShapeOperations, "SetControlPoints", paramsJson, id);
}
else if (method == "unity.probuilder.polyshape.getControlPoints")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderPolyShapeOperations, "GetControlPoints", paramsJson, id);
}
else if (method == "unity.probuilder.polyshape.setExtrusion")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderPolyShapeOperations, "SetExtrusion", paramsJson, id);
}
else if (method == "unity.probuilder.polyshape.setFlipNormals")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderPolyShapeOperations, "SetFlipNormals", paramsJson, id);
}
// Optimization Operations APIs
else if (method == "unity.probuilder.optimize.collapseSharedVertices")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "CollapseSharedVertices", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.removeDegenerateTriangles")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "RemoveDegenerateTriangles", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.rebuildMesh")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "RebuildMesh", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.fitToSize")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "FitToSize", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.getMeshStats")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "GetMeshStats", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.analyzeMesh")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "AnalyzeMesh", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.setTargetVertexCount")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "SetTargetVertexCount", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.generateLOD")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "GenerateLOD", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.setTextureSize")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "SetTextureSize", paramsJson, id);
}
else if (method == "unity.probuilder.optimize.setPlatformSettings")
{
return PackageApiInvoker.Invoke(PackageAssemblies.ProBuilder, PackageTypes.ProBuilderOptimizationOperations, "SetPlatformSettings", paramsJson, id);
}
// ============ Lighting Core APIs ============
else if (method == "unity.lighting.createLight")
{
return LightingCore.CreateLight(paramsJson, id);
}
else if (method == "unity.lighting.deleteLight")
{
return LightingCore.DeleteLight(paramsJson, id);
}
else if (method == "unity.lighting.listLights")
{
return LightingCore.ListLights(paramsJson, id);
}
else if (method == "unity.lighting.setLightProperties")
{
return LightingCore.SetLightProperties(paramsJson, id);
}
else if (method == "unity.lighting.setColorTemperature")
{
return LightingCore.SetColorTemperature(paramsJson, id);
}
else if (method == "unity.lighting.setLightMode")
{
return LightingCore.SetLightMode(paramsJson, id);
}
else if (method == "unity.lighting.getLightInfo")
{
return LightingCore.GetLightInfo(paramsJson, id);
}
// ============ Lighting Cinematic APIs ============
else if (method == "unity.lighting.createThreePointLighting")
{
return LightingCinematic.CreateThreePointLighting(paramsJson, id);
}
else if (method == "unity.lighting.setKeyLight")
{
return LightingCinematic.SetKeyLight(paramsJson, id);
}
else if (method == "unity.lighting.setFillLight")
{
return LightingCinematic.SetFillLight(paramsJson, id);
}
else if (method == "unity.lighting.setRimLight")
{
return LightingCinematic.SetRimLight(paramsJson, id);
}
else if (method == "unity.lighting.setLightingRatio")
{
return LightingCinematic.SetLightingRatio(paramsJson, id);
}
else if (method == "unity.lighting.createFourPointLighting")
{
return LightingCinematic.CreateFourPointLighting(paramsJson, id);
}
else if (method == "unity.lighting.setPracticalLight")
{
return LightingCinematic.SetPracticalLight(paramsJson, id);
}
// ============ Lighting Mood APIs ============
else if (method == "unity.lighting.applyMoodPreset")
{
return LightingMood.ApplyMoodPreset(paramsJson, id);
}
else if (method == "unity.lighting.setTimeOfDay")
{
return LightingMood.SetTimeOfDay(paramsJson, id);
}
else if (method == "unity.lighting.setColorHarmony")
{
return LightingMood.SetColorHarmony(paramsJson, id);
}
else if (method == "unity.lighting.setAmbientLight" || method == "unity.lighting.setAmbient")
{
return LightingMood.SetAmbientLight(paramsJson, id);
}
else if (method == "unity.lighting.setSkybox")
{
return LightingMood.SetSkybox(paramsJson, id);
}
else if (method == "unity.lighting.setFog")
{
return LightingMood.SetFog(paramsJson, id);
}
else if (method == "unity.lighting.listMoodPresets")
{
return LightingMood.ListMoodPresets(paramsJson, id);
}
// ============ Lighting GI APIs ============
else if (method == "unity.lighting.setGIMode")
{
return LightingGI.SetGIMode(paramsJson, id);
}
else if (method == "unity.lighting.bakeLighting" || method == "unity.lighting.bake")
{
return LightingGI.BakeLighting(paramsJson, id);
}
else if (method == "unity.lighting.clearBakedData")
{
return LightingGI.ClearBakedData(paramsJson, id);
}
else if (method == "unity.lighting.setLightmapSettings")
{
return LightingGI.SetLightmapSettings(paramsJson, id);
}
else if (method == "unity.lighting.createLightProbeGroup")
{
return LightingGI.CreateLightProbeGroup(paramsJson, id);
}
else if (method == "unity.lighting.autoPlaceLightProbes")
{
return LightingGI.AutoPlaceLightProbes(paramsJson, id);
}
else if (method == "unity.lighting.enableAPV")
{
return LightingGI.EnableAPV(paramsJson, id);
}
else if (method == "unity.lighting.getGIStatus")
{
return LightingGI.GetGIStatus(paramsJson, id);
}
else if (method == "unity.lighting.cancelBake")
{
return LightingGI.CancelBake(paramsJson, id);
}
// ============ Lighting Reflection APIs ============
else if (method == "unity.lighting.createReflectionProbe")
{
return LightingReflection.CreateReflectionProbe(paramsJson, id);
}
else if (method == "unity.lighting.setReflectionProbeType")
{
return LightingReflection.SetReflectionProbeType(paramsJson, id);
}
else if (method == "unity.lighting.setReflectionProbeSettings")
{
return LightingReflection.SetReflectionProbeSettings(paramsJson, id);
}
else if (method == "unity.lighting.bakeReflectionProbes")
{
return LightingReflection.BakeReflectionProbes(paramsJson, id);
}
else if (method == "unity.lighting.autoPlaceReflectionProbes")
{
return LightingReflection.AutoPlaceReflectionProbes(paramsJson, id);
}
else if (method == "unity.lighting.setReflectionIntensity")
{
return LightingReflection.SetReflectionIntensity(paramsJson, id);
}
else if (method == "unity.lighting.listReflectionProbes")
{
return LightingReflection.ListReflectionProbes(paramsJson, id);
}
// ============ Lighting Project Settings APIs ============
else if (method == "unity.lighting.detectRenderPipeline")
{
return LightingProjectSettings.DetectRenderPipeline(paramsJson, id);
}
else if (method == "unity.lighting.optimizeForScale")
{
return LightingProjectSettings.OptimizeForScale(paramsJson, id);
}
else if (method == "unity.lighting.setQualityPreset")
{
return LightingProjectSettings.SetQualityPreset(paramsJson, id);
}
else if (method == "unity.lighting.analyzeScene")
{
return LightingProjectSettings.AnalyzeScene(paramsJson, id);
}
else if (method == "unity.lighting.getOptimizationSuggestions")
{
return LightingProjectSettings.GetOptimizationSuggestions(paramsJson, id);
}
else if (method == "unity.lighting.listScalePresets")
{
return LightingProjectSettings.ListScalePresets(paramsJson, id);
}
// ============ API Logger APIs ============
else if (method == "unity.apilog.getLogs")
{
return McpApiLogger.GetLogs(paramsJson, id);
}
else if (method == "unity.apilog.getErrors")
{
return McpApiLogger.GetErrors(paramsJson, id);
}
else if (method == "unity.apilog.getStats")
{
return McpApiLogger.GetStats(paramsJson, id);
}
else if (method == "unity.apilog.clear")
{
return McpApiLogger.ClearLogs(paramsJson, id);
}
else if (method == "unity.apilog.configure")
{
return McpApiLogger.Configure(paramsJson, id);
}
else if (method == "unity.apilog.getFilePath")
{
return McpApiLogger.GetLogFilePath(paramsJson, id);
}
#if UNITY_2021_2_OR_NEWER
// ============ UIToolkit Asset Management APIs ============
else if (method == "unity.uitoolkit.asset.createUxml")
{
return UIToolkitAssetManager.CreateUxml(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.getUxmlContent")
{
return UIToolkitAssetManager.GetUxmlContent(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.updateUxml")
{
return UIToolkitAssetManager.UpdateUxml(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.createUss")
{
return UIToolkitAssetManager.CreateUss(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.getUssContent")
{
return UIToolkitAssetManager.GetUssContent(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.updateUss")
{
return UIToolkitAssetManager.UpdateUss(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.linkStyleSheet")
{
return UIToolkitAssetManager.LinkStyleSheet(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.createPanelSettings")
{
return UIToolkitAssetManager.CreatePanelSettings(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.getPanelSettings")
{
return UIToolkitAssetManager.GetPanelSettings(paramsJson, id);
}
else if (method == "unity.uitoolkit.asset.updatePanelSettings")
{
return UIToolkitAssetManager.UpdatePanelSettings(paramsJson, id);
}
// ============ UIToolkit Element Builder APIs ============
else if (method == "unity.uitoolkit.element.add")
{
return UIToolkitElementBuilder.AddElement(paramsJson, id);
}
else if (method == "unity.uitoolkit.element.remove")
{
return UIToolkitElementBuilder.RemoveElement(paramsJson, id);
}
else if (method == "unity.uitoolkit.element.update")
{
return UIToolkitElementBuilder.UpdateElement(paramsJson, id);
}
else if (method == "unity.uitoolkit.element.query")
{
return UIToolkitElementBuilder.QueryElement(paramsJson, id);
}
else if (method == "unity.uitoolkit.element.getHierarchy")
{
return UIToolkitElementBuilder.GetHierarchy(paramsJson, id);
}
else if (method == "unity.uitoolkit.element.move")
{
return UIToolkitElementBuilder.MoveElement(paramsJson, id);
}
else if (method == "unity.uitoolkit.element.duplicate")
{
return UIToolkitElementBuilder.DuplicateElement(paramsJson, id);
}
// ============ UIToolkit ViewModel Generator APIs (Phase 8.2) ============
else if (method == "unity.uitoolkit.viewmodel.create")
{
return UIToolkitViewModelGenerator.CreateViewModel(paramsJson, id);
}
else if (method == "unity.uitoolkit.viewmodel.addProperty")
{
return UIToolkitViewModelGenerator.AddProperty(paramsJson, id);
}
else if (method == "unity.uitoolkit.viewmodel.addCommand")
{
return UIToolkitViewModelGenerator.AddCommand(paramsJson, id);
}
else if (method == "unity.uitoolkit.viewmodel.createFromInterface")
{
return UIToolkitViewModelGenerator.CreateFromInterface(paramsJson, id);
}
else if (method == "unity.uitoolkit.viewmodel.generateScript")
{
return UIToolkitViewModelGenerator.GenerateScript(paramsJson, id);
}
else if (method == "unity.uitoolkit.viewmodel.list")
{
return UIToolkitViewModelGenerator.ListViewModels(paramsJson, id);
}
// ============ UIToolkit Binding Builder APIs (Phase 8.3) ============
else if (method == "unity.uitoolkit.binding.create")
{
return UIToolkitBindingBuilder.CreateBinding(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.add")
{
return UIToolkitBindingBuilder.AddBinding(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.bindCommand")
{
return UIToolkitBindingBuilder.BindCommand(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.bindTwoWay")
{
return UIToolkitBindingBuilder.BindTwoWay(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.bindVisibility")
{
return UIToolkitBindingBuilder.BindVisibility(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.bindEnabled")
{
return UIToolkitBindingBuilder.BindEnabled(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.unbind")
{
return UIToolkitBindingBuilder.Unbind(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.generateScript")
{
return UIToolkitBindingBuilder.GenerateBindingScript(paramsJson, id);
}
else if (method == "unity.uitoolkit.binding.list")
{
return UIToolkitBindingBuilder.ListBindings(paramsJson, id);
}
// ============ UIToolkit Style Operations APIs (Phase 3) ============
else if (method == "unity.uitoolkit.style.addRule")
{
return UIToolkitStyleOperations.AddRule(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.updateRule")
{
return UIToolkitStyleOperations.UpdateRule(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.removeRule")
{
return UIToolkitStyleOperations.RemoveRule(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.getRule")
{
return UIToolkitStyleOperations.GetRule(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.setProperty")
{
return UIToolkitStyleOperations.SetProperty(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.removeProperty")
{
return UIToolkitStyleOperations.RemoveProperty(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.setVariable")
{
return UIToolkitStyleOperations.SetVariable(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.getVariables")
{
return UIToolkitStyleOperations.GetVariables(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.setInlineStyle")
{
return UIToolkitStyleOperations.SetInlineStyle(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.addClass")
{
return UIToolkitStyleOperations.AddClass(paramsJson, id);
}
else if (method == "unity.uitoolkit.style.removeClass")
{
return UIToolkitStyleOperations.RemoveClass(paramsJson, id);
}
// ============ UIToolkit Component Templates APIs (Phase 4) ============
else if (method == "unity.uitoolkit.template.createTextField")
{
return UIToolkitComponentTemplates.CreateTextField(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createButton")
{
return UIToolkitComponentTemplates.CreateButton(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createToggle")
{
return UIToolkitComponentTemplates.CreateToggle(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createSlider")
{
return UIToolkitComponentTemplates.CreateSlider(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createDropdown")
{
return UIToolkitComponentTemplates.CreateDropdown(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createCard")
{
return UIToolkitComponentTemplates.CreateCard(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createScrollView")
{
return UIToolkitComponentTemplates.CreateScrollView(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createFoldout")
{
return UIToolkitComponentTemplates.CreateFoldout(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createTabView")
{
return UIToolkitComponentTemplates.CreateTabView(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createListView")
{
return UIToolkitComponentTemplates.CreateListView(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createTreeView")
{
return UIToolkitComponentTemplates.CreateTreeView(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createProgressBar")
{
return UIToolkitComponentTemplates.CreateProgressBar(paramsJson, id);
}
else if (method == "unity.uitoolkit.template.createForm")
{
return UIToolkitComponentTemplates.CreateForm(paramsJson, id);
}
// ============ UIToolkit Layout Helpers APIs (Phase 5) ============
else if (method == "unity.uitoolkit.layout.createFlexContainer")
{
return UIToolkitLayoutHelpers.CreateFlexContainer(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createFlexRow")
{
return UIToolkitLayoutHelpers.CreateFlexRow(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createFlexColumn")
{
return UIToolkitLayoutHelpers.CreateFlexColumn(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createCenter")
{
return UIToolkitLayoutHelpers.CreateCenter(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createSpacer")
{
return UIToolkitLayoutHelpers.CreateSpacer(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createGrid")
{
return UIToolkitLayoutHelpers.CreateGrid(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createGridItem")
{
return UIToolkitLayoutHelpers.CreateGridItem(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createScreenLayout")
{
return UIToolkitLayoutHelpers.CreateScreenLayout(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.createAbsolutePosition")
{
return UIToolkitLayoutHelpers.CreateAbsolutePosition(paramsJson, id);
}
else if (method == "unity.uitoolkit.layout.generateLayoutStyles")
{
return UIToolkitLayoutHelpers.GenerateLayoutStyles(paramsJson, id);
}
// ============ UIToolkit Runtime Operations APIs (Phase 6) ============
else if (method == "unity.uitoolkit.runtime.createUIDocument")
{
return UIToolkitRuntimeOperations.CreateUIDocument(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.getUIDocument")
{
return UIToolkitRuntimeOperations.GetUIDocument(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.listUIDocuments")
{
return UIToolkitRuntimeOperations.ListUIDocuments(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.queryElement")
{
return UIToolkitRuntimeOperations.QueryElement(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.getHierarchy")
{
return UIToolkitRuntimeOperations.GetRuntimeHierarchy(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.setElementText")
{
return UIToolkitRuntimeOperations.SetElementText(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.setElementValue")
{
return UIToolkitRuntimeOperations.SetElementValue(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.setElementVisibility")
{
return UIToolkitRuntimeOperations.SetElementVisibility(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.setElementEnabled")
{
return UIToolkitRuntimeOperations.SetElementEnabled(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.addRuntimeClass")
{
return UIToolkitRuntimeOperations.AddRuntimeClass(paramsJson, id);
}
else if (method == "unity.uitoolkit.runtime.removeRuntimeClass")
{
return UIToolkitRuntimeOperations.RemoveRuntimeClass(paramsJson, id);
}
// ============ UIToolkit Scene Setup APIs ============
else if (method == "unity.uitoolkit.scene.setupComplete")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.SetupComplete(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.setTargetScene")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.SetTargetSceneApi(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.getLoadedScenes")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.GetLoadedScenes(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.createUIGameObject")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.CreateUIGameObject(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.configureUIDocument")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.ConfigureUIDocument(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.saveAsPrefab")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.SaveAsPrefab(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.instantiateUIPrefab")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.InstantiateUIPrefab(paramsJson, id);
}
else if (method == "unity.uitoolkit.scene.getUIDocumentsInScene")
{
return UIToolkit.SceneSetup.UIToolkitSceneSetup.GetUIDocumentsInScene(paramsJson, id);
}
// ============ UIToolkit Game Presets APIs (Phase 7) ============
else if (method == "unity.uitoolkit.preset.createHUD")
{
return UIToolkitGamePresets.CreateHUD(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createHealthBar")
{
return UIToolkitGamePresets.CreateHealthBar(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createInventory")
{
return UIToolkitGamePresets.CreateInventory(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createQuickSlots")
{
return UIToolkitGamePresets.CreateQuickSlots(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createSkillBar")
{
return UIToolkitGamePresets.CreateSkillBar(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createDialogBox")
{
return UIToolkitGamePresets.CreateDialogBox(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createVirtualJoystick")
{
return UIToolkitGamePresets.CreateVirtualJoystick(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createDPad")
{
return UIToolkitGamePresets.CreateDPad(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createActionButtons")
{
return UIToolkitGamePresets.CreateActionButtons(paramsJson, id);
}
// ============ UIToolkit Navigation Presets APIs (Phase 7) ============
else if (method == "unity.uitoolkit.preset.createTabBar")
{
return UIToolkitNavigationPresets.CreateTabBar(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createBottomNavigation")
{
return UIToolkitNavigationPresets.CreateBottomNavigation(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createSidebar")
{
return UIToolkitNavigationPresets.CreateSidebar(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createBreadcrumb")
{
return UIToolkitNavigationPresets.CreateBreadcrumb(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createPagination")
{
return UIToolkitNavigationPresets.CreatePagination(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createContextMenu")
{
return UIToolkitNavigationPresets.CreateContextMenu(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createDropdownMenu")
{
return UIToolkitNavigationPresets.CreateDropdownMenu(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createNavbar")
{
return UIToolkitNavigationPresets.CreateNavbar(paramsJson, id);
}
// ============ UIToolkit Notification Presets APIs (Phase 7) ============
else if (method == "unity.uitoolkit.preset.createPopup")
{
return UIToolkitNotificationPresets.CreatePopup(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createConfirmDialog")
{
return UIToolkitNotificationPresets.CreateConfirmDialog(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createBanner")
{
return UIToolkitNotificationPresets.CreateBanner(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createToast")
{
return UIToolkitNotificationPresets.CreateToast(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createToastContainer")
{
return UIToolkitNotificationPresets.CreateToastContainer(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createAlertBar")
{
return UIToolkitNotificationPresets.CreateAlertBar(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createTooltip")
{
return UIToolkitNotificationPresets.CreateTooltip(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createBadge")
{
return UIToolkitNotificationPresets.CreateBadge(paramsJson, id);
}
else if (method == "unity.uitoolkit.preset.createLoadingOverlay")
{
return UIToolkitNotificationPresets.CreateLoadingOverlay(paramsJson, id);
}
// ============ UIToolkit DI Container APIs (Phase 8.1) ============
else if (method == "unity.uitoolkit.di.createContainer")
{
return UIToolkitDIContainer.CreateContainer(paramsJson, id);
}
else if (method == "unity.uitoolkit.di.registerService")
{
return UIToolkitDIContainer.RegisterService(paramsJson, id);
}
else if (method == "unity.uitoolkit.di.unregisterService")
{
return UIToolkitDIContainer.UnregisterService(paramsJson, id);
}
else if (method == "unity.uitoolkit.di.listServices")
{
return UIToolkitDIContainer.ListServices(paramsJson, id);
}
else if (method == "unity.uitoolkit.di.generateContainerScript")
{
return UIToolkitDIContainer.GenerateContainerScript(paramsJson, id);
}
// ============ UIToolkit Event Bus APIs (Phase 8.4) ============
else if (method == "unity.uitoolkit.eventbus.create")
{
return UIToolkitEventBus.CreateEventBus(paramsJson, id);
}
else if (method == "unity.uitoolkit.eventbus.defineEvent")
{
return UIToolkitEventBus.DefineEvent(paramsJson, id);
}
else if (method == "unity.uitoolkit.eventbus.removeEvent")
{
return UIToolkitEventBus.RemoveEvent(paramsJson, id);
}
else if (method == "unity.uitoolkit.eventbus.listEvents")
{
return UIToolkitEventBus.ListEvents(paramsJson, id);
}
else if (method == "unity.uitoolkit.eventbus.generateScript")
{
return UIToolkitEventBus.GenerateScript(paramsJson, id);
}
// ============ UIToolkit State Manager APIs (Phase 8.5) ============
else if (method == "unity.uitoolkit.state.createStore")
{
return UIToolkitStateManager.CreateStore(paramsJson, id);
}
else if (method == "unity.uitoolkit.state.addSlice")
{
return UIToolkitStateManager.AddSlice(paramsJson, id);
}
else if (method == "unity.uitoolkit.state.addAction")
{
return UIToolkitStateManager.AddAction(paramsJson, id);
}
else if (method == "unity.uitoolkit.state.removeSlice")
{
return UIToolkitStateManager.RemoveSlice(paramsJson, id);
}
else if (method == "unity.uitoolkit.state.listSlices")
{
return UIToolkitStateManager.ListSlices(paramsJson, id);
}
else if (method == "unity.uitoolkit.state.generateStoreScript")
{
return UIToolkitStateManager.GenerateStoreScript(paramsJson, id);
}
else if (method == "unity.uitoolkit.state.createSelector")
{
return UIToolkitStateManager.CreateSelector(paramsJson, id);
}
// ============ UIToolkit Animation APIs (Phase 9) ============
else if (method == "unity.uitoolkit.animation.define")
{
return UIToolkitAnimationController.DefineAnimation(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.addKeyframe")
{
return UIToolkitAnimationController.AddKeyframe(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.remove")
{
return UIToolkitAnimationController.RemoveAnimation(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.list")
{
return UIToolkitAnimationController.ListAnimations(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.generateTransitionUSS")
{
return UIToolkitAnimationController.GenerateTransitionUSS(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.createFade")
{
return UIToolkitAnimationController.CreateFadeAnimation(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.createSlide")
{
return UIToolkitAnimationController.CreateSlideAnimation(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.createScale")
{
return UIToolkitAnimationController.CreateScaleAnimation(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.createRotate")
{
return UIToolkitAnimationController.CreateRotateAnimation(paramsJson, id);
}
else if (method == "unity.uitoolkit.animation.applyToElement")
{
return UIToolkitAnimationController.ApplyToElement(paramsJson, id);
}
// ============ UIToolkit Theme Manager APIs (Phase 10) ============
else if (method == "unity.uitoolkit.theme.create")
{
return UIToolkitThemeManager.CreateTheme(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.setColor")
{
return UIToolkitThemeManager.SetColor(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.setSpacing")
{
return UIToolkitThemeManager.SetSpacing(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.get")
{
return UIToolkitThemeManager.GetTheme(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.list")
{
return UIToolkitThemeManager.ListThemes(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.delete")
{
return UIToolkitThemeManager.DeleteTheme(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.generateUSS")
{
return UIToolkitThemeManager.GenerateUSS(paramsJson, id);
}
else if (method == "unity.uitoolkit.theme.generateDarkModeUSS")
{
return UIToolkitThemeManager.GenerateDarkModeUSS(paramsJson, id);
}
// ============ UIToolkit Responsive Manager APIs (Phase 11) ============
else if (method == "unity.uitoolkit.responsive.setBreakpoint")
{
return UIToolkitResponsiveManager.SetBreakpoint(paramsJson, id);
}
else if (method == "unity.uitoolkit.responsive.getBreakpoints")
{
return UIToolkitResponsiveManager.GetBreakpoints(paramsJson, id);
}
else if (method == "unity.uitoolkit.responsive.removeBreakpoint")
{
return UIToolkitResponsiveManager.RemoveBreakpoint(paramsJson, id);
}
else if (method == "unity.uitoolkit.responsive.createRuleSet")
{
return UIToolkitResponsiveManager.CreateRuleSet(paramsJson, id);
}
else if (method == "unity.uitoolkit.responsive.addBreakpointStyle")
{
return UIToolkitResponsiveManager.AddBreakpointStyle(paramsJson, id);
}
else if (method == "unity.uitoolkit.responsive.generateUSS")
{
return UIToolkitResponsiveManager.GenerateUSS(paramsJson, id);
}
else if (method == "unity.uitoolkit.responsive.generateHelperScript")
{
return UIToolkitResponsiveManager.GenerateHelperScript(paramsJson, id);
}
// ============ UIToolkit Accessibility Manager APIs (Phase 12) ============
else if (method == "unity.uitoolkit.accessibility.setAriaLabel")
{
return UIToolkitAccessibilityManager.SetAriaLabel(paramsJson, id);
}
else if (method == "unity.uitoolkit.accessibility.setTabIndex")
{
return UIToolkitAccessibilityManager.SetTabIndex(paramsJson, id);
}
else if (method == "unity.uitoolkit.accessibility.setRole")
{
return UIToolkitAccessibilityManager.SetRole(paramsJson, id);
}
else if (method == "unity.uitoolkit.accessibility.generateFocusStyles")
{
return UIToolkitAccessibilityManager.GenerateFocusStyles(paramsJson, id);
}
else if (method == "unity.uitoolkit.accessibility.checkColorContrast")
{
return UIToolkitAccessibilityManager.CheckColorContrast(paramsJson, id);
}
else if (method == "unity.uitoolkit.accessibility.generateScreenReaderHelper")
{
return UIToolkitAccessibilityManager.GenerateScreenReaderHelper(paramsJson, id);
}
else if (method == "unity.uitoolkit.accessibility.generateHighContrastUSS")
{
return UIToolkitAccessibilityManager.GenerateHighContrastUSS(paramsJson, id);
}
// ============ UIToolkit Localization Manager APIs (Phase 13) ============
else if (method == "unity.uitoolkit.localization.addLocale")
{
return UIToolkitLocalizationManager.AddLocale(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.removeLocale")
{
return UIToolkitLocalizationManager.RemoveLocale(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.listLocales")
{
return UIToolkitLocalizationManager.ListLocales(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.setCurrentLocale")
{
return UIToolkitLocalizationManager.SetCurrentLocale(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.addTranslation")
{
return UIToolkitLocalizationManager.AddTranslation(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.addTranslations")
{
return UIToolkitLocalizationManager.AddTranslations(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.getTranslation")
{
return UIToolkitLocalizationManager.GetTranslation(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.generateScript")
{
return UIToolkitLocalizationManager.GenerateLocalizationScript(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.exportToJson")
{
return UIToolkitLocalizationManager.ExportToJson(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.importFromJson")
{
return UIToolkitLocalizationManager.ImportFromJson(paramsJson, id);
}
else if (method == "unity.uitoolkit.localization.generateRTLStyles")
{
return UIToolkitLocalizationManager.GenerateRTLStyles(paramsJson, id);
}
// ============ UIToolkit Debug Tools APIs (Phase 14) ============
else if (method == "unity.uitoolkit.debug.analyzeUXML")
{
return UIToolkitDebugTools.AnalyzeUXML(paramsJson, id);
}
else if (method == "unity.uitoolkit.debug.analyzeUSS")
{
return UIToolkitDebugTools.AnalyzeUSS(paramsJson, id);
}
else if (method == "unity.uitoolkit.debug.validateUXML")
{
return UIToolkitDebugTools.ValidateUXML(paramsJson, id);
}
else if (method == "unity.uitoolkit.debug.validateUSS")
{
return UIToolkitDebugTools.ValidateUSS(paramsJson, id);
}
else if (method == "unity.uitoolkit.debug.generateDebugOverlay")
{
return UIToolkitDebugTools.GenerateDebugOverlay(paramsJson, id);
}
else if (method == "unity.uitoolkit.debug.generateDebugScript")
{
return UIToolkitDebugTools.GenerateDebugScript(paramsJson, id);
}
else if (method == "unity.uitoolkit.debug.profileUI")
{
return UIToolkitDebugTools.ProfileUI(paramsJson, id);
}
// ============ UIToolkit Asset Dependencies APIs (Phase 15) ============
else if (method == "unity.uitoolkit.dependencies.analyze")
{
return UIToolkitAssetDependencyManager.AnalyzeDependencies(paramsJson, id);
}
else if (method == "unity.uitoolkit.dependencies.findReferences")
{
return UIToolkitAssetDependencyManager.FindReferences(paramsJson, id);
}
else if (method == "unity.uitoolkit.dependencies.findUnused")
{
return UIToolkitAssetDependencyManager.FindUnusedAssets(paramsJson, id);
}
else if (method == "unity.uitoolkit.dependencies.generateGraph")
{
return UIToolkitAssetDependencyManager.GenerateDependencyGraph(paramsJson, id);
}
else if (method == "unity.uitoolkit.dependencies.analyzeBundle")
{
return UIToolkitAssetDependencyManager.AnalyzeBundle(paramsJson, id);
}
#endif // UNITY_2021_2_OR_NEWER
// ============ Compositing APIs (Reflection-based) ============
else if (method == "unity.compositing.setLook")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Compositing, PackageTypes.CompositingController, "SetLook", paramsJson, id);
}
else if (method == "unity.compositing.setMood")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Compositing, PackageTypes.CompositingController, "SetMood", paramsJson, id);
}
else if (method == "unity.compositing.lockExposure")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Compositing, PackageTypes.CompositingController, "LockExposure", paramsJson, id);
}
else if (method == "unity.compositing.getLook")
{
return PackageApiInvoker.Invoke(PackageAssemblies.Compositing, PackageTypes.CompositingController, "GetLook", paramsJson, id);
}
// ============================================
// Asset Import APIs (Reflection-based)
// TextureImporter, AudioImporter, ModelImporter, VideoClipImporter
// ============================================
else if (method.StartsWith("unity.import."))
{
return PackageApiInvoker.InvokeWithParams(PackageAssemblies.AssetImport, PackageTypes.AssetImportController, "HandleRequest", method, paramsJson, id);
}
else
{
return JsonRpcResponseHelper.MethodNotFound(method, id);
}
}
// Helper methods to extract JSON fields
private int ExtractIntParam(string paramsJson, string paramName, int defaultValue)
{
try
{
string pattern = $"\"{paramName}\"\\s*:\\s*(\\d+)";
var match = System.Text.RegularExpressions.Regex.Match(paramsJson, pattern);
if (match.Success && int.TryParse(match.Groups[1].Value, out int value))
{
return value;
}
}
catch (System.Exception e)
{
Debug.LogError($"Error extracting parameter '{paramName}': {e.Message}");
}
return defaultValue;
}
private string ExtractJsonField(string json, string fieldName)
{
try
{
string pattern = $"\"{fieldName}\"\\s*:\\s*\"([^\"]+)\"";
var match = System.Text.RegularExpressions.Regex.Match(json, pattern);
if (match.Success)
{
return match.Groups[1].Value;
}
// Try without quotes (for numbers)
pattern = $"\"{fieldName}\"\\s*:\\s*([^,}}]+)";
match = System.Text.RegularExpressions.Regex.Match(json, pattern);
if (match.Success)
{
return match.Groups[1].Value.Trim();
}
}
catch (Exception e)
{
Debug.LogError($"[MCP HTTP] Error extracting field '{fieldName}': {e.Message}");
}
return null;
}
private string ExtractJsonObject(string json, string fieldName)
{
try
{
int fieldIndex = json.IndexOf($"\"{fieldName}\"");
if (fieldIndex == -1) return null;
int colonIndex = json.IndexOf(':', fieldIndex);
if (colonIndex == -1) return null;
// Skip whitespace after colon
int startIndex = colonIndex + 1;
while (startIndex < json.Length && char.IsWhiteSpace(json[startIndex]))
{
startIndex++;
}
if (startIndex >= json.Length) return null;
// Check if it's an object or array
char startChar = json[startIndex];
if (startChar == '{')
{
// Find matching closing brace
int braceCount = 1;
int endIndex = startIndex + 1;
while (endIndex < json.Length && braceCount > 0)
{
if (json[endIndex] == '{') braceCount++;
else if (json[endIndex] == '}') braceCount--;
endIndex++;
}
return json.Substring(startIndex, endIndex - startIndex);
}
}
catch (Exception e)
{
Debug.LogError($"[MCP HTTP] Error extracting object '{fieldName}': {e.Message}");
}
return null;
}
/// <summary>
/// Cleanup method to be called when shutting down.
/// </summary>
public void Cleanup()
{
StopServer();
}
#region API Discovery (tools/list)
/// <summary>
/// MCP仕様準拠のtools/listエンドポイント
/// </summary>
private static string GetToolsList(string paramsJson, object id)
{
try
{
string category = null;
string search = null;
if (!string.IsNullOrEmpty(paramsJson) && paramsJson != "{}")
{
var categoryMatch = System.Text.RegularExpressions.Regex.Match(paramsJson, "\"category\"\\s*:\\s*\"([^\"]+)\"");
if (categoryMatch.Success)
{
category = categoryMatch.Groups[1].Value;
}
var searchMatch = System.Text.RegularExpressions.Regex.Match(paramsJson, "\"search\"\\s*:\\s*\"([^\"]+)\"");
if (searchMatch.Success)
{
search = searchMatch.Groups[1].Value;
}
}
List<ApiDefinition> apis;
if (!string.IsNullOrEmpty(search))
{
apis = ApiRegistry.SearchApis(search);
}
else if (!string.IsNullOrEmpty(category))
{
apis = ApiRegistry.GetApisByCategory(category);
}
else
{
apis = ApiRegistry.GetAllApis();
}
var sb = new System.Text.StringBuilder();
sb.Append("{\"tools\":[");
for (int i = 0; i < apis.Count; i++)
{
if (i > 0) sb.Append(",");
sb.Append(FormatToolDefinition(apis[i]));
}
sb.Append("],\"totalCount\":");
sb.Append(apis.Count);
sb.Append(",\"categories\":[");
var categories = ApiRegistry.GetCategories();
for (int i = 0; i < categories.Count; i++)
{
if (i > 0) sb.Append(",");
sb.Append("\"");
sb.Append(categories[i]);
sb.Append("\"");
}
sb.Append("]");
// エディション情報を追加
var editionSummary = ApiRegistry.GetEditionSummary();
sb.Append(",\"edition\":{");
sb.Append("\"current\":\"");
sb.Append(editionSummary.currentEdition);
sb.Append("\",\"availableApis\":");
sb.Append(editionSummary.totalApis);
sb.Append(",\"publicApis\":");
sb.Append(editionSummary.publicApis);
sb.Append(",\"standardApis\":");
sb.Append(editionSummary.standardApis);
sb.Append(",\"proApis\":");
sb.Append(editionSummary.proApis);
sb.Append("}}");
return JsonRpcResponseHelper.SuccessJson(sb.ToString(), id);
}
catch (Exception e)
{
return JsonRpcResponseHelper.ErrorMessage($"Failed to get tools list: {e.Message}", id);
}
}
private static string GetToolsCategories(object id)
{
try
{
var categories = ApiRegistry.GetCategories();
var categoryInfos = new List<string>();
foreach (var cat in categories)
{
var apis = ApiRegistry.GetApisByCategory(cat);
categoryInfos.Add($"{{\"name\":\"{cat}\",\"count\":{apis.Count}}}");
}
var result = "{\"categories\":[" + string.Join(",", categoryInfos) + "]}";
return JsonRpcResponseHelper.SuccessJson(result, id);
}
catch (Exception e)
{
return JsonRpcResponseHelper.ErrorMessage($"Failed to get categories: {e.Message}", id);
}
}
private static string FormatToolDefinition(ApiDefinition api)
{
var sb = new System.Text.StringBuilder();
sb.Append("{");
sb.Append($"\"name\":\"{EscapeJsonString(api.name)}\",");
sb.Append($"\"description\":\"{EscapeJsonString(api.description)}\",");
sb.Append($"\"category\":\"{EscapeJsonString(api.category)}\"");
if (api.inputSchema != null)
{
sb.Append(",\"inputSchema\":{");
sb.Append($"\"type\":\"{api.inputSchema.type}\"");
if (api.inputSchema.properties != null && api.inputSchema.properties.Count > 0)
{
sb.Append(",\"properties\":{");
bool first = true;
foreach (var prop in api.inputSchema.properties)
{
if (!first) sb.Append(",");
first = false;
sb.Append($"\"{prop.Key}\":{{\"type\":\"{prop.Value.type}\",\"description\":\"{EscapeJsonString(prop.Value.description)}\"}}");
}
sb.Append("}");
}
if (api.inputSchema.required != null && api.inputSchema.required.Length > 0)
{
sb.Append(",\"required\":[");
for (int i = 0; i < api.inputSchema.required.Length; i++)
{
if (i > 0) sb.Append(",");
sb.Append($"\"{api.inputSchema.required[i]}\"");
}
sb.Append("]");
}
sb.Append("}");
}
if (api.useCases != null && api.useCases.Length > 0)
{
sb.Append(",\"useCases\":[");
for (int i = 0; i < api.useCases.Length; i++)
{
if (i > 0) sb.Append(",");
sb.Append($"\"{EscapeJsonString(api.useCases[i])}\"");
}
sb.Append("]");
}
if (api.relatedApis != null && api.relatedApis.Length > 0)
{
sb.Append(",\"relatedApis\":[");
for (int i = 0; i < api.relatedApis.Length; i++)
{
if (i > 0) sb.Append(",");
sb.Append($"\"{api.relatedApis[i]}\"");
}
sb.Append("]");
}
sb.Append("}");
return sb.ToString();
}
private static string EscapeJsonString(string s)
{
if (string.IsNullOrEmpty(s)) return "";
return s.Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("\n", "\\n").Replace("\r", "\\r").Replace("\t", "\\t");
}
#endregion
}
}