Unity版本5.3.2

如下图所示,ToolBar就是Unity顶部的那一横条。这里的所有按钮一般情况下都得我们手动的用鼠标去点击。这篇文章我们说说如果自动操作它们

1.自动点击左边四个按钮 (拖动、坐标、旋转、缩放、矩形)

[MenuItem("ToolBar/Tools")]
static void ToolsMethod()
{
if(Tools.current == Tool.View)
Tools.current = Tool.Move;
else if(Tools.current == Tool.Move)
Tools.current = Tool.Rotate;
else if(Tools.current == Tool.Rotate)
Tools.current = Tool.Scale;
else if(Tools.current == Tool.Scale)
Tools.current = Tool.Rect;
else if(Tools.current == Tool.Rect)
Tools.current = Tool.View;
}

那么如果我不像自动设置,只是想监听手动点击的事件如何?

[InitializeOnLoadMethod]
static void StartInitializeOnLoadMethod()
{
SceneView.onSceneGUIDelegate = delegate(SceneView sceneView) {
if (Event.current != null && Event.current.button == 1 && Event.current.type <= EventType.mouseUp)
{
Vector2 mousePosition = Event.current.mousePosition;
EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "ToolBar/",null);
Event.current.Use();
}
};
Type t = typeof(Tools);
FieldInfo info =t.GetField ("onToolChanged", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic); //这段代码所属的类名, 请把这个换成你的类名
MethodInfo method = typeof(MyEditor).GetMethod ("OnToolChangedFunc", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
Delegate d = Delegate.CreateDelegate(info.FieldType,method);
info.SetValue(null,d);
} static void OnToolChangedFunc(Tool from, Tool to)
{
//这里还可以得到from 和 to 也就是从哪里到哪里
Debug.Log(Tools.current +" ");
}

OK.如下图所示,当我切换标签的时候,就会输出切换的事件。

2.自动点击 Center Local 这两个辅助按钮

	[MenuItem("ToolBar/pivotMode")]
static void pivotMode()
{
Tools.pivotMode = (Tools.pivotMode == PivotMode.Center)? PivotMode.Pivot : PivotMode.Center;
Refresh();
} [MenuItem("ToolBar/pivotRotation")]
static void pivotRotation()
{
Tools.pivotRotation = (Tools.pivotRotation == PivotRotation.Global)? PivotRotation.Local : PivotRotation.Global;
Refresh();
}
static void Refresh()
{
MethodInfo info = typeof(Tools).GetMethod("RepaintAllToolViews",BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static);
info.Invoke(null,null);
}

3.自动点击 Play Pause Step 这三个播放按钮

[MenuItem("ToolBar/Play")]
static void Play()
{
EditorApplication.ExecuteMenuItem("Edit/Play");
}
[MenuItem("ToolBar/Pause")]
static void Pause()
{
EditorApplication.ExecuteMenuItem("Edit/Pause");
}
[MenuItem("ToolBar/Step")]
static void Step()
{
EditorApplication.ExecuteMenuItem("Edit/Step");
}

还是,那么如果我不像自动设置,只是想监听手动点击的事件如何?这样就可以监听了。

[InitializeOnLoadMethod]
static void StartInitializeOnLoadMethod()
{ EditorApplication.playmodeStateChanged = delegate() {
Debug.Log("isPlaying :" + EditorApplication.isPlaying);
Debug.Log("isPaused :" +EditorApplication.isPaused);
Debug.Log("isPlayingOrWillChangePlaymode :" +EditorApplication.isPlayingOrWillChangePlaymode);
};
}

4.云 Account 按钮

这是云端账号系统,应该没有自动的需求吧?

5.Layers 按钮

这是设置游戏中所有层级的菜单。“小眼睛”表示是否在Scene视图中看见。“小锁头”表示是否可以在Scene视图中被鼠标选择到。 具体 内容大家可以看我之前的文章 #你好Unity3D#限制SceneView视图中不可选择游戏对象

自动设置的代码

[MenuItem("ToolBar/SetLayer")]
static void SetLayer()
{
Tools.visibleLayers = (1<< LayerMask.NameToLayer("UI")) | (1<< LayerMask.NameToLayer("Default"));
Tools.lockedLayers = (1<< LayerMask.NameToLayer("UI")) | (1<< LayerMask.NameToLayer("Default"));
}

6.Layout布局按钮 自动设置的代码如下

[MenuItem("ToolBar/SetLayout")]
static void SetLayout()
{
//把对应layout的名子填正确就行
EditorApplication.ExecuteMenuItem("Window/Layouts/2 by 3");
}

7.今天有朋友问我如何在SceneView通过脚本设置成顶视图,其实 上、下、左、右、前、后都可以通过脚本设置的。代码如下。

[MenuItem("GameObject/Top View")]
static void Start()
{
SceneView view = SceneView.lastActiveSceneView;
if(view)
{
view.rotation = Quaternion.Euler(90f, 0f, 0f);
view.pivot = Vector3.zero;
view.size = 5f;
view.orthographic = true;
}
}

