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相关推荐

  1. Unity编译器拓展学习总结(二):各个平台菜单栏拓展

    Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前情参考:Unity编译器拓展学习总结(一):常用工具API 文章目录 Unity编译器拓展学习总结(二):各个平台菜单栏拓展 前言 菜单栏拓展 ...

  2. 【JavaScript学习】JavaScript 常用工具类封装

    文章目录 1.JavaScript 常用工具类封装 (1)获得浏览器地址所有参数 (2)将json转为get参数 (3)格式校验工具类 (4)数组操作工具类 (5)表单取值工具类 (6)时间转换工具类 ...

  3. BackTrack5 学习笔记2 常用工具

    本系列文章来自<高度安全环境下的高级渗透测试>一书学习笔记. libreoffice 从官网下载.deb包安装 MagicTree 按Ctrl+N 在Tree View里选择127.0.1 ...

  4. 深度学习目标检测常用工具型代码:对检测出来的结果单独进行nms操作

    p.s. 这里的例子我说的都是航空影像目标,所以大家考虑的时候都要考虑成俯视图的状态. 多目标检测的时候,有容易发生拥挤的类别,比如小汽车,也有不易拥挤的类别,比如篮球场.所以需要不同的nms阈值,而 ...

  5. PHP/其他语言 - 程序员内功心法 常用工具 - 学习/实践

    1.应用场景 主要用于学习和使用常用工具进行程序剖析,养成技术人的内功心法,从而达到技术的融会贯通. 2.学习/操作 1.文档阅读 PHP程序员内功心法-常用工具 My favorite (dead ...

  6. 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍

    C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...

  7. 【算法竞赛学习】气象海洋预测-Task1 气象数据分析常用工具

    气象海洋预测-Task1 气象数据分析常用工具 气象科学中的数据通常包含多个维度,例如本赛题中给出的数据就包含年.月.经度.纬度四个维度,为了便于数据的读取和操作,气象数据通常采用netCDF文件来存 ...

  8. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具

    智慧海洋建设-Task1 地理数据分析常用工具 在地理空间数据分析中,常会用到许多地理分析的工具,在本模块中主要是针对常用的shapely.geopandas.folium.kepler.gl.geo ...

  9. 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...

最新文章

  1. 通俗易懂的TCP里面的三次握手以及四次挥手
  2. 无乱码的中文Joomla 1.0.15
  3. 一个老程序员的30年生涯回顾(译文)
  4. touchstart与click同时触发
  5. POJ--3974 Palindrome(回文串,hash)
  6. JEECG 开源平台全视频和文档
  7. C语言之局部变量全局变量变量存储方式
  8. 凭什么说 5G 安全无害?
  9. Hibernate 中upate,savaOrUpdate,merge的区别
  10. java后端技术有哪些_Java后端精选技术:什么是JVM?
  11. 业内为啥如此恨视觉中国
  12. MapABC 地图定位
  13. 十大程序员最实用的技术社区网站
  14. 计算机应用基础都学什么,计算机应用基础学习计划
  15. 机器指令程序编写方法
  16. 【弄nèng - Zookeeper】Zookeeper入门教程(三)—— 客户端Curator的基本API使用(Curator framework)
  17. 【硬盘】2021-希捷叠瓦盘(SMR)、垂直盘(CMR/PMR)型号、容量大全
  18. 使用 matplotlib绘制简单图形,保存图片的方法
  19. 冰点还原精灵使用技巧
  20. C#基于WindowsMediaPlayer实现音视频文件播放器

热门文章

  1. c语言用价格统计图书信息,C语言图书信息管理系统代码.doc
  2. CSDN更换博客皮肤教程
  3. 使用阿里云PTS测试LAMP环境性能
  4. 蓝领 java_蓝领的诅咒吧
  5. 在 Overleaf 中导入图片
  6. 计算机增加用户win7,win7系统添加用户组的两种方法(图文)
  7. JAVA实现二维码扫码登录
  8. 计算机复杂性的量度标准是什么意思,复杂度
  9. 游戏设计自学记录(26)
  10. Unity3D入门学习——火箭小游戏