簡體   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