Unity 脚本 API 中文版

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

创建自定义窗口

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

GUILayout.Label

基础

  1. GUILayout.Label("Label");

设置样式和大小

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

使用 GUIContent 代替文字

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

unity Api

GUILayout 滚动视图

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

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

GUIStyle

统一更改所有按钮的样式

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

自定义某个按钮的样式

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

GUI_Line

用来分割布局内容

  1. void OnGUI()
  2. {
  3. UnityEditorExtensions.GUI_Line();
  4. }

GUILayout.HorizontalScope() 和 GUILayout.FlexibleSpace

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

  1. void OnGUI()
  2. {
  3. //创建一个横向的区域
  4. using (new GUILayout.HorizontalScope())
  5. {
  6. GUILayout.FlexibleSpace();
  7. _selectedTabID = GUILayout.Toolbar(_selectedTabID, _tabNames, GUILayout.Height(25));
  8. GUILayout.FlexibleSpace();
  9. }
  10. }
  11. private int _selectedTabID = 0;
  12. private string[] _tabNames = new string[] { "tab01", "tab02", "tab03" };

效果

unity Api


EditorGUI.BeginChangeCheck()

和EditorGUI.EndChangeCheck()结合使用

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

  1. int popupInt = 0;
  2. string[] popupOptions = { "50", "100" };
  3. void OnGUI()
  4. {
  5. EditorGUI.BeginChangeCheck();
  6. popupInt = EditorGUILayout.Popup(popupInt, popupOptions);
  7. if(EditorGUI.EndChangeCheck())
  8. {
  9. switch(popupInt)
  10. {
  11. case 0:
  12. //相应操作
  13. break;
  14. case 1:
  15. //相应操作
  16. break;
  17. }
  18. }
  19. }

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. 在VMware Workstation 16上安装Windows7虚拟机以及VMware tools安装失败解决方法

    安装VMware Workstation 16 搜素"VMware Workstation下载" 下载 VMware Workstation Pro 下载Windows7系统镜像 ...

  2. RPA 抖音机器人汇总

    一.RPA 抖音小店催好评机器人 RPA机器人详情: 1.配置好抖音小店订单号与催好评话术 2.启动抖音小店催好评机器人 3.机器人打开飞鸽客服软件 4.自动搜索订单号,自动发送催好评内容 5.机器人 ...

  3. 【Nim 游戏】 学习笔记

    前言 没脑子选手随便一道博弈论都不会 -- 正文 Nim 游戏引入 这里给出最简单的 \(Nim\) 游戏的题目描述: \(Nim\) 游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有\(n\ ...

  4. 记录一次ubuntu安装mysql,远程无法登录问题的解决历程

    进入ubuntu的mysql配置文件 sudo vim debian.cnf [client] host = localhost user = debian-sys-maint password = ...

  5. 如何优化API?8个实用技巧!【eolink翻译】

    使用 API 可以让公司利用现代连接的力量来帮助他们扩大全球影响力.传输数据和改进集成.由于 API 使企业能够简化流程并增强可用性,所以企业会使用一些优化策略,不断优化流程,比如接下来要说到的8个技 ...

  6. atcoder ABC 232 B~E题解

    B 模拟,水题 #include<bits/stdc++.h> using namespace std; char s1[100005],s2[100005]; int a1[100005 ...

  7. Java学习day09—-封装和继承

    封装 1.封装 1.1 封装的概念和实现 封装: 属性私有:将属性使用private修饰,表示此属性只能在本类中访问,不让外部直接访问 方法公开:针对每一个属性编写一对公开的方法 get set 分别 ...

  8. 暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案

    暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案 这是悟空的第 158 篇原创文章 原文链接:首发悟空聊架构 官网:www.passjava.cn 你好,我是悟空. 前言 ...

  9. EFCore高级Saas系统下一个DbContext如何支持多数据库迁移

    EFCore高级玩法单DbContext支持多数据库迁移 前言 随着系统的不断开发和迭代默认的efcore功能十分强大,但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了,但是 ...

  10. 【P1809 过河问题】题解

    贪心,我们设时间序列为 \(\{a_i\}\),长度为 \(n\)(先排序 \(\{a_i\}\)). 分类讨论(其中的「\(1\)」「\(2\)」等均指「速度第 \(1\) 人」「速度第 \(2\) ...