编译器扩展-ScriptableWizard

可以创建一个对话框,然后统一修改某些组件的值

public class Change :ScriptableWizard
	{
        public int 字段 = 100;
        /// <summary>
        /// ///创建对话框 
        /// </summary>
        [MenuItem("龙之介工具箱/对话框", false, 100)]//按ctrl+E
        static void ToFly10()
        {
            ScriptableWizard.DisplayWizard<LongZhiJie.Change>("对话框名", "按钮名");
        }

		/// <summary>
        /// 当点击创建按钮时调用
        /// </summary>
        private void OnWizardCreate()
        {
			//获取选中的预制体
            GameObject[] gameObjects = Selection.gameObjects;
            foreach (GameObject gameObject in gameObjects)
            {
                LongZhiJie.qf qfs = gameObject.GetComponent<qf>();
                Undo.RecordObject(qfs, "qf");//存储操作,这样就能支持撤回
                qfs.x = 字段;//统一改值

            }
        }
    }

几个常用的回调函数

OnWizardCreate() /OnWizardUpdate() /OnWizardOtherButton()

 /// <summary>
/// 当create按钮被点击时调用
/// </summary>
private void OnWizardCreate()
{

}

/// <summary>
/// 当前字段值修改时调用
/// </summary>
private void OnWizardUpdate()
{

}
 /// <summary>
/// 当选择的物体发生改变
/// </summary>
private void OnSelectionChange()
{

}
/// <summary>
/// 另一个按钮被点击时
/// </summary>
private void OnWizardOtherButton()
{

}

本地存储变量:

EditorPrefs.GetInt/EditorPrefs.SetInt

	public int qf = 100;
 	private void OnEnable()
    { 
  		qf=EditorPrefs.GetInt("qf", qf); 
    } 
    private void OnWizardUpdate()
    { 
   		EditorPrefs.SetInt("qf", qf);
    }
     

特殊提示:helpString/errorString
进度条
{
EditorUtility.DisplayProgressBar(“进度”, “0/” + gameObjects.Length + “完成修改值”, 0);
EditorUtility.DisplayProgressBar(“进度”,i +"/" + gameObjects.Length + “完成修改值”, (float)i/gameObjects.Length);

EditorUtility.ClearProgressBar();
}

弹出提示文本 : ShowNotification(new GUIContent(“当前选择了”+Selection.gameObjects.Length + “个游戏物体”));

private void OnWizardUpdate()
{
    if(qf<=0)
    helpString = "qf最好大于0";///会显示帮助信息
    
    else 
    {
        errorString = "";///会显示错误信息
    }
}
private void OnWizardCreate()
{
    GameObject[] gameObjects = Selection.gameObjects;
    EditorUtility.DisplayProgressBar("进度", "0/" + gameObjects.Length + "完成修改值", 0);
    
	for(int i=0; i< gameObjects.Length;i++)
    {
        LongZhiJie.qf qfs = gameObjects[i].GetComponent<qf>();
       
        qfs.x = qf;
        EditorUtility.DisplayProgressBar("进度",i +"/" + gameObjects.Length + "完成修改值", (float)i/gameObjects.Length);
    }

    EditorUtility.ClearProgressBar();
}
 private void OnWizardOtherButton()
{
    ShowNotification(new GUIContent("当前选择了"+Selection.gameObjects.Length + "个游戏物体"));
}

撤销操作 :

{
Undo.RegisterCreatedObjectUndo(go, “create”);//可以生成物体之后的撤销
Undo.RecordObject(qfs, “qf”);//存储操作,这样就能支持撤回
}


		 private void OnWizardCreate()
        {
            Debug.Log("OnWizardCreate");
            GameObject[] gameObjects = Selection.gameObjects;
            EditorUtility.DisplayProgressBar("进度", "0/" + gameObjects.Length + "完成修改值", 0);
            for(int i=0; i< gameObjects.Length;i++)
            {
                LongZhiJie.qf qfs = gameObjects[i].GetComponent<qf>();
                Undo.RecordObject(qfs, "qf");//存储操作,这样就能支持撤回
                qfs.x = qf;
                EditorUtility.DisplayProgressBar("进度",i +"/" + gameObjects.Length + "完成修改值", (float)i/gameObjects.Length);

            }

            EditorUtility.ClearProgressBar();
        }


///创建自定义窗口
public class MyWindow : EditorWindow
{
    [MenuItem("Window/mywindow", false, 100)]
    static void ShowMyWindow()
    {
        MyWindow myWindow = EditorWindow.GetWindow<MyWindow>();
        myWindow.Show();
    }
   private  string name="";
    private void OnGUI()
    {
        GUILayout.Label("这是我的窗口");
        name=GUILayout.TextField(name);
        if (GUILayout.Button("创建"))
        {
            GameObject go = new GameObject(name);
            Undo.RegisterCreatedObjectUndo(go, "create");//可以撤销
        }
    }
}

传送门

编译器扩展-MenuItem

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值