Unity 脚本 API 中文版

链接: https://docs.unity3d.com/cn/2019.4/ScriptReference/

创建自定义窗口

public class MyWindow : EditorWindow//继承unity内置EditorWindow类
{
[MenuItem("Window/我的自定义窗口")]
private static void ShowWindow()
{
//1.用GetWindow方法创建的窗口,只可以打开一个
MyWindow window = GetWindow<MyWindow>("我的窗口");//字符串为窗口标题
//2.用CreateWindow方法创建的窗口,可以打开很多个
MyWindow window = GetWindow<MyWindow>("我的窗口");
}
private void OnGUI()
{
//GUI布局
}
}

GUILayout.Label

基础

GUILayout.Label("Label");

设置样式和大小

GUIStyle lblStyle = GUI.skin.label;//在unity默认的样式上面修改,如果使用new GUIStyle()的话,绘制出来的Label只有你自己设置的样式
lblStyle.alignment = TextAnchor.MiddleLeft;//
GUILayout.Label("Label", lblStyle, GUILayout.Width(50), GUILayout.Height(50));//必须指定大小,文字位置才有效

使用 GUIContent 代替文字

//无提示写法
GUIContent lblIcon = EditorGUIUtility.IconContent("console.infoicon");//根据icon名字获取unity内置的icon
GUILayout.Label(lblIcon);
//有提示写法
//(1)图标的提示:要加 |
GUIContent lblIcon = EditorGUIUtility.IconContent("console.infoicon", "|这是图标Label");//根据icon名字获取unity内置的icon
GUILayout.Label(lblIcon);
//(2)文字的提示:不用加 |
GUIContent lblStr = new GUIContent("console.infoicon", "这是文字Label");
GUILayout.Label(lblStr);

unity Api

GUILayout 滚动视图

滚动视图由GUILayout.BeginScrollView()和GUILayout.EndScrollView()组成,需要滚动的元素放在它们中间

void OnGUI()
{
scrollPosition = GUILayout.BeginScrollView(scrollPosition,GULayout.Width(100),GUILayout.Height(500));
//放在里面的元素需要是GUILout类的,比如GUI.Button是不会有滚动效果的
GUILayout.EndScrollView();
}
private Vector2 scrollPosition = Vector2.zero;

GUIStyle

统一更改所有按钮的样式

void OnGUI()
{
GUIStyle btnStyle = GUI.skin.button;
btnStyle.alignment = TextAnchor.MiddleLeft;
btnStyle.normal.textColor = Color.white;
btnStyle.richText = true;//支持渲染HTML标签的文本: <strong>HTML</strong>
GUILayout.Button("Button", btnStyle, GUILayout.Width(50));
}

自定义某个按钮的样式

void OnGUI()
{
GUIStyle goTopBtnStyle = new GUIStyle(GUI.skin.button);
goTopBtnStyle.alignment = TextAnchor.UpperLeft;
GUILayout.Button("Button", goTopBtnStyle , GUILayout.Width(50));
}

GUI_Line

用来分割布局内容

void OnGUI()
{
UnityEditorExtensions.GUI_Line();
}

GUILayout.HorizontalScope() 和 GUILayout.FlexibleSpace

用该元素可以实现水平居中效果

void OnGUI()
{
//创建一个横向的区域
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
_selectedTabID = GUILayout.Toolbar(_selectedTabID, _tabNames, GUILayout.Height(25));
GUILayout.FlexibleSpace();
}
}
private int _selectedTabID = 0;
private string[] _tabNames = new string[] { "tab01", "tab02", "tab03" };

效果

unity Api


EditorGUI.BeginChangeCheck()

和EditorGUI.EndChangeCheck()结合使用

假如你想当一个Popup元素的选中值改变时候才作出相应操作,你可以这样写:

int popupInt = 0;
string[] popupOptions = { "50", "100" };
void OnGUI()
{
EditorGUI.BeginChangeCheck();
popupInt = EditorGUILayout.Popup(popupInt, popupOptions);
if(EditorGUI.EndChangeCheck())
{
switch(popupInt)
{
case 0:
//相应操作
break;
case 1:
//相应操作
break;
}
}
}

unity Api

未完待续...