Unity3D研究院编辑器之脚本设置ToolBar及脚本设置顶视图的更多相关文章

  1. 《转》Unity3D研究院编辑器之创建Lua脚本模板

    Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧. 设置一下Lua脚本的模板地址 :  Assets/Editor/Lua/Template/lua.lua ...

  2. Unity3D研究院编辑器之脚本设置ToolBar

    Unity版本5.3.2 如下图所示,ToolBar就是Unity顶部的那一横条.这里的所有按钮一般情况下都得我们手动的用鼠标去点击.这篇文章我们说说如果自动操作它们 1.自动点击左边四个按钮 (拖动 ...

  3. Unity3D研究院编辑器之脚本获取资源内存和硬盘大小

    内存 使用Profiler可以查看某个资源的内存占用情况,但是必须启动游戏,并且待查看的资源已经载入游戏中.我希望的是不启动游戏,也能看到它的内存好做统计. 硬盘 由于unity中的资源压缩格式记录在 ...

  4. [Unity] Unity3D研究院编辑器之自定义默认资源的Inspector面板

    比如编辑模式下对场景或者特定文件夹有一些操作可以在这个面板里来完成.. 代码如下. using UnityEngine; using System.Collections; using UnityEd ...

  5. Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五)

    http://www.xuanyusong.com/archives/3727 感谢楼下的牛逼回复更正一下,我表示我也是才知道.. 其实不需要实例化也能查找,你依然直接用GetComponentsIn ...

  6. Unity3D研究院编辑器之Editor的GUI的事件拦截

    OnGUI是Unity上一个时代的UI系统,而现在运行时的UI系统已经被UGUI取代,但是Editor的UI还是在用老的这一套GUI系统.比如unity编辑器里的所有窗口,布局,按钮,拖动条.滚动等等 ...

  7. Unity3D研究院编辑器之不影响原有布局拓展Inspector

    今天无意间发现了一篇好文章,也让我解决了一个很久都没解决的难题.问题是这样的,假如我想去拓展Unity自带的inspector但是并不想影响原有布局. 比如下面这段代码:     1 2 3 4 5 ...

  8. [Unity] Unity3D研究院编辑器之独立Inspector属性

    本文转自: http://www.xuanyusong.com/archives/3680雨松MOMO Unity提供了强大的Editor功能, 我们可以很轻易的在EditorGUI中绘制任意的属性. ...

  9. Unity3D研究院编辑器之重写Hierarchy的右键菜单

    Hierarchy视图中选择一个游戏对象以后通过右键可以打开一个unity默认菜单,一般情况下都可以满足我们,但是我想真对某些特殊的游戏对象而展开特殊的菜单.如下图所示,比如这样: 代码: using ...

随机推荐

  1. [转]在Storyboard中使用自定义的segue类型

    转自:http://my.oschina.net/u/728866/blog/92709 我们知道segue共有三种类型:push.modal以及custom.如下图:   很明显,这三种类型的作用分 ...

  2. centos7下mysql双主+keepalived

    一.keepalived简介 keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测 ...

  3. LeetCode OJ-- Length of Last Word

    https://oj.leetcode.com/problems/length-of-last-word/ 对一个字符串遍历,求最后一个单词的长度,如果有 ‘ ’,则切开了. 字符串的最后一个字符为 ...

  4. 一个关于集合的问题,为什么添加进List集合中的元素被莫名其妙的改变了

    以前自己理解的不够深刻,特此记录一下提醒自己,如果正好也帮到了你,我会很开心.相信只有自己正好遇到这个问题,才觉得哦,原来这样.自己小白,大神莫喷 为什么添加进List集合中的元素被莫名其妙的改变了? ...

  5. Linux网络协议栈之数据包处理过程

    http://blog.csdn.net/cheng_fangang/article/details/8966242

  6. java中的堆、栈和常量池简介

    一.它们各自存放的数据类型: 堆:存放所有new出来的对象. 栈:存放基本类型的变量数据和对象的应用,对象(new出来的对象)本身并不存在栈中,而是存放在堆中或者常量池中(字符串常量对象存放在常量池中 ...

  7. ubuntu git 下添加 ssh

    1 ssh-keygen 产生公钥和私钥  2 cat ~/.ssh/id_rsa.pub 复制出对应的公钥, 3 拷贝到git上的ssh-key里,注意拷贝时,换行处可能会引起错误,要把换行处的空格 ...

  8. DotnetBrowser入门教程-入门

    在.net core时代,web开发基本可以用.net core 2.0取代了.但是在传统领域,桌面开发仍然是不可以抛弃的,譬如: 1.用户需要和串口或者硬件打交道. 2.用户只想简单的安装好就使用, ...

  9. shell中sed命令

    sed -i '/cd ${LDIR_DEST}\/webextend\/pc && ln -s \/hard\/www_winclient\/bboxpc.exe ./a\ \tcd ...

  10. 通用礼品卡接口文档(KFC、必胜客、GAP等)

    通用礼品卡接口文档,集于各商家(KFC.必胜客.GAP等)实体卡和会员卡的API虚拟卡,可用于线上/下消费.移动支付. 1.API 1.1商品列表 接口地址:http://v.juhe.cn/gift ...