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