在写完上两篇博客之后 这篇博客是最后一篇关于unity编译器的扩展功能了
大家如果有兴趣 可以查看前两篇博客的有关操作
有些重复的东西我就不再写了
又来上两篇的基础 这个应该不难理解
public class MyWindow:EditorWindow
{
[MenuItem("Window/My Window")]
static void ShowWindow()
{
MyWindow mywindow = EditorWindow.GetWindow<MyWindow>();
mywindow.Show();//显示
}
private string names = "";
private void OnGUI()
{
GUILayout.Label("这是我的窗口");
names = GUILayout.TextField(names);
if (GUILayout.Button("创建"))//点击创建按钮
{
GameObject go = new GameObject(names);
Undo.RegisterCreatedObjectUndo(go, "Create GameObject");
//注册操作记录 可撤销
}
}
}
这个代码的作用是产生一个窗体
可以一键创建物体
我们可以结合自己的知识 做出各种想要的效果
在下边我给大家制作一个可以一键创建和删除Hierarchy面板中物体的脚本 大家可以在开发中自己操作
其中的删除是输入名称之后遍历左右的物体 然后把名称是输入名称的无敌都删除(可撤回)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Linq;
public class MyWindow:EditorWindow
{
List<GameObject> lists = new List<GameObject>();//存放面板全部的物体
[MenuItem("Window/My Window")]
static void ShowWindow()
{
MyWindow mywindow = EditorWindow.GetWindow<MyWindow>();
mywindow.Show();//显示
}
private string Createnames = "";
private string Deletename = "";
private void OnGUI()
{
GUILayout.Label("快捷操作面板");//标签显示的文字
GUILayout.Label("输入创建物体名称");
Createnames = GUILayout.TextField(Createnames);
if (GUILayout.Button("创建"))//点击创建按钮
{
GameObject go = new GameObject(Createnames);
Undo.RegisterCreatedObjectUndo(go, "Create GameObject");
//注册操作记录 可撤销
}
GUILayout.Space(20);//插入空格
GUILayout.Label("输入删除物体名称");
Deletename = GUILayout.TextField(Deletename);//输入要删除的名称
获取面板中所有的游戏物体
var allTransforms = Resources.FindObjectsOfTypeAll(typeof(Transform));
//返回全部对象(类型)
var previousSelection = Selection.objects;
Selection.objects = allTransforms.Cast<Transform>().Where(x => x != null)
.Select(x => x.gameObject)
//如果你只想获取所有在Hierarchy中被禁用的物体,反注释下面代码
//.Where(x => x != null && !x.activeInHierarchy)
.Cast<UnityEngine.Object>().ToArray();
var selectedTransforms = Selection.GetTransforms(SelectionMode.Editable | SelectionMode.ExcludePrefab);
Selection.objects = previousSelection;
lists = selectedTransforms.Select(tr => tr.gameObject).ToList();
if (GUILayout.Button("删除"))
{
foreach(var go in lists)
{
if (go.name == Deletename)
{
Undo.DestroyObjectImmediate(go);
}
}
}
}
}
反正我觉的挺好用的 哈哈
祝大家学习工作顺利啦