[英]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.Copy
或FileUtil.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.