Unity的OnOpenAsset实用案例深入解析
作者:AlianBlank 时间:2021-05-30 01:37:16
Unity OnOpenAsset
在Unity中,OnOpenAsset是一个非常有用的回调函数,它可以在用户双击资源文件时自动打开一个编辑器窗口。这个回调函数可以用于自定义资源编辑,提高工作效率。本文将介绍OnOpenAsset的使用方法,并提供三个使用例子。
OnOpenAsset的使用方法
OnAsset是Unity Editor的一个回调函数,它会在用户双击资源文件时被调用。这个回调函数有两个参数:instanceID和lineNumber。instanceID是资源的唯一标识符,lineNumber是资源文件中的行号。我们可以利用这两个参数来打开资源编辑器。
要使用OnOpenAsset,我们需要在Editor文件夹下创建一个脚本,并在脚本中实现OnOpenAsset方法。下面是一个简单的例子:
using UnityEditor;
using UnityEngine;
public class MyEditor : Editor
{
[UnityEditor.Callbacks.OnOpenAsset]
public static bool OnOpenAsset(int instanceID, int lineNumber)
{
// 获取资源路径
string assetPath = AssetDatabase.GetAssetPath(instanceID);
// 判断资源类型
if (assetPath.EndsWith(".txt"))
{
// 打开文本编辑器
TextAsset asset = AssetDatabase.LoadAssetAtPath<TextAsset>(assetPath);
UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(assetPath, lineNumber);
return true;
}
// 返回false表示不处理该资源
return false;
}
}
在这个例子中,我们判断资源类型是否为txt文件,如果是则打开文本编辑器。我们可以根据需要自定义资源编辑器。
使用案例
案例1:打开场景文件
using UnityEditor;
using UnityEngine;
public class SceneOpener : Editor
{
[UnityEditor.Callbacks.OnOpenAsset]
public static bool OnOpenAsset(int instanceID, int lineNumber)
{
// 获取资源路径
string assetPath = AssetDatabase.GetAssetPath(instanceID);
// 判断资源类型
if (assetPath.EndsWith(".unity"))
{
// 打开场景文件
EditorSceneManager.OpenScene(assetPath);
return true;
}
// 返回false表示不处理该资源
return false;
}
}
在这个例子中,我们判断资源类型是否为unity景文件,如果是则打开场景文件。
案例2:打开脚本文件
using UnityEditor;
using UnityEngine;
public class ScriptOpener : Editor
{
[UnityEditor.Callbacks.OnOpenAsset]
public static bool OnOpenAsset(int instanceID, int lineNumber)
{
// 获取资源路径
string assetPath = AssetDatabase.GetAssetPath(instanceID);
// 判断资源类型
if (assetPath.EndsWith(".cs"))
{
// 打开脚本文件
MonoScript script = AssetDatabase.LoadAssetAtPath<MonoScript>(assetPath);
AssetDatabase.OpenAsset(script);
return true;
}
// 返回false表示不处理该资源
return false;
}
}
在这个例子中,我们判断资源类型是否为cs脚本文件,如果是则打开脚本文件。
案例3:打开纹理文件
using UnityEditor;
using UnityEngine;
public class TextureOpener : Editor
{
[UnityEditor.Callbacks.OnOpenAsset]
public static bool OnOpenAsset(int instanceID, int lineNumber)
{
// 获取资源路径
string assetPath = AssetDatabase.GetAssetPath(instanceID);
// 判断资源类型
if (assetPath.EndsWith(".png") || assetPath.EndsWith(".jpg"))
{
// 打开纹理文件
Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>(assetPath);
AssetDatabase.OpenAsset(texture);
return true;
}
// 返回false表示不处理该资源
return false;
}
}
在这个例子中,我们判断资源类型是否为png或jpg纹理文件,如果是则打开纹理文件。
结论
OnOpenAsset是Unity Editor的一个非常有用的回调函数,它可以用于自定义资源编辑器,提高工作效率。我们可以根据需要自定义资源编辑器,并在OnOpenAsset方法中实现打开资源的逻辑。
来源:https://segmentfault.com/a/1190000043835337
标签:Unity,OnOpenAsset
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java内存模型中的虚拟机栈原理分析
2022-02-08 04:41:33
![](https://img.aspxhome.com/file/2023/0/81990_0s.jpg)
详解JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)
2021-12-24 00:29:29
![](https://img.aspxhome.com/file/2023/3/97803_0s.png)
Java经典用法总结(二)
2023-11-24 20:39:10
CAD2008+VS2008开发ObjectARX加载失败问题(推荐)
2023-11-06 00:36:46
![](https://img.aspxhome.com/file/2023/9/96329_0s.jpg)
Spring Boot项目@RestController使用重定向redirect方式
2023-12-11 15:21:56
C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
2022-12-24 08:16:21
Java花式解决'分割回文串 ii'问题详解
2022-07-09 02:01:58
![](https://img.aspxhome.com/file/2023/3/83593_0s.jpg)
Spring事务失效的场景梳理总结
2023-02-23 16:23:24
java中treemap和treeset实现红黑树
2021-12-05 07:22:29
![](https://img.aspxhome.com/file/2023/3/73043_0s.png)
如何用Java注解和反射实现依赖注入
2022-11-04 11:34:10
Autowired的注入过程源码解析
2022-04-29 17:53:36
![](https://img.aspxhome.com/file/2023/8/90018_0s.webp)
SpringBoot中的multipartResolver上传文件配置
2022-01-22 11:06:51
Mybatis执行流程、缓存原理及相关面试题汇总
2022-10-15 23:30:28
![](https://img.aspxhome.com/file/2023/4/77154_0s.png)
Springboot微服务打包Docker镜像流程解析
2022-02-23 19:39:00
java tostring方法重写代码示例
2022-12-31 22:38:07
Android开发使用RecyclerView添加点击事件实例详解
2022-04-30 14:11:55
Java线程中的常见方法(start方法和run方法)
2023-11-16 17:41:32
![](https://img.aspxhome.com/file/2023/4/68694_0s.png)
unity制作瞄准镜效果
2022-04-15 23:45:10
![](https://img.aspxhome.com/file/2023/2/76402_0s.jpg)
Springmvc发送json数据转Java对象接收
2023-07-07 16:26:16
利用Java自写一个生成ID的工具类
2023-04-24 04:10:08