Files
coplaydev--unity-mcp/MCPForUnity/Editor/Tools/Profiler/Operations/ObjectMemoryOps.cs
T
2026-07-13 12:49:17 +08:00

56 lines
2.0 KiB
C#

using System;
using MCPForUnity.Editor.Helpers;
using Newtonsoft.Json.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.Profiling;
using UProfiler = UnityEngine.Profiling.Profiler;
namespace MCPForUnity.Editor.Tools.Profiler
{
internal static class ObjectMemoryOps
{
internal static object GetObjectMemory(JObject @params)
{
var p = new ToolParams(@params);
var objectPathResult = p.GetRequired("object_path");
if (!objectPathResult.IsSuccess)
return new ErrorResponse(objectPathResult.ErrorMessage);
string objectPath = objectPathResult.Value;
// Try scene hierarchy first
var go = GameObject.Find(objectPath);
if (go != null)
{
long bytes = UProfiler.GetRuntimeMemorySizeLong(go);
return new SuccessResponse($"Memory for '{objectPath}'.", new
{
object_name = go.name,
object_type = go.GetType().Name,
size_bytes = bytes,
size_mb = Math.Round(bytes / (1024.0 * 1024.0), 3),
source = "scene_hierarchy",
});
}
// Try asset path
var asset = AssetDatabase.LoadAssetAtPath<UnityEngine.Object>(objectPath);
if (asset != null)
{
long bytes = UProfiler.GetRuntimeMemorySizeLong(asset);
return new SuccessResponse($"Memory for '{objectPath}'.", new
{
object_name = asset.name,
object_type = asset.GetType().Name,
size_bytes = bytes,
size_mb = Math.Round(bytes / (1024.0 * 1024.0), 3),
source = "asset_database",
});
}
return new ErrorResponse($"Object not found at path '{objectPath}'. Try a scene hierarchy path (e.g. /Player/Mesh) or an asset path (e.g. Assets/Textures/hero.png).");
}
}
}