Unity-编辑器拓展之GUILayout,EditorGUILayout布局 { }的更多相关文章

  1. unity编辑器拓展

    [ExecutelnEditMode]     在EditMode下也可以执行脚本,Unity默认情况下,脚本只有运行时被执行,加上此属性后,不运行程序也能执行.与PlayMode不同的是函数不会不停 ...

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

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

  3. Unity编辑器的扩展:IMGUI

    IMGUI 介绍 所有关于 Editor 的相关 UI,包括 Inspector.Hierarchy.Window.Game 视图上动态创建的那些半透明 UI.还有 Scene 视图上可添加的辅助显示 ...

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

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

  5. Unity编辑器 - 编辑器控制特效播放

    编辑器控制特效播放 Unity的动画编辑器不能预览粒子系统的播放,为了方便预览特效,设想制作一个预览特效的工具,通常一个特效有三种组件: - Animation - Animator - Partic ...

  6. Unity编辑器 - 资源批处理工具基类

    Unity编辑器 - 资源批处理工具基类 经常要对资源进行批处理,很多时候都是一次性的需求,于是弄个通用脚本. 工具是个弹出面板,处理过程有进度条,如下: 如图,子类只需要重写几个方法: using ...

  7. Unity编辑器 - 输入控件聚焦问题

    Unity编辑器整理 - 输入控件聚焦问题 EditorGUI的输入控件在聚焦后,如果在其他地方改变值,聚焦的框不会更新,而且无法取消聚焦,如下图: 在代码中取消控件的聚焦 取消聚焦的"时机 ...

  8. 转载unity编辑器xml数据库插件

    unity编辑器xml数据库插件 注:9月9日更新,其中MyXML.cs中有一句代码写错,查找功能失误,文中已经修改! 注:9月1日更新说明:xml存储结构,因为在用xml之前不知道正规的xml数据结 ...

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

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

随机推荐

  1. 简单到爆——用Python在MP4和GIF间互转,我会了

    写在前面的一些P话: 昨天用公众号写文章的时候,遇到个问题.我发现公众号插入视频文件太繁琐,一个很小的视频,作为视频传上去平台还要审核,播放的时候也没gif来的直接.于是想着找个工具将mp4转换成gi ...

  2. shell 同时执行多任务下载视频

    本文为博主原创,转载请注明出处: shell 脚本不支持多线程,但我们需要用shell 脚本同时跑多个任务时怎么让这些任务并发同时进行,可以采用在每个任务 后面 添加一个  & ,让其在后台运 ...

  3. Java中运算符和方法的区别

    1.多数情况下,运算符是程序语言里固有的.比如+,-,*,/.可以直接被编译为机器语言而无需再调用其它方法编译. 2.运算符在被定义时会被规定运算的优先级.如4+3*3,会得到13.而不是21. 3. ...

  4. SpringBoot:Redis中的zset

    zset被描述为有序集合,但RedisTemplate的OpsForZSet().range方法的返回值是set,那么: 这样直接查询zset返回set的操作会使得元素失去顺序吗? 先明确:Set是什 ...

  5. Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了

    Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了 原因:config/server.properties的listeners和advertised.listeners 不配置的话默认的l ...

  6. 【问题解决】Axios调用文件下载获取不到文件名

    问题描述 自己开发了一个后端下载文件的接口,然后通过浏览器直接访问这个接口,浏览器能正确得到文件名并下载: 而使用Axios时发现获取不到,经过打印响应体发现响应头里没有文件名 而Java后端代码里是 ...

  7. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  8. super详解(继承)

    //在Java中,所有的类,都默认直接或者间接继承objec类// Person 人 :父类public class Person /*extends object*/ { public Person ...

  9. jdbc 04: 配置连接信息

    jdbc连接mysql,将需要的信息配置到文件中 package com.examples.jdbc.o4_配置连接信息; import java.sql.Connection; import jav ...

  10. CF222C Reducing Fractions

    题目大意: 给出两个集合,第一个集合数的乘积是分子,第二个集合的数的乘积是分母,要求够造一个同样的集合,但是得到的分数是最简分数. 分析: 寻找思路并不复杂,对两个集合的每个数进行质因数分解,然后统计 ...