unity编辑器扩展功能|unity编译器扩展功能(自定义窗口的添加)

unity有一个很强大的功能 就是我们自己可以创建窗口
像这样unity编辑器扩展功能|unity编译器扩展功能(自定义窗口的添加)
文章图片

unity编辑器扩展功能|unity编译器扩展功能(自定义窗口的添加)
文章图片

unity编辑器扩展功能|unity编译器扩展功能(自定义窗口的添加)
文章图片

对你没有看错 这个就是自己添加的 我们可以从Tools等选项中打开 然后很容易的同时修改很多不同物体之间的参数
其中的每个字 每句话 按钮等都可以由我们来编辑
比如在一个稍微大的一点的游戏中 我们可能设置好多敌人
每种敌人出来模型的不同 我们还可能设置不同的血量 行走速度 攻击速度等等参数
如果我们这时需要同时改变二三十种敌人的参数 是很麻烦的
这时可以用我们的窗口来快捷操作
当然这只是一个最最简单的使用
制作过程 我推荐大家可以看下我的上一篇博客 对这个会很有帮助
我的上一篇博客(https://blog.csdn.net/weixin_44302602/article/details/103655488)
上篇博客中介绍到了Selection类和关于undo注册操作记录的知识 这里就不多说了
【unity编辑器扩展功能|unity编译器扩展功能(自定义窗口的添加)】然后呢 给大家把代码先弄出来
首先创建一个要改变的脚本(类)

public class Text : MonoBehaviour { public int hp ; public int speed; }

然后是创建窗体的脚本
注意:这个脚本要继承ScriptableWizard
public class Hp : ScriptableWizard { [MenuItem("Tools/CreateWizard")]//创建对话框 static void CreateWizard() { ScriptableWizard.DisplayWizard("统一修改", "Change value","Change"); //三个参数分别是标题名称 第一个按钮名称 第二个按钮名称 //第一个按钮点击后会关闭窗口第二个不会 }public intAddHp; public intAddSpeed; public GameObject set; public Transform get; private void OnEnable() { //当窗口被创建出来被调用的 AddHp = EditorPrefs.GetInt("AddHp"); AddSpeed = EditorPrefs.GetInt("AddSpeed"); //保存上次的数据第一次打开会和开始初始化一样的 }private void OnWizardCreate() { GameObject[] emenys = Selection.gameObjects; //返回数组 foreach (var go in emenys)//遍历选中的物体 { Text tt = go.GetComponent(); Undo.RecordObject(tt, "record"); //实现记录操作撤销 tt.hp += AddHp; tt.speed += AddSpeed; } ShowNotification(new GUIContent(Selection.gameObjects.Length + "个游戏物体被修改了")); //提示输出 语句(出现然后消失)} //当字段被修改的时候调用 private void OnWizardUpdate() {errorString = null; //置空错误信息 helpString = null; //置空提示信息 if(Selection.gameObjects.Length > 0) { helpString = "您当前选择了" + Selection.gameObjects.Length + "个物体"; } else { errorString = "请至少选择一个物体"; } EditorPrefs.SetInt("AddHp", AddHp); EditorPrefs.SetInt("AddSpeed", AddSpeed); //相对于运行过程中的PlayerPrefs保存相同的用法 } //当选择的物体发生改变的时候触发该方法 private void OnSelectionChange() { OnWizardUpdate(); } //第二个按钮的点击事件 private void OnWizardOtherButton() { OnWizardCreate(); } }

我的注释可以说写的非常细致了 大家自己认真看一下应该不难理解
我们可以测试一下 可以做到同时修改好多物体的参数(前提挂载Text脚本)

    推荐阅读