首次提交

This commit is contained in:
Bob.Song
2026-03-05 18:07:55 +08:00
commit e125bb869e
4534 changed files with 563920 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
public class AnimatorParametersGenerator : Editor
{
[MenuItem("Tools/Generate Animator Parameters with Properties")]
public static void GenerateAnimatorParametersWithProperties()
{
// 获取选中的Animator Controller
var controller = Selection.activeObject as AnimatorController;
if (controller == null)
{
Debug.LogError("请选择一个Animator Controller文件");
return;
}
// 用于存储生成的代码
string className = controller.name + "Parameters";
string code = $"// Auto-generated class for {controller.name} parameters\n";
code += "using UnityEngine;\n\n";
code += "public class " + className + "\n{\n";
code += " private Animator _animator;\n\n";
code += $" public {className}(Animator animator)\n";
code += " {\n";
code += " _animator = animator;\n";
code += " }\n\n";
foreach (var parameter in controller.parameters)
{
string paramName = parameter.name;
string sanitizedName = SanitizeName(paramName); // 变量名合法化
string typeName = GetTypeName(parameter.type); // 获取类型名称
switch (parameter.type)
{
case AnimatorControllerParameterType.Bool:
code += $" public bool {sanitizedName}\n";
code += " {\n";
code += $" get => _animator.GetBool(\"{paramName}\");\n";
code += $" set => _animator.SetBool(\"{paramName}\", value);\n";
code += " }\n\n";
break;
case AnimatorControllerParameterType.Int:
code += $" public int {sanitizedName}\n";
code += " {\n";
code += $" get => _animator.GetInteger(\"{paramName}\");\n";
code += $" set => _animator.SetInteger(\"{paramName}\", value);\n";
code += " }\n\n";
break;
case AnimatorControllerParameterType.Float:
code += $" public float {sanitizedName}\n";
code += " {\n";
code += $" get => _animator.GetFloat(\"{paramName}\");\n";
code += $" set => _animator.SetFloat(\"{paramName}\", value);\n";
code += " }\n\n";
break;
case AnimatorControllerParameterType.Trigger:
code += $" public void Set{sanitizedName}Trigger()\n";
code += " {\n";
code += $" _animator.SetTrigger(\"{paramName}\");\n";
code += " }\n\n";
code += $" public void Reset{sanitizedName}Trigger()\n";
code += " {\n";
code += $" _animator.ResetTrigger(\"{paramName}\");\n";
code += " }\n\n";
break;
}
}
code += "}\n";
// 输出到控制台
Debug.Log(code);
// 可选:将代码写入到指定文件
string path = EditorUtility.SaveFilePanel("保存参数类", "Assets", className, "cs");
if (!string.IsNullOrEmpty(path))
{
System.IO.File.WriteAllText(path, code);
AssetDatabase.Refresh();
Debug.Log("生成的参数类已保存到:" + path);
}
}
// 对参数名进行安全处理,避免非法字符
private static string SanitizeName(string name)
{
return name.Replace(" ", "_").Replace("-", "_");
}
// 根据Animator参数类型返回对应的C#类型名
private static string GetTypeName(AnimatorControllerParameterType type)
{
return type switch
{
AnimatorControllerParameterType.Bool => "bool",
AnimatorControllerParameterType.Int => "int",
AnimatorControllerParameterType.Float => "float",
AnimatorControllerParameterType.Trigger => "void",
_ => "unknown"
};
}
}