也就自己看的懂吧, 先随便记下
原教程是Siki老师的 编译器扩展
为上面工具栏添加 一个按钮
using UnityEditor;
using UnityEngine;
public class Tools {
//[MenuItem("Tools/test1",false,1)]
// [MenuItem("Window/mytool/test")]
// [MenuItem("GameObject/mytool/test",false,1)]
//静态方法可以直接调用
//priority 越小显示在越上面
//相差11 就出现横杠 中线
// [MenuItem("Assets/Tools/ShowInfo",false,31)]
//[MenuItem("Tools/ShowInfo _i",false,31)]
//使用 %=ctrl #=shift &= alt
[MenuItem("Tools/ShowInfo % I",false,31)]
static void ShowInfo()
{
Debug.Log (Selection.gameObjects);
//Debug.Log (Selection.objects.Length);
//.Log (Selection.activeObject.name);
//显示第一个选中的游戏物体
}
//[MenuItem("Tools/test3",false, 20)]
// static void test1()
// {
// Debug.Log ("测试编辑器");
// }
//
//[MenuItem("Assets/Tools/MyDelete _d",false,32)]
//[MenuItem("Tools/MyDelete _d",false,32)]
[MenuItem("Tools/MyDelete",true,32)]
static bool MyDeleteValidate()
{
if (Selection.objects.Length > 0)
return true;
else
return false;
}
[MenuItem("Tools/MyDelete",false,32)]
static void MyDelete()
{
foreach (Object obj in Selection.objects) {
// GameObject.DestroyImmediate (obj);
Undo.DestroyObjectImmediate(obj);
//使用Undo删除的游戏物体可以撤销
}
Debug.Log ("测试编辑器");
}
}
1.在Window菜单下 创建一个自己的窗口
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class MyWindow : EditorWindow {
[MenuItem("Window/ShowMyWindow")]
static void ShowMyWindow()
{
MyWindow window = EditorWindow.GetWindow<MyWindow>();
window.Show ();
}
private string name;
void OnGUI()
{
GUILayout.Label ("这是我的窗口");
name = GUILayout.TextField (name);
if (GUILayout.Button ("创建")) {
GameObject go = new GameObject (name);
//下面这句代码 可回撤
Undo.RegisterCreatedObjectUndo (go, "create gameobject");
}
}
}
给某个脚本组件 右击 添加一个方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class PlayerEditor {
//通过context 大写 /组件名/按钮名
[MenuItem("CONTEXT/PlayerHealth/InitHeathAndSpeed")]
static void InitHeathAndSpeed(MenuCommand cmd)// MenuCommand 是当前正在操作的组件对象
{
Debug.Log (cmd.context.GetType ().FullName);
CompleteProject.PlayerHealth helth = cmd.context as CompleteProject.PlayerHealth;
helth.startingHealth = 200;
helth.flashSpeed = 10;
Debug.Log (cmd.context.name);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class EnemyChange : ScriptableWizard {
const string changeStartHealthValueKey = "EnemyChange.changeStartHealthValue";
const string changeSinkSpeedValueKey = "EnemyChange.changeSinkSpeedValue";
[MenuItem("Tools/CreateWizard")]
static void CreateWizard()
{
//创建弹窗
ScriptableWizard.DisplayWizard<EnemyChange> ("统一修改敌人","ChangeValue","Other Button");
}
//当窗口被创建出来 调用
void OnEnable()
{
changeStartHealthValue = EditorPrefs.GetInt (changeStartHealthValueKey, changeStartHealthValue);
changeSinkSpeedValue = EditorPrefs.GetInt (changeSinkSpeedValueKey, changeSinkSpeedValue);
}
public int changeStartHealthValue = 10;
public int changeSinkSpeedValue = 1;
//检测Creat按钮的点击
void OnWizardCreate()
{
GameObject[] enemyPrefabs = Selection.gameObjects;
EditorUtility.DisplayProgressBar ("进度", "/0" + enemyPrefabs.Length + "完成修改值",0);
int count = 0;
foreach(GameObject obj in enemyPrefabs)
{
CompleteProject.EnemyHealth heath = obj.GetComponent<CompleteProject.EnemyHealth> ();
Undo.RecordObject (heath, "changevalue");
heath.startingHealth += changeStartHealthValue;
heath.sinkSpeed += changeSinkSpeedValue;
count++;
//进度条
EditorUtility.DisplayProgressBar ("进度",count+ "/" + enemyPrefabs.Length + "完成修改值", (float) count/enemyPrefabs.Length);
}
Debug.Log ("Create");
ShowNotification(new GUIContent(Selection.gameObjects.Length +"游戏物体的值被修改"));
Debug.Log ("ShowNotification");
}
void OnWizardOtherButton()
{
OnWizardCreate ();
Debug.Log ("other Button");
}
void OnWizardUpdate()
{
errorString = null;
helpString = null;
Debug.Log ("Update");
if (Selection.gameObjects.Length > 0) {
helpString = "您当前选择了"+ Selection.gameObjects.Length + "个敌人";
} else {
errorString = "请选择至少一个敌人";
}
EditorPrefs.SetInt(changeStartHealthValueKey,changeStartHealthValue);
EditorPrefs.SetInt(changeSinkSpeedValueKey,changeSinkSpeedValue);
}
void OnSelectionChange()
{
OnWizardUpdate ();
}
}