Unity编译器拓展学习总结(一):常用工具API
Unity编译器拓展学习总结(一):常用工具API
文章目录
- Unity编译器拓展学习总结(一):常用工具API
- 前言
- 一、常用工具API
- 1、PrefabUtility
- 2、AssetDatabase
- 3、EditorPrefs
- 4、Selection
- 5、Undo
- 6、SerializedObject
- 7、ScriptableObject
- 8、特性DidReloadScriptsAttrible
- 总结
前言
最近花了不少时间学习了编译器拓展的东西,所以想着趁着有时间回过头来总结总结,将把我所学到的编译器拓展的相关知识给总结一下。
一、常用工具API
1、PrefabUtility
常用于制作预制体的API,常用方法是CreateAsPrefabAndConnect,这个可以制作一个预制体,并且与场景中的原预制体连接。
public class PrefabTest
{[MenuItem("Test/Create Prefab")]static void CreatePrefab(){GameObject gameObj = GameObject.Find("Cube");//要进行打包的游戏物体string outPutPath = "Assets/Prefabs"+ "/" + gameObj.name + ".prefab";//要输出的路径InteractionMode mInteractionMode = InteractionMode.AutomatedAction;//自动还是手动打包,手动可以支持Undo操作,撤销链接PrefabUtility.SaveAsPrefabAssetAndConnect(gameObj, outPutPath, mInteractionMode);}
}
2、AssetDatabase
与Asset数据相关的,可以用于制作AB包,刷新资产列表等。
AssetDatabase.Refresh();//用于刷新数据
3、EditorPrefs
用于编辑器存储相关的,与PlayerPrefs类似。
//如
EditorPrefs.SetString("GENERATE_CLASS_NAME","ssasasasasa");//Set相关的用于保存
EditorPrefs.GetString("GENERATE_CLASS_NAME");//Get相关的方法用于读取
4、Selection
用于选择相关的操作,可以获得当前选择的游戏物体、音乐资源等。
Debug.Log(Selection.activeGameObject.name);//第一个选择的游戏物体Debug.Log(Selection.activeObject.name);//第一个选择的游戏物体,除了文件夹都可选Debug.Log(Selection.objects.Length);//所有选择的物体Debug.Log(Selection.activeTransform);//只能获取Hirearchy下的游戏物体Debug.Log(Selection.transforms.Length);//只能获取Hirearchy下的所有点击物体
5、Undo
所有撤销类的操作,可以用这个类注册一系列的操作。
GameObject o=new GameObject("Test");Undo.DestroyObjectImmediate(o);//利用Undo进行的删除物体操作GameObject uiRootObj = new GameObject("UIRoot");Undo.RegisterCreatedObjectUndo(uiRootObj, "Create UIRoot");//记录此时的GameObject状态,后续修改游戏物体撤销后可以回到此状态GameObject canvas = new GameObject("Canvas");Undo.SetTransformParent(canvas.transform, uiRootObj.transform, "Set Parent Canvas");//用于记录设置父节点的撤销
6、SerializedObject
序列化,可以对对象进行序列化,类似于反射的用法,可以获取到序列化类的字段,常用于检视Inspector面板拓展
using UnityEngine;
using UnityEditor;public class MyObject : ScriptableObject
{public int myInt = 42;
}public class SerializedPropertyTest : MonoBehaviour
{void Start(){MyObject obj = ScriptableObject.CreateInstance<MyObject>();//创建MyObject数据结构,也可以是组件SerializedObject serializedObject = new UnityEditor.SerializedObject(obj);//创建一个序列化对象SerializedProperty serializedPropertyMyInt = serializedObject.FindProperty("myInt");//获取myInt字段Debug.Log("myInt " + serializedPropertyMyInt.intValue);//需要根据字段的不同类型获取不同的值//serializeScript.ApplyModifiedPropertiesWithoutUndo();一般在复赋值后刷新用的方法}
}
7、ScriptableObject
是Unity的一个数据容器,可以利用该文件存储如武器信息,任务信息等,利用CreateInstance()可以实例化出来一个.asset实例文件。
写法一:利用MenuItem创建
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//武器信息
[System.Serializable]
public class WeaponObject : ScriptableObject {public string weaponName = "Weapon Name Here";public int cost;public string description;public int damage;
}
接着写个创建该数据结构的脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;public class MakeWeaponObject
{//在顶部MenuItem(菜单)/Assets/Create/New Weapon目录下新建一个按钮,点击就执行下面的方法[MenuItem("Assets/Create/New Weapon")]public static void Creat() {//新建一个weaponObject对象并实例它WeaponObject asset = ScriptableObject.CreateInstance<WeaponObject>();//将实例出来的对象做成一个.asset文件并存放在以下目录(可自定义)AssetDatabase.CreateAsset(asset, "Assets/WeaponShop/WeaponObjects/New Weapon.asset");//让unity自己的文件管理系统添加这个对象到目录下,貌似是为了生成一个meta文件AssetDatabase.SaveAssets();//接下来的写不写不影响,意思解释下就是让系统Focus到刚刚创建出来的文件EditorUtility.FocusProjectWindow();Selection.activeObject = asset;}
}
写法二:注意脚本文件名要与类名一致,不然无法找到对应脚本
[CreateAssetMenu(fileName = "Data1", menuName = "ScriptableObjects/SpawnManagerScriptableObject2", order = 2)]
public class SpawnManagerScriptableObject2 : ScriptableObject
{public string prefabName;public int numberOfPrefabsToCreate;public Vector3[] spawnPoints;
}
8、特性DidReloadScriptsAttrible
加上这个特性,在脚本编译完成后将会自动调用。
[DidReloadScripts]
static void AddComponentToGameObject()
{Debug.Log("添加组件");
}
总结
本篇文章介绍了在编译器拓展中常用的工具API,通过这些工具API,可以很方便的进行一些相关的操作。
参考链接:scriptableobject类理解
Unity编译器拓展学习总结(一):常用工具API相关推荐
- Unity编译器拓展学习总结(二):各个平台菜单栏拓展
Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前情参考:Unity编译器拓展学习总结(一):常用工具API 文章目录 Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前言 菜单栏拓展 ...
- 【JavaScript学习】JavaScript 常用工具类封装
文章目录 1.JavaScript 常用工具类封装 (1)获得浏览器地址所有参数 (2)将json转为get参数 (3)格式校验工具类 (4)数组操作工具类 (5)表单取值工具类 (6)时间转换工具类 ...
- BackTrack5 学习笔记2 常用工具
本系列文章来自<高度安全环境下的高级渗透测试>一书学习笔记. libreoffice 从官网下载.deb包安装 MagicTree 按Ctrl+N 在Tree View里选择127.0.1 ...
- 深度学习目标检测常用工具型代码:对检测出来的结果单独进行nms操作
p.s. 这里的例子我说的都是航空影像目标,所以大家考虑的时候都要考虑成俯视图的状态. 多目标检测的时候,有容易发生拥挤的类别,比如小汽车,也有不易拥挤的类别,比如篮球场.所以需要不同的nms阈值,而 ...
- PHP/其他语言 - 程序员内功心法 常用工具 - 学习/实践
1.应用场景 主要用于学习和使用常用工具进行程序剖析,养成技术人的内功心法,从而达到技术的融会贯通. 2.学习/操作 1.文档阅读 PHP程序员内功心法-常用工具 My favorite (dead ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- 【算法竞赛学习】气象海洋预测-Task1 气象数据分析常用工具
气象海洋预测-Task1 气象数据分析常用工具 气象科学中的数据通常包含多个维度,例如本赛题中给出的数据就包含年.月.经度.纬度四个维度,为了便于数据的读取和操作,气象数据通常采用netCDF文件来存 ...
- 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具
智慧海洋建设-Task1 地理数据分析常用工具 在地理空间数据分析中,常会用到许多地理分析的工具,在本模块中主要是针对常用的shapely.geopandas.folium.kepler.gl.geo ...
- 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...
最新文章
- 通俗易懂的TCP里面的三次握手以及四次挥手
- 无乱码的中文Joomla 1.0.15
- 一个老程序员的30年生涯回顾(译文)
- touchstart与click同时触发
- POJ--3974 Palindrome(回文串,hash)
- JEECG 开源平台全视频和文档
- C语言之局部变量全局变量变量存储方式
- 凭什么说 5G 安全无害?
- Hibernate 中upate,savaOrUpdate,merge的区别
- java后端技术有哪些_Java后端精选技术:什么是JVM?
- 业内为啥如此恨视觉中国
- MapABC 地图定位
- 十大程序员最实用的技术社区网站
- 计算机应用基础都学什么,计算机应用基础学习计划
- 机器指令程序编写方法
- 【弄nèng - Zookeeper】Zookeeper入门教程(三)—— 客户端Curator的基本API使用(Curator framework)
- 【硬盘】2021-希捷叠瓦盘(SMR)、垂直盘(CMR/PMR)型号、容量大全
- 使用 matplotlib绘制简单图形,保存图片的方法
- 冰点还原精灵使用技巧
- C#基于WindowsMediaPlayer实现音视频文件播放器