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方法中实现打开资源的逻辑。

Unity的OnOpenAsset:深入解析与实用案例的更多相关文章

  1. 基于TP5.1实用案例及教程

    推荐<基于TP5.1实用案例及教程>书 目录: 通用封装 Export通用封装Import通用封装配合Import通用封装的ImportBaseVerify类Files通用封装Direct ...

  2. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  3. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  4. 精选19款华丽的HTML5动画和实用案例

    下面是本人收集的19款超酷HTML5动画和实用案例,觉得不错,分享给大家. 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟花动画HTML5 Canvas烟花特效,今天 ...

  5. JAVA实用案例之水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  6. JAVA实用案例之图片水印开发

    写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...

  7. JAVA实用案例之文件导出(JasperReport踩坑实录)

    写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...

  8. (转载)Android之三种网络请求解析数据(最佳案例)

    [置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创 ...

  9. DNS解析综合学习案例

    DNS解析综合学习案例 #图右侧为做题前环境配置 #命令为红色 #命令加载内容为绿色 #vi编辑内容为蓝色 1.用户需把/dev/myvg/mylv逻辑卷以支持磁盘配额的方式挂载到网页目录下 [roo ...

  10. InfluxDB 聚合函数实用案例

    InfluxDB 聚合函数实用案例 文章大纲 InfluxDB 简介 InfluxDB是GO语言编写的分布式时间序列化数据库,非常适合对数据(跟随时间变化而变化的数据)的跟踪.监控和分析.在我们的项目 ...

随机推荐

  1. odoo 开发入门教程系列-添加修饰

    添加修饰 我们的房地产模块现在从商业角度来看是有意义的.我们创建了特定的视图,添加了几个操作按钮和约束.然而,我们的用户界面仍然有点粗糙.我们希望为列表视图添加一些颜色,并使一些字段和按钮有条件地消失 ...

  2. 为什么一定要用Redis?

    参考: 为什么分布式一定要有Redis? 选redis还是memcache,源码怎么说?

  3. 这样也行,在lambda表达式中优雅的处理checked exception

    目录 简介 lambda表达式中的checked exception lambda中的unchecked exception 对lambda的最终改造 总结 简介 最近发现很多小伙伴还不知道如何在la ...

  4. Java的static修饰符

    静态域 如果将域定义为 static,每个类中只有一个这样的域.而每一个对象对于所有的实例域却都有自己的一份拷贝.例如,假定需要给每一个雇员赋予唯一的标识码.这里给 Employee 类添加一个实例域 ...

  5. [Pytorch框架] PyTorch 中文手册

    PyTorch 中文手册 书籍介绍 这是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门. 由于本人水平有限,在写此教程的时候参考了一些网上的资料,在这里对他 ...

  6. Win Node.js安装教程

    前言: 一.下载 下载地址:https://registry.npmmirror.com/binary.html?path=node/ 二.安装(以下为傻瓜式安装操作)  三.验证安装 to be c ...

  7. Python_15 ddt驱动与日志

    一.查缺补漏 1. 在测试报告中添加注释,写在类名下面就行,方法名下面,三引号 2. 直接import ddt引用的时候需要ddt.ddt, ddt.data, ddt.unpack from ddt ...

  8. Prism Sample 9 ChangeConvention

    上个例子跳过了ViewModelLocator,因是采用约定的方式最为方便. 如果有人要修改约定,自定义view和viewModel的默认自动定位方式,怎么办呢? 在app.xaml.cs重写以下方法 ...

  9. 用tk.mybaits实现指定字段更新

    ​ 去年年底的因为业务需要需要在使用tk.mybaits框架的系统中实现指定字段的更新,可是tk.mybaits框架本身并不支持这个功能,我翻遍了CSDN和其他相关的技术相关的网站都没有找到相关的解决 ...

  10. SpringBoot定义优雅全局统一Restful API 响应框架五

    闲话不多说,继续优化 全局统一Restful API 响应框架 做到项目通用 接口可扩展. 如果没有看前面几篇文章请先看前面几篇 SpringBoot定义优雅全局统一Restful API 响应框架 ...