AssetImportCheck.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using System.IO;
  2. using UnityEngine;
  3. using UnityEditor;
  4. public class AssetImportCheck : AssetPostprocessor
  5. {
  6. private const string JudgeDir = "Assets/Content";
  7. public void OnPreprocessAsset()
  8. {
  9. if (string.IsNullOrEmpty(assetPath)) return;
  10. //if (!assetPath.StartsWith(JudgeDir)) return;
  11. if (assetPath.Contains(" "))
  12. {
  13. if (assetPath.Contains(".dll") || assetPath.Contains(".cs")) return;
  14. // 在打包的.manifest文件中,空字符容易造成换行,导致assetsmapping.bytes文件中会遗漏需求资源
  15. Debug.LogError("路径中有空字符,注意修改" + assetPath);
  16. }
  17. if (assetPath.Contains("Gacha"))
  18. {
  19. return;
  20. }
  21. if (assetImporter is ModelImporter)
  22. {
  23. if (assetPath.Contains("Effects/Mesh"))
  24. {
  25. if (AssetDatabase.LoadAssetAtPath<Object>(assetPath) == null)
  26. {
  27. var modelImporter = assetImporter as ModelImporter;
  28. //modelImporter.importMaterials = false;
  29. modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
  30. modelImporter.importTangents = ModelImporterTangents.None;
  31. }
  32. }
  33. else if (assetPath.Contains("Particle/Mesh") ||
  34. assetPath.ToLower().Contains("terrain") ||
  35. assetPath.ToLower().Contains("raw_art/monster"))
  36. {
  37. var modelImporter = assetImporter as ModelImporter;
  38. //modelImporter.importMaterials = false;
  39. modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
  40. modelImporter.importTangents = ModelImporterTangents.None;
  41. }
  42. else
  43. {
  44. var modelImporter = assetImporter as ModelImporter;
  45. //modelImporter.importMaterials = false;
  46. modelImporter.materialImportMode = ModelImporterMaterialImportMode.None;
  47. modelImporter.isReadable = false;
  48. modelImporter.importTangents = ModelImporterTangents.None;
  49. }
  50. }
  51. else if (assetImporter is TextureImporter)
  52. {
  53. return;
  54. }
  55. else if (assetImporter is PluginImporter)
  56. {
  57. var pluginImporter = (assetImporter as PluginImporter);
  58. ImportBridgeDll(pluginImporter);
  59. }
  60. else
  61. {
  62. GameObject go = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath);
  63. if (go != null && PrefabUtility.GetPrefabAssetType(go) == PrefabAssetType.Regular && assetPath.Contains("Assets/Content/Raw_Art"))
  64. {
  65. string fullPath = System.IO.Path.Combine(FileSystem.GetUserDocumentPath(), assetPath);
  66. File.Delete(fullPath);
  67. }
  68. }
  69. }
  70. public void OnPostprocessTexture(Texture2D tex)
  71. {
  72. if (string.IsNullOrEmpty(assetPath)) return;
  73. if (assetImporter is TextureImporter)
  74. {
  75. if (assetPath.Contains("_t4mctrl")
  76. || assetPath.Contains("T4M")
  77. || assetPath.Contains("Lightmap-")
  78. || assetPath.Contains("_alpha")
  79. || assetPath.Contains("_spec")
  80. || assetPath.Contains("Spine")
  81. || assetPath.Contains("Gacha")
  82. || assetPath.Contains("AppIcon")) return;
  83. var textureImporter = assetImporter as TextureImporter;
  84. textureImporter.isReadable = false;
  85. if (textureImporter.textureType == TextureImporterType.Default)
  86. {
  87. bool hasAlpha = textureImporter.DoesSourceTextureHaveAlpha();
  88. if (hasAlpha)
  89. {
  90. textureImporter.alphaIsTransparency = true;
  91. }
  92. TextureImporterPlatformSettings setting = textureImporter.GetPlatformTextureSettings("iPhone");
  93. if (hasAlpha)
  94. {
  95. setting.format = TextureImporterFormat.ASTC_6x6;
  96. }
  97. else
  98. {
  99. setting.format = TextureImporterFormat.ASTC_6x6;
  100. }
  101. setting.overridden = true;
  102. textureImporter.SetPlatformTextureSettings(setting);
  103. setting = textureImporter.GetPlatformTextureSettings("Android");
  104. if (hasAlpha)
  105. {
  106. setting.format = TextureImporterFormat.ETC2_RGBA8;
  107. }
  108. else
  109. {
  110. setting.format = TextureImporterFormat.ETC2_RGB4;
  111. }
  112. setting.overridden = true;
  113. textureImporter.SetPlatformTextureSettings(setting);
  114. setting = textureImporter.GetPlatformTextureSettings("PC");
  115. if (hasAlpha)
  116. {
  117. setting.format = TextureImporterFormat.DXT5;
  118. }
  119. else
  120. {
  121. setting.format = TextureImporterFormat.DXT1;
  122. }
  123. setting.overridden = true;
  124. textureImporter.SetPlatformTextureSettings(setting);
  125. }
  126. }
  127. }
  128. private const string BridgeDllPath = "Assets/Plugins/Bridge/";
  129. public void ImportBridgeDll(PluginImporter pluginImporter)
  130. {
  131. string assetPath = pluginImporter.assetPath;
  132. if (!assetPath.StartsWith(BridgeDllPath))
  133. {
  134. return;
  135. }
  136. assetPath = assetPath.Replace(BridgeDllPath, "");
  137. string[] assetPathStr = assetPath.Split('/');
  138. if (assetPathStr.Length < 1) return;
  139. string dirPath = assetPathStr[0];
  140. if (string.IsNullOrEmpty(dirPath)) return;
  141. switch (dirPath)
  142. {
  143. case "Android":
  144. pluginImporter.SetCompatibleWithAnyPlatform(false);
  145. pluginImporter.SetCompatibleWithPlatform(BuildTarget.Android, true);
  146. break;
  147. case "iOS":
  148. pluginImporter.SetCompatibleWithAnyPlatform(false);
  149. pluginImporter.SetCompatibleWithPlatform(BuildTarget.iOS, true);
  150. break;
  151. case "Default":
  152. pluginImporter.SetCompatibleWithAnyPlatform(true);
  153. pluginImporter.SetExcludeFromAnyPlatform(BuildTarget.Android, true);
  154. pluginImporter.SetExcludeFromAnyPlatform(BuildTarget.iOS, true);
  155. break;
  156. }
  157. }
  158. }