Unity的编辑器可以通过写脚本进行界面定制,包括添加功能菜单,今天写游戏Demo用到了记录一下。

为Unity添加子菜单

示例程序

[AddComponentMenu("Defend Homeland/GridNode")]
public class GridNode : MonoBehaviour
{
......
}

子菜单预览

相应地在Unity的Component菜单下就会有我添加的脚本

在编辑器中执行函数

示例代码

    //构建地图
[ContextMenu("BuildMap")]
void BuildMap ()
{
.....
}

把脚本绑定在GameObject上面时,点击右上角或者鼠标右键,就会看到在代码中添加的函数,点击即可执行。

public字段不显示在Inspector

示例代码

    //不在Inspector显示
[HideInInspector]
public int m_life = 3;//生命
public int m_wave = 1;//波数
public int m_point = 10;//点数

效果预览

而这样在检视面板中就不会显示出m_life这个public类型,只有其它两个

自定义菜单栏

示例代码

using UnityEngine;
using UnityEditor;
using System.Collections; /// <summary>
///
/// 作用:
/// 日期:2013-09-11
/// </summary> [AddComponentMenu("Defend Homeland/PathTool")]
public class PathTool : ScriptableObject
{
static PathNode m_parent = null; //新建一个菜单项【PathTool】,子菜单项(Set Parent)快捷键为 Ctrl + Q
[MenuItem("PathTool/Set Parent %q")]
static void SetParent ()
{
//如果没有选中任何物体,或选择物体数量大于1,则返回
if (!Selection.activeGameObject || Selection.GetTransforms (SelectionMode.Unfiltered).Length > 1)
return; //如果选中,将选中的物体的tag设为pathnode
if (Selection.activeGameObject.tag.CompareTo ("pathnode") == 0) {
//设置父节点
m_parent = Selection.activeGameObject.GetComponent<PathNode> ();
}
} //新建菜单项[PathTool/Set NextChild] ,快捷键为Ctrl+w
[MenuItem("PathTool/Set NextChild %w")]
static void SetNextChild ()
{
//如果没有选中任何物体,或选择的物体数量大于1,则返回
if (!Selection.activeGameObject || Selection.GetTransforms (SelectionMode.Unfiltered).Length > 1)
return; if (Selection.activeGameObject.tag.CompareTo ("pathnode") == 0) {
//设置子节点
m_parent.SetNext (Selection.activeGameObject.GetComponent<PathNode> ());
m_parent = null;
}
}
}

添加菜单效果

回到Unity编辑器界面,界面发生了如下变化

资料

这些经验及小技巧来自我正在读的书《Unity3D手机游戏开发,感谢作者!

定制你的Unity编辑器的更多相关文章

  1. 【Unity优化】如何实现Unity编辑器中的协程

    Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...

  2. 【Unity优化】怎样实现Unity编辑器中的协程

    Unity编辑器中何时须要协程 当我们定制Unity编辑器的时候,往往须要启动额外的协程或者线程进行处理.比方当运行一些界面更新的时候,须要大量计算,假设用户在不断修正一个參数,比方从1变化到2.这种 ...

  3. 实现Unity编辑器模式下的旋转

    最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...

  4. 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理

    一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...

  5. Unity编辑器:自定义编辑器样式——GUIStyle

    通过GUIStyle,可以自定义Unity编辑器的样式. GUIStyle可以new一个全新的实例,这样,需要自己处理所有自己需要的效果. GUIStyle还可以基于已经存在的实例new一个新的实例, ...

  6. 使用C#的Conditional特性与Unity编辑器宏命令做条件编译

    概要 在传统的C#项目中,用Conditional特性做条件编译时,需要在Visual Studio中项目的属性里添加上条件编译符号,用法参考这篇文章. 而在Unity项目中,条件编译符号需要在Uni ...

  7. 通过反射调用Unity编辑器提供的各种功能

    Unity编辑器功能丰富易上手,其实编辑器提供的大多数菜单操作,在代码里面都是能够找到对应接口的,但是这些接口都没有对我们开放,怎么办? 很简单,直接使用反射调用即可. 首先使用Reflector或I ...

  8. 【Unity】2.1 初识Unity编辑器

    分类:Unity.C#.VS2015 创建日期:2016-03-26 一.简介 本节要点:了解Unity编辑器的菜单和视图界面,以及最基本的操作,这是入门的最基础部分,必须掌握. 二.启动界面 双击桌 ...

  9. Unity编辑器扩展 Chapter7--使用ScriptableObject持久化存储数据

    Unity编辑器扩展 Chapter7--使用ScriptableObject持久化存储数据 unity unity Editor ScirptableObject  Unity编辑器扩展 Chapt ...

随机推荐

  1. web安全——系统(Linux)

    简介 最小(少)原则,是安全的重要原则.最小的权限,最小的用户,最少的服务,最少的进程,是最安全的. 系统安全包括:文件系统保护.用户管理安全.进程的保护以及日志的管理. 场景 确保服务最少,每个都是 ...

  2. 简单理解JavaScript闭包

    很多关于JS的书籍例如<JavaScript权威指南>或者<高程>都把闭包解释的晦涩难懂,萌新们是怎么也看不懂啊!不过别怕,今天我就用很简单的方式给大家讲解下到底什么是闭包.这 ...

  3. Eclipse反编译工具Jad及插件JadClipse配置

    Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java,javac命令是一样的.不过因为是控制台运行,所以用起来不太方便.不过幸好有一个eclipse的插件JadClipse ...

  4. Web打印控件

    Lodop是什么? 有人说她是Web打印控件,因为她能打印.在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来: 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几 ...

  5. andriod 带看括弧的计算器

    界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...

  6. SharePoint 2013 App Remote Event Receivers

    当我们在使用App的时候,就会发现一些问题,比如那些网站部署.更新或者卸载了,我们很关心我们的App是否有人用,这就需要远程事件接收器了. 1.在我们的测试App的解决方案上选中鼠标,按F4弹出属性, ...

  7. [C/C++] VS 2015 C++ 插件

    Visual Studio2015 Community一些必备插件 ReSharper C++ 各种语言版本的代码重构,代码风格,代码修正功能,非常强大,可惜不是免费的,不过好在可以破解呢. Vias ...

  8. Supermemo背单词7周年纪念

    从2007年2月1日开始,用Supermemo背单词7周年了,在2013年11月21日将单词表Reset,重新开始Review以前背过的单词,并慢慢加入听写VOA时遇到的生词.

  9. [Android]ViewPager如何只初始化一个页面

    使用过ViewPager的应该都知道,ViewPager的setoffscreenpagelimit()方法,使用该方法可以设置在ViewPager滑动时,左右两侧各保存多少个页面,那我们直接设置se ...

  10. iOS--开发之手势解锁

    本文主要介绍通过手势识别实现手势解锁功能,这个方法被广泛用于手机解锁,密码验证,快捷支付等功能实现.事例效果如下所示. 首先,我们先分析功能的实现过程,首先我们需要先看大致的实现过程: 1.加载九宫格 ...