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. winform(数据导出、TreeView的使用)

    一.数据导出:目标: 将数据库的数据导出成Excel工作表或是Word文档 基本步骤: 1.首先将数据库中的数据封装成实体类 2.写好查询数据的方法,在主窗体中调用查看所有的数据 3.利用saveFi ...

  2. andriod 用户名和密码

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

  3. SharePoint 2013 "通知我"功能简介

    功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是Sh ...

  4. 推荐几个优秀的java爬虫项目

    java爬虫项目   大型的: Nutch apache/nutch · GitHub 适合做搜索引擎,分布式爬虫是其中一个功能. Heritrix internetarchive/heritrix3 ...

  5. 【读书笔记】iOS-编码对象

    Cocoa具备一种机制来将对象自身转换为某种格式并保存到磁盘中.对象可以将它们的实例变量和其他数据编码为数据块,然后保存到磁盘中.以后将这些数据块读回到内存中,并且还能基于保存的数据创建新对象.这个过 ...

  6. mybatis实战教程(mybatis in action),mybatis入门到精通(转)

    转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加 ...

  7. IOS 网络浅析-(七 JSON解析之三方JSONKit)

    在这个网络横行的时代......... 有没有小说的感觉,哈哈

  8. 饭团(1):用NABCD大法为项目奠基

    上一篇文章:提升效率的开发工具 提到高效的开发工具就像催化剂,加速项目开发.这篇文章提到的NABCD大法,就像一份地图,指引项目往正确的方法上发展. 选择比努力更重要.一个项目成功自然离不开码农们的努 ...

  9. onmousedown,onmouseup,onclick同时应用于一个标签节点Element

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. 大家一起和snailren学java-(五)访问控制权限

    “感觉中间断了一天,可是数数好像又没断……(-_^)” 这一天我们来再次细致讨论一下java的访控机制.java的访控机制其实在编程架构上非常实用的,也就是所谓的隐藏具体实现或者封装. 首先看看使用场 ...