通过脚本

时间:2017-08-06 19:26:50

标签: c# unity3d import assets

我有问题。当我尝试通过脚本将纹理导入我的资产时,我收到此错误:

  

断言失败:表达式断言失败:   '!(o-> TestHideFlag(Object :: kDontSaveInEditor)&&(options&   kAllowDontSaveObjectsToBePersistent)== 0)'   UnityEditor.AssetDatabase:CreateAsset(Object,String)   Editor.TextureImportWindow:OnGUI()(at   资产/脚本/编辑/ TextureImportWindow.cs:40)   UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)

和此:

  

无法从Assets / Textures / importedTexture13.png创建纹理:   无法读取文件UnityEditor.AssetDatabase:CreateAsset(Object,   String)Editor.TextureImportWindow:OnGUI()(at   资产/脚本/编辑/ TextureImportWindow.cs:40)   UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)

我的代码:

 public class TextureImportWindow : EditorWindow
 {
     [MenuItem("Window/Pixel Terrain/Import Texture")]
     public static void ShowWindow()
     {
         GetWindow<TextureImportWindow>("Import Texture");
     }

     private Texture2D _texture;
     private string _path;

     private void OnGUI()
     {
         if (GUILayout.Button("Select File"))
         {
             _path = EditorUtility.OpenFilePanel("Choose texture", "", "png");
             if (_path.Length != 0)
             {
                 var www = new WWW("file:///" + _path);
                 _texture = Texture2D.blackTexture;
                 www.LoadImageIntoTexture(_texture);
             }
         }

         if (_texture != null)
         {
             if (GUILayout.Button("Import"))
             {
                 if (!AssetDatabase.IsValidFolder("Assets/Textures"))
                 {
                     AssetDatabase.CreateFolder("Assets", "Textures");
                 }
                 AssetDatabase.CreateAsset(_texture, "Assets/Textures/importedTexture12.png");
                 AssetDatabase.SaveAssets();
                 AssetDatabase.Refresh();
             }
         }
     }
 }

1 个答案:

答案 0 :(得分:1)

首先,AssetDatabase.CreateAsset支持少量扩展,而png不是其中之一。根据文档,这些是受支持的格式:

  • .mat了解材料
  • .cubemap for cubemaps
  • .GUISkin皮肤
  • .anim动画
  • .asset用于任意其他资产。)

在任何地方都没有提到PNG,因此当您尝试使用该功能导入时会出现错误。 AssetDatabase.ImportAsset更适合此,但由于它需要相对路径,因此您无法使用EditorUtility.OpenFilePanel提供的绝对路径。

要从EditorUtility.OpenFilePanel将png文件导入您的项目,只需将其File.CopyFileUtil.CopyFileOrDirectory(推荐)复制到目的地,然后拨打AssetDatabase.Refresh()

替换:

AssetDatabase.CreateAsset(_texture, "Assets/Textures/importedTexture12.png");
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();

使用:

FileUtil.CopyFileOrDirectory(_path, "Assets/Textures/importedTexture12.png");
AssetDatabase.Refresh();