繁体   English   中英

通过脚本导入Unity 3d

[英]Unity 3d Importing .png via script

我有个问题。 当我尝试通过脚本将纹理导入到资产时,出现以下错误:

断言失败:表达式断言失败:'!(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)

和这个:

无法从Assets / Textures / importedTexture13.png创建纹理:无法读取文件UnityEditor.AssetDatabase:CreateAsset(Object,String)Editor.TextureImportWindow:OnGUI()(在Assets / Scripts / Editor / 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();
             }
         }
     }
 }

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

  • .mat用于材料
  • .cubemap用于立方体贴图
  • .GUISkin皮肤
  • .anim用于动画
  • .asset以获取任意其他资产。)

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

要导入PNG文件到你的项目EditorUtility.OpenFilePanel ,只需将其复制到与目标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();

暂无
暂无

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

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