From 21fbac60c21d376af9f788dff8d002aaed529aba Mon Sep 17 00:00:00 2001 From: Scriptwonder <1300285021@qq.com> Date: Sun, 13 Jul 2025 14:33:06 -0400 Subject: [PATCH] Update for PhysicsMaterial 1. Fixing to ensure both version of PhysicMaterial works, editing PhysicsMaterial properties to camelCase 2. Add example output on server --- UnityMcpBridge/Editor/Tools/ManageAsset.cs | 40 +++++++++++++--------- UnityMcpServer/src/tools/manage_asset.py | 3 ++ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/UnityMcpBridge/Editor/Tools/ManageAsset.cs b/UnityMcpBridge/Editor/Tools/ManageAsset.cs index aeeb08e..90657b2 100644 --- a/UnityMcpBridge/Editor/Tools/ManageAsset.cs +++ b/UnityMcpBridge/Editor/Tools/ManageAsset.cs @@ -8,6 +8,14 @@ using UnityEditor; using UnityEngine; using UnityMcpBridge.Editor.Helpers; // For Response class +#if UNITY_6000_0_OR_NEWER +using PhysicsMaterialType = UnityEngine.PhysicsMaterial; +using PhysicsMaterialCombine = UnityEngine.PhysicsMaterialCombine; +#else +using PhysicsMaterialType = UnityEngine.PhysicMaterial; +using PhysicsMaterialCombine = UnityEngine.PhysicMaterialCombine; +#endif + namespace UnityMcpBridge.Editor.Tools { /// @@ -179,7 +187,7 @@ namespace UnityMcpBridge.Editor.Tools } else if (lowerAssetType == "physicsmaterial") { - PhysicsMaterial pmat = new PhysicsMaterial(); + PhysicsMaterialType pmat = new PhysicsMaterialType(); if (properties != null) ApplyPhysicsMaterialProperties(pmat, properties); AssetDatabase.CreateAsset(pmat, fullPath); @@ -959,45 +967,45 @@ namespace UnityMcpBridge.Editor.Tools /// /// Applies properties from JObject to a PhysicsMaterial. /// - private static bool ApplyPhysicsMaterialProperties(PhysicsMaterial pmat, JObject properties) + private static bool ApplyPhysicsMaterialProperties(PhysicsMaterialType pmat, JObject properties) { if (pmat == null || properties == null) return false; bool modified = false; // Example: Set dynamic friction - if (properties["DynamicFriction"]?.Type == JTokenType.Float) + if (properties["dynamicFriction"]?.Type == JTokenType.Float) { - float dynamicFriction = properties["DynamicFriction"].ToObject(); + float dynamicFriction = properties["dynamicFriction"].ToObject(); pmat.dynamicFriction = dynamicFriction; modified = true; } // Example: Set static friction - if (properties["StaticFriction"]?.Type == JTokenType.Float) + if (properties["staticFriction"]?.Type == JTokenType.Float) { - float staticFriction = properties["StaticFriction"].ToObject(); + float staticFriction = properties["staticFriction"].ToObject(); pmat.staticFriction = staticFriction; modified = true; } // Example: Set bounciness - if (properties["Bounciness"]?.Type == JTokenType.Float) + if (properties["bounciness"]?.Type == JTokenType.Float) { - float bounciness = properties["Bounciness"].ToObject(); + float bounciness = properties["bounciness"].ToObject(); pmat.bounciness = bounciness; modified = true; } - List averageList = new List{"ave", "Ave", "average", "Average"}; - List multiplyList = new List{"mul", "Mul", "mult", "Mult", "multiply", "Multiply"}; - List minimumList = new List{"min", "Min", "minimum", "Minimum"}; - List maximumList = new List{"max", "Max", "maximum", "Maximum"}; + List averageList = new List { "ave", "Ave", "average", "Average" }; + List multiplyList = new List { "mul", "Mul", "mult", "Mult", "multiply", "Multiply" }; + List minimumList = new List { "min", "Min", "minimum", "Minimum" }; + List maximumList = new List { "max", "Max", "maximum", "Maximum" }; // Example: Set friction combine - if (properties["FrictionCombine"]?.Type == JTokenType.String) + if (properties["frictionCombine"]?.Type == JTokenType.String) { - string frictionCombine = properties["FrictionCombine"].ToString(); + string frictionCombine = properties["frictionCombine"].ToString(); if (averageList.Contains(frictionCombine)) pmat.frictionCombine = PhysicsMaterialCombine.Average; else if (multiplyList.Contains(frictionCombine)) @@ -1010,9 +1018,9 @@ namespace UnityMcpBridge.Editor.Tools } // Example: Set bounce combine - if (properties["BounceCombine"]?.Type == JTokenType.String) + if (properties["bounceCombine"]?.Type == JTokenType.String) { - string bounceCombine = properties["BounceCombine"].ToString(); + string bounceCombine = properties["bounceCombine"].ToString(); if (averageList.Contains(bounceCombine)) pmat.bounceCombine = PhysicsMaterialCombine.Average; else if (multiplyList.Contains(bounceCombine)) diff --git a/UnityMcpServer/src/tools/manage_asset.py b/UnityMcpServer/src/tools/manage_asset.py index 328b85a..dada66b 100644 --- a/UnityMcpServer/src/tools/manage_asset.py +++ b/UnityMcpServer/src/tools/manage_asset.py @@ -33,6 +33,9 @@ def register_manage_asset_tools(mcp: FastMCP): path: Asset path (e.g., "Materials/MyMaterial.mat") or search scope. asset_type: Asset type (e.g., 'Material', 'Folder') - required for 'create'. properties: Dictionary of properties for 'create'/'modify'. + example properties for Material: {"color": [1, 0, 0, 1], "shader": "Standard"}. + example properties for Texture: {"width": 1024, "height": 1024, "format": "RGBA32"}. + example properties for PhysicsMaterial: {"bounciness": 1.0, "staticFriction": 0.5, "dynamicFriction": 0.5}. destination: Target path for 'duplicate'/'move'. search_pattern: Search pattern (e.g., '*.prefab'). filter_*: Filters for search (type, date).