zoukankan      html  css  js  c++  java
  • 关于Unity编辑器拓展的一些小技巧

    首先:对于编辑器拓展的脚本都应该放在Assets/Editor文件夹下

    然后根据需要实现相对应的方法:

    1.实现简单菜单栏按钮触发

    1   //Unity上方菜单栏添加自定义按钮触发方法
    2     [MenuItem("MochaTools/DoMenuEvent")]
    3     static void DoMenuEvent()
    4     {
    5         Debug.Log("DoMenuEvent");
    6     }

    2.菜单栏按钮触发的方法拓展(此处举例:当选中游戏物体时按钮启用,未选中任何游戏物体时按钮至灰色弃用)

     1  //Unity上方已经存在的菜单栏添加自定义按钮触发方法
     2     //其中参数为(1.菜单按钮名 2.判断当前按钮功能是否启用3.所处的层级,越低显示越靠前,默认为1000)
     3     //所以想要在Hierarchy面板上右键添加功能,在GameObject目录下将层级添加靠前即可
     4     //所以想要在Project面板上右键添加功能,在Assets目录下将层级添加即可
     5     [MenuItem("GameObject/DoHaveMenuEvent",true,1)]
     6     static bool DoHaveMenuEventJudge() //同目录不同方法名
     7     {
     8         //这里设置条件返回true则同目录下的按钮才执行,返回false则同目录下的按钮至灰
     9         if (Selection.objects.Length > 0) return true;
    10         else return false;
    11     }
    12     [MenuItem("GameObject/DoHaveMenuEvent", false, 1)]
    13     static void DoHaveMenuEvent()
    14     {
    15         Debug.Log("DoHaveMenuEvent");
    16     }

    3.当同一层级下的按钮层次相差10以上时,菜单栏按钮间形成直线分割样式

     1  //当相邻两个菜单栏按钮之间的层级相差10以上时,会出现一条分割线
     2     [MenuItem("MochaTools/DoMenuEvent1",false ,0)]
     3     static void DoMenuEvent1()
     4     {
     5         Debug.Log("DoMenuEvent1");
     6     }
     7     [MenuItem("MochaTools/DoMenuEvent2", false, 11)]
     8     static void DoMenuEvent2()
     9     {
    10         Debug.Log("DoMenuEvent2");
    11     }

    4.对挂载在游戏物体身上的组件添加右键按钮

     1 //对挂载在游戏物体身上的组件(系统组件或挂载的脚本)进行右键菜单添加操作功能按钮
     2     //CONTEXT(CONTEXT必须全大写)/组件名/右键出来的方法名
     3     [MenuItem("CONTEXT/Transform/DoComponentEvent")]
     4     static void DoComponentEvent(MenuCommand cmd)   //参数cmd:包含该组件的数据信息用cmd.context表示
     5     {
     6         //测试使用方法
     7         //获取该组件
     8         Transform tTransform = cmd.context as Transform;
     9         //设置该组件位置
    10         tTransform.position = Vector3.one;
    11     }

    5.对物体的选中(单个或多个)操作

     1 //选中单个游戏物体并进行操作
     2     [MenuItem("MochaTools/DoMenuEvent3")]
     3     static void DoMenuEvent3()
     4     {
     5         //Selection.activeGameObject只对Hierarchy面板中选中的物体有效
     6         //如果选中多个,则以第一个选中的游戏物体为准
     7         Transform tTransform = Selection.activeGameObject.transform;
     8 
     9         Debug.Log(tTransform.name);
    10     }
    11 
    12     //选中多个游戏物体并进行操作
    13     [MenuItem("MochaTools/DoMenuEvent4")]
    14     static void DoMenuEvent4()
    15     {
    16         //Selection.objects对Hierarchy面板中选中的物体以及Project面板下的预制体有效
    17         //如果选中多个,则以第一个选中的游戏物体为准
    18         Object[] tObjs= Selection.objects;
    19         for (int i = 0; i < tObjs.Length; i++)
    20         {
    21             Debug.Log(tObjs[i].name );
    22         }
    23     }

    6.对选中的游戏物体进行删除操作

     1  //删除选中的多个游戏物体(必须用DestroyImmediate,而不能用Destory)
     2     //只能在Hierarchy面板上进行删除撤销,对预制体进行操作会报错崩溃
     3     //选中多个游戏物体并进行操作
     4     [MenuItem("MochaTools/DoMenuEvent5")]
     5     static void DoMenuEvent5()
     6     {
     7         //Selection.objects对Hierarchy面板中选中的物体以及Project面板下的预制体有效
     8         //如果选中多个,则以第一个选中的游戏物体为准
     9         Object[] tObjs = Selection.objects;
    10         for (int i = 0; i < tObjs.Length; i++)
    11         {
    12             //删除不可撤销
    13             //GameObject.DestroyImmediate(tObjs[i]);
    14             //利用Undo进行的删除可以Ctrl+Z撤销回来
    15             Undo.DestroyObjectImmediate(tObjs[i]);
    16         }
    17     }

    7.对菜单栏按钮添加快捷键

     1   //为菜单栏按钮添加快捷键
     2     //在名字后面添加(大小写无关)
     3     //1.如果为单键位则添加  空格_键位   eg: _t 
     4     //2.如果为组合件则添加  空格组合件转码键位    eg:Ctrl+Q  即%q
     5     //组合件转码 %=Ctrl  #=Shift &=Alt
     6     [MenuItem("MochaTools/DoMenuEvent6 %Q")]
     7     static void DoMenuEvent6()
     8     {
     9         Debug.Log("DoMenuEvent6");
    10     }

    8.对自定义脚本的右键添加方法,以及脚本中属性的右键添加方法

     1 /*************************************************
     2  * 项目名称:Unity编辑器拓展
     3  * 脚本创建人:魔卡
     4  * 脚本创建时间:2017.12.18
     5  * 脚本功能:测试脚本
     6  * ***********************************************/
     7 using System.Collections;
     8 using System.Collections.Generic;
     9 using UnityEngine;
    10 
    11 //测试脚本类
    12 public class TempScriptsByMocha : MonoBehaviour
    13 {
    14     [ContextMenuItem( "加血","AddHp")]    //属性右键按钮方法  参数:1.右键按钮名字 2.触发的方法
    15     public int m_hp = 10;
    16 
    17     [ContextMenu( "AddHp")]     //脚本右键方法  参数:右键按钮名字
    18     void AddHp()
    19     {
    20         m_hp += 20;
    21     }
    22 
    23 
    24 }
  • 相关阅读:
    Codeforces Round #443 (Div. 2)
    Matplotlib学习---用seaborn画联合分布图(joint plot)
    Matplotlib学习---用matplotlib和sklearn画拟合线(line of best fit)
    Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)
    Matplotlib学习---用matplotlib画误差线(errorbar)
    Matplotlib里颜色,标记,线条类型参数的选择(colors, markers, line styles)
    Matplotlib学习---用matplotlib画阶梯图(step plot)
    Matplotlib学习---用matplotlib画箱线图(boxplot)
    Matplotlib学习---用seaborn画相关矩阵图(pair plot)
    Matplotlib学习---用matplotlib画面积图(area chart)
  • 原文地址:https://www.cnblogs.com/mrmocha/p/8058372.html
Copyright © 2011-2022 走看看