8991人加入学习
(22人评价)
Unity编辑器扩展(Advanced Editor Scripting)
价格 免费

创建一个脚本 :ScriptableWizard 

定义修改项 public int ... 

                  public int... 

创建一个菜单按钮

 [menuitem()] 

static void createWizard(){ scriptableWizard.DisplayWizard<调用类名> }

[展开全文]
HaGaoKo · 2017-07-29 · 该任务已被删除 0

[contestmeun("id,setcolcor")] 

void setcolor(){ }

[展开全文]
HaGaoKo · 2017-07-29 · 该任务已被删除 0

[menuItem (,true,)] 

static bool Validate(){}

[展开全文]
HaGaoKo · 2017-07-29 · 该任务已被删除 0

%ctrl

#=

&

[展开全文]
HaGaoKo · 2017-07-29 · 该任务已被删除 0

undo 撤销

[展开全文]
HaGaoKo · 2017-07-29 · 该任务已被删除 0
//创建自定义窗口
引用命名空间using Editor,脚本继承EditorWindow
[MenuItem(Window/show mywindow)]
static void ShowMywindow()
{
  Mywindow window = EditorWindow.GetWindow<Mywindow>();
  window.Show();      //让窗口弹出来
}
void OnGUI()          //给窗口添加内容用OnGUI方法
{
}

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

 

//显示进度条
脚本名:ScriptableWizard
{
   [MenuItem(Tools/CreateWizard)]
   staic void CreateWizard()
   {
     ScriptableWizard.DisplayWizard<脚本名>("对话框标题名")
   }
   public int speed = 5;
   public int num = 6;
   void OnWizardCreate()                  //检测Create按钮的点击
   {
      GameObject[]enemyProfabs = Selection.gameObjecs;
      EditorUtility.DisplayProgressBar("进度","0/"+enemyProfabs.Length+"完成修改值",0);(新加代码)
      int count = 0;                                 //计数器(新加代码)
      foreach(GameObject go in enemyProfabs )
      {
         脚本名(要更改属性的脚本) 变量名 = go.Getcompoment<脚本名>();
         变量名.speed+=speed;
         变量名.num +=num ;
         count++;       (新加代码)
         EditorUtility.DisplayProgressBar("进度",count+"/"+enemyProfabs.Length+"完成修改值",(float)count/enemyProfabs.Length);(新加代码)
      }
     enemyProfabs.ClearProgressBar();                //进度条加载完成关闭(新加代码)
   }
}

//EditorUtility.DisplayProgressBar第一个参数为进度条名称,第二个参数为加载个数,0代表从0开始加载,最大为1
//可以结合13课与14课合并笔记学习
[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0
//保存更改的数据
const string changeStartHealthValueKey = "*******";
const string changeSinkSpeedValueKey = "****";
void OnEnable()                       //当窗口被创建出来的时候调用
{
   a = EditorPrefa.GetInt(changeStartHealthValueKey,a);
   b = EditorPrefa.GetInt(changeSinkSpeedValueKey,b)
}
EditorPrefs.SetInt(changeStartHealthValueKey,a);
EditorPrefs.SetInt(changeSinkSpeedValueKey,b);

//a,b为要更改的字段变量,a,b变量相当于13课与14课笔记中的int变量
//请结合13课和14课合并的笔记学习

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0
//提示信息
ShowNotification(new GUIContent("提示信息"));

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0
ScriptableWizard.DisplayWizard<脚本名>("对话框标题名","Change Value","Change")

void OnWizardOtherButton()
{  
}



//Change一直改变字段值,不关闭对话框,Change Value改变一次字段值,关闭对话框,Change实现其逻辑功能一定要有OnWizardOtherButton方法。
//具体详细代码看12课与13课合并笔记

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0
//当前字段被修改的时候调用
void OnwizardUpdate()
{
}

//当选择物体改变的时候被调用
void OnSelectionChange()
{
}

//errorString = "",错误提示信息。

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0
//撤销操作
Undo.RecordObject(hp,"*****");


//撤销操作方法需要在属性改变之前调用

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0
/*
本笔记13课与14课合并
**/

//弹出对话框
脚本名:ScriptableWizard
{
   [MenuItem(Tools/CreateWizard)]
   staic void CreateWizard()
   {
     ScriptableWizard.DisplayWizard<脚本名>("对话框标题名","Change Value")
   }
   public int 变量名 = ***;
   public int 变量名 = ***;
}

///需要加上using unityEditor指令,DisplayWizard(显示对话框),Change Value按钮名称,默认为Create




//改变拥有共同属性的物体的属性
脚本名:ScriptableWizard
{
   [MenuItem(Tools/CreateWizard)]
   staic void CreateWizard()
   {
     ScriptableWizard.DisplayWizard<脚本名>("对话框标题名")
   }
   public int speed = 5;
   public int num = 6;
   void OnWizardCreate()                  //检测Create按钮的点击
   {
      GameObject[]enemyProfabs = Selection.gameObjecs;
      foreach(GameObject go in enemyProfabs )
      {
         脚本名(要更改属性的脚本) 变量名 = go.Getcompoment<脚本名>();
         变量名.speed+=speed;
         变量名.num +=num ;
      }
   }
}

///需要加上using unityEditor指令;DisplayWizard(显示对话框);点击必须调用OnWizardCreate方法

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

//ContextMenu只能改变某个脚本右键菜单选项,MenuItem为通用

[ContextMenu("SetColor")]
void SetColor()
{
   /////
}

//ContextMenuItem给脚本某个属性添加方法(鼠标右击)
[ContextMenuItem("Add Hp","AddHp")]
void AddHp()
{
  /////
}

/*
1、ContextMenu和ContextMenuItem不需要using UnityEditor的指令
2、ContextMenuItem第一个参数

**/

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

//false参数控制菜单是否可以启用

[MenuItem("GameObject/delete",false,11)]

static void Mydelete()

{

   foreach(Object o in Selection.objects)

     {

          Undo.DestroyObjectImmediate(o);

      }

}

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

1、给菜单加快捷键

//单个快捷键用法,在路径后面必须要有空格,组合键也一样,然后_+快捷键

①[MenuItem("Tools/delete  _t"),false,10]

 

//组合键,%代表ctrl,#代表shift,&代表alt

②[MenuItem("Tools/delete  %a"),false,10]

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

//有撤销的删除操作,Ctrl+Z撤销

1、删除Hierarchy面板上组件。

[MenuItem("GameObject/delete",false,11)]

static void Mydelete()

{

   foreach(Object o in Selection.objects)

     {

          Undo.DestroyObjectImmediate(o);

      }

}

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

//这种删除不会有撤销操作,因为没有注册

1、删除Hierarchy面板上组件。

[MenuItem("GameObject/delete",false,11)]

static void Mydelete()

{

   foreach(Object o in Selection.objects)

     {

          GameObjects.DestroyImmediate(o);

      }

}

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

①先添加要操作的功能:[MenuItem("CONTEXT/组件名/按钮名")]

1、static void InitHealthAndSpeed(MenuCommand cmd)     //MenuItem是当前正在操作的组件。

{

②获取要操作的组建:MenuCommand cmd

③组建名 变量名 = cmd.context as 组件名

④变量名.属性 (需要更改的属性) = *****

}

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

1、给某个脚本右键菜单栏中添加功能[MenuItem("CONTEXT/组件名/按钮名")]。

 

[展开全文]
初夏繁华如梦 · 2017-07-05 · 该任务已被删除 0

授课教师

SiKi学院老师

课程特色

图文(1)
视频(20)

学员动态