public static void WriteClass(TextWriter writer, string nameSpace) { var assetBundleInfos = BuildAssetBundleTools.FileInfo2AssetConst(); // AddABInfo2ResDatas();//new List<AssetBundleInfo>(); var compileUnit = new CodeCompileUnit(); var codeNamespace = new CodeNamespace(nameSpace); compileUnit.Namespaces.Add(codeNamespace); foreach (var assetBundleInfo in assetBundleInfos) { var className = assetBundleInfo.assetBundleName; // className = DesignerTools.SimplifyName(Path2CamelName(className)); var codeType = new CodeTypeDeclaration(DesignerTools.SimplifyName(Path2CamelName(className))); codeNamespace.Types.Add(codeType); var assetsRoot = "Assets/"; var bundleNameField = new CodeMemberField { Attributes = MemberAttributes.Public | MemberAttributes.Const, Name = "BundleName", Type = new CodeTypeReference(typeof(System.String)), InitExpression = new CodePrimitiveExpression(className) }; codeType.Members.Add(bundleNameField); var prefix = "_"; //TODO 不去重处理,理论上不应该有重复名字的资源在同一个ab包中 // var checkRepeatDict = new Dictionary<string, string>(); foreach (var asset in assetBundleInfo.assetNames) { var content = Path.GetFileNameWithoutExtension(asset); var ext = Path.GetExtension(asset)?.Substring(1).ToUpper() + prefix; var assetField = new CodeMemberField { Attributes = MemberAttributes.Public | MemberAttributes.Const, Name = ext + DesignerTools.SimplifyName(content?.ToUpperInvariant()), Type = new CodeTypeReference(typeof(System.String)), InitExpression = new CodePrimitiveExpression(content) }; // if (!assetField.Name.StartsWith("[") && !assetField.Name.StartsWith(" [") && // !checkRepeatDict.ContainsKey(assetField.Name)) // { // checkRepeatDict.Add(assetField.Name, asset); codeType.Members.Add(assetField); // } } // checkRepeatDict.Clear(); } //TODO using Microsoft.CSharp; var provider = new Microsoft.CSharp.CSharpCodeProvider(); var options = new CodeGeneratorOptions { BlankLinesBetweenMembers = false, BracingStyle = "C" }; provider.GenerateCodeFromCompileUnit(compileUnit, writer, options); }
void OnGUI() { GUIStyle text_style = new GUIStyle(); text_style.fontSize = 15; text_style.alignment = TextAnchor.MiddleCenter; EditorGUILayout.BeginHorizontal(); GUILayout.Label("默认使用源文件名", GUILayout.MinWidth(0)); IsThisName = EditorGUILayout.Toggle(IsThisName); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("AssetBundleName:", GUILayout.MinWidth(0)); if (IsThisName) { GUILayout.Label("文件相对Assets/Export的路径", GUILayout.MinWidth(0)); } else { AssetBundleName = EditorGUILayout.TextField(AssetBundleName.ToLower()); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Variant:", GUILayout.MinWidth(0)); Variant = EditorGUILayout.TextField(Variant.ToLower()); EditorGUILayout.EndHorizontal(); GUILayout.Label("\n"); EditorGUILayout.BeginHorizontal(); GUILayout.Label("文件夹路径", GUILayout.MinWidth(60)); if (GUILayout.Button("浏览", GUILayout.MinWidth(60))) { OpenFolder(); } PathRoot = EditorGUILayout.TextField(PathRoot); EditorGUILayout.EndHorizontal(); if (GUILayout.Button("修改该文件夹下的AssetName及Variant")) { BuildAssetBundleTools.SetSettings(); } if (GUILayout.Button("清除所有未被引用的AssetName及Variant")) { AssetDatabase.RemoveUnusedAssetBundleNames(); } if (GUILayout.Button("清空所有AssetName及Variant")) { ClearAssetBundlesName(); } }