编译器扩展参考

也就自己看的懂吧, 先随便记下

原教程是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 ();
	}
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值