Unity的OnOpenAsset:深入解析与实用案例
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:深入解析与实用案例的更多相关文章
- 基于TP5.1实用案例及教程
推荐<基于TP5.1实用案例及教程>书 目录: 通用封装 Export通用封装Import通用封装配合Import通用封装的ImportBaseVerify类Files通用封装Direct ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
- 用DOM4J解析XML文件案例
用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:
- 精选19款华丽的HTML5动画和实用案例
下面是本人收集的19款超酷HTML5动画和实用案例,觉得不错,分享给大家. 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟花动画HTML5 Canvas烟花特效,今天 ...
- JAVA实用案例之水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- JAVA实用案例之图片水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- JAVA实用案例之文件导出(JasperReport踩坑实录)
写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...
- (转载)Android之三种网络请求解析数据(最佳案例)
[置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报 分类: Gson.Gson解析(1) 版权声明:本文为博主原创 ...
- DNS解析综合学习案例
DNS解析综合学习案例 #图右侧为做题前环境配置 #命令为红色 #命令加载内容为绿色 #vi编辑内容为蓝色 1.用户需把/dev/myvg/mylv逻辑卷以支持磁盘配额的方式挂载到网页目录下 [roo ...
- InfluxDB 聚合函数实用案例
InfluxDB 聚合函数实用案例 文章大纲 InfluxDB 简介 InfluxDB是GO语言编写的分布式时间序列化数据库,非常适合对数据(跟随时间变化而变化的数据)的跟踪.监控和分析.在我们的项目 ...
随机推荐
- 谈谈selenium中的clear后输入内容异常的处理
谈谈selenium中的clear后输入内容异常的处理 案例 在线考试项目的登录:http://124.223.31.21:9097/#/ 代码 from selenium import webdri ...
- Kubesphere中DevOps流水线无法部署/部署失败
摘要 总算能让devops运行以后,流水线却卡在了deploy这一步.碰到了两个比较大的问题,一个是无法使用k8sp自带的kubeconfig认证去部署:一个是部署好了以后但是没有办法解析镜像名. 版 ...
- Java 网络编程 —— Socket 详解
构造 Socket 在[客户端/服务端]的通信模式中,客户端需要主动构造与服务器连接的 Socket,构造方法有以下几种重载形式: Socket() Socket(InetAddress addres ...
- Netty服务端开发及性能优化
作者:京东物流 王奕龙 Netty是一个异步基于事件驱动的高性能网络通信框架,可以看做是对NIO和BIO的封装,并提供了简单易用的API.Handler和工具类等,用以快速开发高性能.高可靠性的网络服 ...
- 2021-10-15:单词拆分。给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你
2021-10-15:单词拆分.给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词.说明:拆分时可以重复使用字典中的单词.你 ...
- docker安装es,单机集群模式.失败。
操作系统:mac系统. docker run -d --name es1 -p 9201:9200 -p 9301:9300 elasticsearch:7.14.0 docker run -d -- ...
- 爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口
这里实现我之前文章承诺承接上文 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服 现在ChatGPT 提供了api接口 可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也 ...
- 图数据库 NebulaGraph 的内存管理实践之 Memory Tracker
数据库的内存管理是数据库内核设计中的重要模块,内存的可度量.可管控是数据库稳定性的重要保障.同样的,内存管理对图数据库 NebulaGraph 也至关重要. 图数据库的多度关联查询特性,往往使图数据库 ...
- springboot 整合jdbc
在springboot底层无论关系型还是非关系型数据库都是用spring-data进行交互 新建: 通过spring initialer勾选重要依赖jdbc api和mysql driver: 源码分 ...
- springboot 自动装配的原理
自动装配原理 问题就是为什么我们直接导入依赖就可以使用了,甚至不用配置web.xml,tomcat等,springboot内部是如何实现的? 主启动类上的注解@SpringBootApplicatio ...