2、拓展布局 粗心的读者这下也已经看出来了,下面的代码复刻了之前的代码,将 EditorApplication 后的 GUI 委托修改为 Hierarchy 窗口专属的,并将参数从资源的 GUID 变为 instanceID 实例 ID。此外,按钮引入了本地图片。在各种插件中,编辑器引入图片的操作屡见不鲜,有时为了资源规范会整理插件的图标和图片位置,别忘...
Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。还有fileID(本地ID),用于标识资源内部的资源。资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。 InstanceID(实例ID) Unity为了在运行时,提升资源管理的效率,会在内部维护一个缓存表,负责...
这个Guid代表了这个文件,无论这个文件是什么类型(甚至是文件夹)。换句话说,通过GUID就可以找到工程中的这个文件,无论它在项目的什么位置。在编辑器中使用AssetDatabase.GUIDToAssetPath和AssetDatabase.AssetPathToGUID进行互转。 所以在每次svn提交时如果发现有Meta文件变更,一定要打开看一下。看看这个Guid是否被更改。
首先,编写脚本从Editor中,遍历获取所有的类型信息,建立guid到类型信息的映射: <guid, assembly-namespace-classname> 然后,解析globalgamemanagers.assets文件,获取类型信息到文件内索引的映射: <assembly-namespace-classname, localFileID> 这样,就可以将YAML中的脚本引用guid,序列化为localFileID了。 Editor内的脚本如...
Meta文件详解——Unity GUID/LocalID系统 meta文件实质上是一个文本文档,只是采用的是一种叫做YAML的格式来写的(https://docs.unity3d.com/Manual/FormatDescription.html)。 unity中的序列化文件都是用这个格式类写的,比如prefab,场景等。 我们使用nodepad++打开一个meta文件,然后在菜单中将语言设置为YAML,如下图...
Debug.Log($"{selectedObjects[i].name}: {UntypedWeakReferenceId.CreateFromObjectInstance(selectedObjects[i])}"); } } } 2,弱引用场景 在Unity 中,弱引用场景的方式与弱引用对象是一致的。想要了解更多,请参考弱引用对象。 Unity 使用 UntypedWeakReferenceId 来弱引用场景,因此,如果想要从 C# 脚本中弱引用一...
Meta文件详解——Unity GUID/LocalID系统 由于meta文件的重要性,这里先说说meta文件的数据结构。meta文件实质上是一个文本文档,只是采用的是一种叫做YAML的格式来写的(见Description of the Format)。unity中的序列化文件都是用这个格式类写的,比如prefab,场景等(后文会继续)。
Unity修改脚本在Project面板中显示的icon有两种方法, 先看示意图: 方法1:修改脚本的meta文件 脚本的 meta文件默认如下所示: 注意到,图中的icon,填的“instanceID = 0”即为默认显示 在里面填入icon文件的fileid和guid,如下所示,即可实现。 方法二:简单粗暴,Unity直接可以设置。。。 以上知识分享,如有错误,欢迎...
其他文件通过 AssetDatabase.LoadAllAssetsAtPath获取到文件的全部资产,将获得的资产 SerializedObject序列化,再遍历序列化的对象来取得索引对象属性的objectReferenceInstanceIDValue,通过GetAssetPath方法将InstanceID转换为asset路径,再通过AssetDataBase.AssetPathToGUID方法将asset路径转换为GUID存入Dictionary。 最后还是通过对比...
就像第一篇文章的序列化与实例章节所描述的那样,AssetBundle是它所包含的通过每个Object的FileGUID和LocalID标识的源数据的数据源。 因为Object会在它的Instance ID首次被引用时进行加载,而且当加载AssetBundle时Object会被分配一个合法的Instance ID,所以加载AssetBundle的顺序并不重要。但是,在加载Object自身之前加载他所依...