我有问题。当我尝试通过脚本将纹理导入我的资产时,我收到此错误:
断言失败:表达式断言失败: '!(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();
}
}
}
}
答案 0 :(得分:1)
首先,AssetDatabase.CreateAsset
支持少量扩展,而png不是其中之一。根据文档,这些是受支持的格式:
.mat
了解材料.cubemap
for cubemaps .GUISkin
皮肤.anim
动画.asset
用于任意其他资产。)在任何地方都没有提到PNG,因此当您尝试使用该功能导入时会出现错误。 AssetDatabase.ImportAsset
更适合此,但由于它需要相对路径,因此您无法使用EditorUtility.OpenFilePanel
提供的绝对路径。
要从EditorUtility.OpenFilePanel
将png文件导入您的项目,只需将其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();