简体   繁体   English

通过脚本导入Unity 3d

[英]Unity 3d Importing .png via script

I have a problem. 我有个问题。 When I try to import texture via script to my assets, I get this error: 当我尝试通过脚本将纹理导入到资产时,出现以下错误:

Assertion failed: Assertion failed on expression: '!(o->TestHideFlag(Object::kDontSaveInEditor) && (options & kAllowDontSaveObjectsToBePersistent) == 0)' UnityEditor.AssetDatabase:CreateAsset(Object, String) Editor.TextureImportWindow:OnGUI() (at Assets/Scripts/Editor/TextureImportWindow.cs:40) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) 断言失败:表达式断言失败:'!(o-> TestHideFlag(Object :: kDontSaveInEditor)&&(options and kAllowDontSaveObjectsToBePersistent)== 0)'UnityEditor.AssetDatabase:CreateAsset(Object,String)Editor.TextureImportWindow:OnGUI()()(在Assets / Scripts / Editor / TextureImportWindow.cs:40)UnityEngine.GUIUtility:ProcessEvent(Int32,IntPtr)

and this: 和这个:

Could not create texture from Assets/Textures/importedTexture13.png: File could not be read UnityEditor.AssetDatabase:CreateAsset(Object, String) Editor.TextureImportWindow:OnGUI() (at Assets/Scripts/Editor/TextureImportWindow.cs:40) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) 无法从Assets / Textures / importedTexture13.png创建纹理:无法读取文件UnityEditor.AssetDatabase:CreateAsset(Object,String)Editor.TextureImportWindow:OnGUI()(在Assets / Scripts / Editor / TextureImportWindow.cs:40处)UnityEngine .GUIUtility:ProcessEvent(Int32,IntPtr)

My code: 我的代码:

 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();
             }
         }
     }
 }

First of all, AssetDatabase.CreateAsset supports few extensions and png is not one of them. 首先, AssetDatabase.CreateAsset支持很少的扩展,而png不是其中之一。 According to the doc, these are the supported formats: 根据文档,这些是受支持的格式:

  • .mat for materials .mat用于材料
  • .cubemap for cubemaps .cubemap用于立方体贴图
  • .GUISkin for skins .GUISkin皮肤
  • .anim for animations .anim用于动画
  • .asset for arbitrary other assets.) .asset以获取任意其他资产。)

PNG is not mentioned anywhere so you get error when you try to import it with that function. PNG在任何地方都没有提到,因此在尝试使用该功能导入它时会出错。 AssetDatabase.ImportAsset is more appropriate for this but since it requires a relative path, it won't work because you are using an absolute path provided from EditorUtility.OpenFilePanel . AssetDatabase.ImportAsset更适合此操作,但是由于它需要相对路径,因此它将无法工作,因为您使用的是从EditorUtility.OpenFilePanel提供的绝对路径。

To import png file into your project from EditorUtility.OpenFilePanel , just copy it to the destination with File.Copy or FileUtil.CopyFileOrDirectory (Recommended) then call AssetDatabase.Refresh() . 要导入PNG文件到你的项目EditorUtility.OpenFilePanel ,只需将其复制到与目标File.CopyFileUtil.CopyFileOrDirectory (推荐),然后调用AssetDatabase.Refresh()

Replace: 更换:

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

with: 有:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM