2024-02-12 Unity 编辑器开发之编辑器拓展3 —— EditorGUI

文章目录

  • 1 GUILayout
  • 2 EditorGUI 介绍
  • 3 文本、层级、标签、颜色拾取
    • 3.1 LabelField
    • 3.2 LayerField
    • 3.3 TagField
    • 3.4 ColorField
    • 3.5 代码示例
  • 4 枚举选择、整数选择、按下按钮
    • 4.1 EnumPopup / EnumFlagsField
    • 4.2 IntPopup
    • 4.3 DropdownButton
    • 4.4 代码示例
  • 5 对象关联、各类型输入
    • 5.1 ObjectField
    • 5.2 各类型输入
    • 5.3 代码示例
  • 6 折叠、折叠组
    • 6.1 Foldout
    • 6.2 BeginFoldoutHeaderGroup / EndFoldoutHeaderGroup
    • 6.3 代码示例
  • 7 开关、开关组
    • 7.1 Toggle / ToggleLeft
    • 7.2 BeginToggleGroup / EndToggleGroup
    • 7.3 代码示例
  • 8 滑动条、双滑块滑动条
    • 8.1 Slider / IntSlider
    • 8.2 MinMaxSlider
    • 8.3 代码示例
  • 9 帮助框、间隔
    • 9.1 HelpBox
    • 9.2 Space
    • 9.3 代码示例
  • 10 动画曲线、布局
    • 10.1 CurveField
    • 10.2 布局相关 API
    • 10.3 代码示例

1 GUILayout

​ GUILayout 是 GUI 自动布局的公共类,其中的方法和 GUI 基本类似,均用来绘制、响应各种 UI 控件,不同之处在于 GUILayout 在 GUI 的基础上加入了自动布局功能,无需过多关心 UI 控件的位置和大小。

GUILayoutOption 布局选项

  1. 控件的固定宽高
    • GUILayout.Width(300);
    • GUILayout.Height(200);
  2. 允许控件的最小宽高
    • GUILayout.MinWidth(50);
    • GUILayout.MinHeight(50);
  3. 允许控件的最大宽高
    • GUILayout.MaxWidth(100);
    • GUILayout.MaxHeight(100);
  4. 允许或禁止水平拓展
    • GUILayout.ExpandWidth(true); //允许
    • GUILayout.ExpandHeight(false); //禁止
    • GUILayout.ExpandHeight(true); //允许
    • GUILayout.ExpandHeight(false); //禁止

2 EditorGUI 介绍

​ EditorGUI 类似 GUI,是用于绘制编辑器拓展 UI 的工具类,提供 GUI 中没有的 API(主要是编辑器功能中会用到的一些特殊控件)。

​ EditorGUILayout 类似于 GUILayout,是带有自动布局功能的 EditorGUI 绘制工具类。通常,会将 EditorGUI 和 GUI 混合使用来制作编辑器拓展功能。但由于用到自动布局功能,因此接下来着重介绍 EditorGUILayout 中的功能。EditorGUI 和它的区别仅仅是需要自己设置位置而已。

​ 详细内容:https://docs.unity.cn/cn/2022.3/ScriptReference/EditorGUILayout.html。

3 文本、层级、标签、颜色拾取

3.1 LabelField

  • EditorGUILayout.LabelField("文本标题", "文本内容");

3.2 LayerField

  • int变量 = EditorGUILayout.LayerField("层级选择", int变量);

3.3 TagField

  • string变量 = EditorGUILayout.TagField("标签选择", string变量);

3.4 ColorField

  • color变量 = EditorGUILayout.ColorField(new GUIContent("标题"), color变量, 是否显示拾色器, 是否显示透明度通道, 是否支持HDR);

3.5 代码示例

public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}int    layer;string tag;Color  color;private void OnGUI() {// 窗口中的控件相关绘制 逻辑处理相关的内容// EditorGUI相关的控件 同样还是需要在OnGUI当中进行实现 才能被显示出来// 文本EditorGUILayout.LabelField("文本标题", "测试内容");EditorGUILayout.LabelField("文本内容");// 层级layer = EditorGUILayout.LayerField("层级选择", layer);// 标签tag = EditorGUILayout.TagField("标签选择", tag);// 颜色获取color = EditorGUILayout.ColorField(new GUIContent("自定义颜色获取"), color, true, false, false);}
}
image-20240212141148011

4 枚举选择、整数选择、按下按钮

4.1 EnumPopup / EnumFlagsField

  • 枚举选择

    枚举变量 = (枚举类型)EditorGUILayout.EnumPopup("枚举选择", 枚举变量);

  • 多选枚举

    注意:多选枚举进行的是或运算,声明枚举时一定注意其中的赋值,并且一定要有多种情况的搭配值。

    枚举变量 = (枚举类型)EditorGUILayout.EnumFlagsField("枚举多选", 枚举变量);

4.2 IntPopup

  • int变量 = EditorGUILayout.IntPopup("整数单选框", int变量, 字符串数组, int数组);

4.3 DropdownButton

  • EditorGUILayout.DropdownButton(new GUIContent("按钮上文字"), FocusType.Passive)
    • FocusType:枚举时告诉 UI 系统能够获得键盘焦点,当用户按 Tab 键时在控件之间进行切换。
    • Keyboard:该控件可接收键盘焦点。
    • Passive:该控件不能接收键盘焦点。

4.4 代码示例

public enum E_TestType
{One         = 1,Two         = 2,Three       = 4,One_and_Two = 1 | 2,
}public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}E_TestType type;E_TestType type2;string[] strs = { "选择123", "选择234", "选择345" };int[]    ints = { 123, 234, 345 };int      num  = 0;private void OnGUI() {// 枚举选择type = (E_TestType)EditorGUILayout.EnumPopup("枚举选择", type);type2 = (E_TestType)EditorGUILayout.EnumFlagsField("枚举多选", type2);// 整数选择控件// 返回值是整数数组当中的某一个值num = EditorGUILayout.IntPopup("整数单选框", num, strs, ints);EditorGUILayout.LabelField(num.ToString());// 按下就响应的按钮if (EditorGUILayout.DropdownButton(new GUIContent("按钮上文字"), FocusType.Passive))Debug.Log("按下就响应");}
}
image-20240212142052588

5 对象关联、各类型输入

5.1 ObjectField

  • 对象变量 = EditorGUILayout.ObjectField(对象变量, typeof(对象类型), 是否允许关联场景上对象资源) as 对象类型;

5.2 各类型输入

  • int变量 = EditorGUILayout.IntField("Int输入框", int变量);

  • long变量 = EditorGUILayout.LongField("long输入框", long变量);

  • float变量 = EditorGUILayout.FloatField("Float 输入:", float变量);

  • double变量 = EditorGUILayout.DoubleField("double 输入:", double变量);

  • string变量 = EditorGUILayout.TextField("Text输入:", string变量);

  • vector2变量 = EditorGUILayout.Vector2Field("Vec2输入: ", vector2变量);

  • vector3变量 = EditorGUILayout.Vector3Field("Vec3输入: ", vector3变量);

  • vector4变量 = EditorGUILayout.Vector4Field("Vec4输入: ", vector4变量);

  • rect变量 = EditorGUILayout.RectField("rect输入: ", rect变量);

  • bounds变量 = EditorGUILayout.BoundsField("Bounds输入: ", bounds变量);

  • boundsInt变量 = EditorGUILayout.BoundsIntField("Bounds输入: ", boundsInt变量);

​ 注意:EditorGUILayout 中 Delayed 开头的输入控件和普通输入控件最主要的区别是:在用户按 Enter 键或将焦点从字段移开之前,返回值不会更改。

5.3 代码示例

public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}GameObject obj;int    i;int    i2;float  f;double d;long   l;string  str;Vector2 vec2;Vector3 vec3;Vector4 vec4;Rect      rect;Bounds    bounds;BoundsInt boundsInt;private void OnGUI() {// 对象关联obj = EditorGUILayout.ObjectField("关联资源对象", obj, typeof(GameObject), false) as GameObject;// 各类型输入i = EditorGUILayout.IntField("Int输入框", i);EditorGUILayout.LabelField(i.ToString());l = EditorGUILayout.LongField("long输入框", l);f = EditorGUILayout.FloatField("Float 输入:", f);d = EditorGUILayout.DoubleField("double 输入:", d);str = EditorGUILayout.TextField("Text输入:", str);vec2 = EditorGUILayout.Vector2Field("Vec2输入: ", vec2);vec3 = EditorGUILayout.Vector3Field("Vec3输入: ", vec3);vec4 = EditorGUILayout.Vector4Field("Vec4输入: ", vec4);rect = EditorGUILayout.RectField("rect输入: ", rect);bounds = EditorGUILayout.BoundsField("Bounds输入: ", bounds);boundsInt = EditorGUILayout.BoundsIntField("Bounds输入: ", boundsInt);// 注意:EditorGUILayout 中 Delayed 开头的输入控件和普通输入控件最主要的区别是://      在用户按 Enter 键或将焦点从字段移开之前,返回值不会更改。i2 = EditorGUILayout.DelayedIntField("Int输入框", i2);EditorGUILayout.LabelField(i2.ToString());}
}
image-20240212142613862

6 折叠、折叠组

6.1 Foldout

  • bool变量 = EditorGUILayout.Foldout(bool变量, "标题名");

6.2 BeginFoldoutHeaderGroup / EndFoldoutHeaderGroup

  • bool变量 = EditorGUILayout.BeginFoldoutHeaderGroup(bool变量, "标题名");

    ...

    EditorGUILayout.EndFoldoutHeaderGroup();

​ 折叠组会有高亮加粗的显示,而普通折叠没有。

image-20240212143316336

6.3 代码示例

public enum E_TestType
{One         = 1,Two         = 2,Three       = 4,One_and_Two = 1 | 2,
}public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}E_TestType type;E_TestType type2;string[] strs = { "选择123", "选择234", "选择345" };int[]    ints = { 123, 234, 345 };int      num  = 0;GameObject obj;int    i;int    i2;float  f;double d;long   l;string  str;Vector2 vec2;Vector3 vec3;Vector4 vec4;Rect      rect;Bounds    bounds;BoundsInt boundsInt;bool isHide;bool isHideGroup;private void OnGUI() {isHide = EditorGUILayout.Foldout(isHide, "折叠控件", false);if (isHide) {// 枚举选择type = (E_TestType)EditorGUILayout.EnumPopup("枚举选择", type);type2 = (E_TestType)EditorGUILayout.EnumFlagsField("枚举多选", type2);// 整数选择控件// 返回值是整数数组当中的某一个值num = EditorGUILayout.IntPopup("整数单选框", num, strs, ints);EditorGUILayout.LabelField(num.ToString());// 按下就响应的按钮if (EditorGUILayout.DropdownButton(new GUIContent("按钮上文字"), FocusType.Passive))Debug.Log("按下就响应");}isHideGroup = EditorGUILayout.BeginFoldoutHeaderGroup(isHideGroup, "折叠组控件");if (isHideGroup) {// 对象关联obj = EditorGUILayout.ObjectField("关联资源对象", obj, typeof(GameObject), false) as GameObject;// 各类型输入i = EditorGUILayout.IntField("Int输入框", i);EditorGUILayout.LabelField(i.ToString());l = EditorGUILayout.LongField("long输入框", l);f = EditorGUILayout.FloatField("Float 输入:", f);d = EditorGUILayout.DoubleField("double 输入:", d);str = EditorGUILayout.TextField("Text输入:", str);vec2 = EditorGUILayout.Vector2Field("Vec2输入: ", vec2);vec3 = EditorGUILayout.Vector3Field("Vec3输入: ", vec3);vec4 = EditorGUILayout.Vector4Field("Vec4输入: ", vec4);rect = EditorGUILayout.RectField("rect输入: ", rect);bounds = EditorGUILayout.BoundsField("Bounds输入: ", bounds);boundsInt = EditorGUILayout.BoundsIntField("Bounds输入: ", boundsInt);// 注意:EditorGUILayout 中 Delayed 开头的输入控件和普通输入控件最主要的区别是://      在用户按 Enter 键或将焦点从字段移开之前,返回值不会更改。i2 = EditorGUILayout.DelayedIntField("Int输入框", i2);EditorGUILayout.LabelField(i2.ToString());}EditorGUILayout.EndFoldoutHeaderGroup();}
}
image-20240212143225100

7 开关、开关组

7.1 Toggle / ToggleLeft

  • 普通开关

    bool变量 = EditorGUILayout.Toggle("普通开关", bool变量);

  • 左侧开关

    bool变量 = EditorGUILayout.ToggleLeft("开关在左侧", bool变量);

7.2 BeginToggleGroup / EndToggleGroup

  • bool变量 = EditorGUILayout.BeginToggleGroup("开关组", bool变量);

    ...

    EditorGUILayout.EndToggleGroup();

7.3 代码示例

public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}bool isTog;bool isTogLeft;bool isTogGroup;private void OnGUI() {// 开关组控件isTogGroup = EditorGUILayout.BeginToggleGroup("开关组控件", isTogGroup);// 开关控件isTog = EditorGUILayout.Toggle("开关控件", isTog);isTogLeft = EditorGUILayout.ToggleLeft("左侧开关", isTogLeft);EditorGUILayout.EndToggleGroup();}
}
image-20240212143916072

8 滑动条、双滑块滑动条

8.1 Slider / IntSlider

  • float变量 = EditorGUILayout.Slider("滑动条", float变量, 最小值, 最大值);
  • int变量 = EditorGUILayout.IntSlider("整数值滑动条", int变量, 最小值, 最大值);

8.2 MinMaxSlider

  • EditorGUILayout.MinMaxSlider("双块滑动条", ref 左侧值, ref 右侧值, 最小值, 最大值);

​ 没有返回值,通过 ref 关键字修改数值。

8.3 代码示例

public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}float fSlider;int   iSlider;float leftV;float rightV;private void OnGUI() {// 滑动条fSlider = EditorGUILayout.Slider("滑动条", fSlider, 0, 10);iSlider = EditorGUILayout.IntSlider("整形滑动条", iSlider, 0, 10);// 双块滑动条EditorGUILayout.MinMaxSlider("双块滑动条", ref leftV, ref rightV, 0, 10);EditorGUILayout.LabelField(leftV.ToString());EditorGUILayout.LabelField(rightV.ToString());}
}
image-20240212144337815

9 帮助框、间隔

9.1 HelpBox

  • EditorGUILayout.HelpBox("一般提示", MessageType.None);
  • EditorGUILayout.HelpBox("感叹号提示", MessageType.Info);
  • EditorGUILayout.HelpBox("警告符号提示", MessageType.Warning);
  • EditorGUILayout.HelpBox("错误符号提示", MessageType.Error);

9.2 Space

  • EditorGUILayout.Space(10); // 间隔 10 个单位

9.3 代码示例

public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}private void OnGUI() {EditorGUILayout.HelpBox("一般提示", MessageType.None);EditorGUILayout.Space(10);EditorGUILayout.HelpBox("感叹号提示", MessageType.Info);EditorGUILayout.Space(50);EditorGUILayout.HelpBox("警告符号提示", MessageType.Warning);EditorGUILayout.Space(100);EditorGUILayout.HelpBox("错误符号提示", MessageType.Error);}
}
image-20240212144916875

10 动画曲线、布局

10.1 CurveField

  • AnimationCurve变量 = EditorGUILayout.CurveField("动画曲线:", AnimationCurve变量);

10.2 布局相关 API

  • 水平布局

    EditorGUILayout.BeginHorizontal(); // 开始水平布局

    ...
    EditorGUILayout.EndHorizontal(); // 结束水平布局

  • 垂直布局

    EditorGUILayout.BeginVertical(); // 开始垂直布局
    ...
    EditorGUILayout.EndVertical(); // 结束垂直布局

  • 滚动视图

    Vector2布局 = EditorGUILayout.BeginScrollView(Vector2布局); // 开启滚动视图

    ...
    EditorGUILayout.EndScrollView(); // 结束滚动视图

10.3 代码示例

public class Lesson3 : EditorWindow
{[MenuItem("Unity编辑器拓展/Lesson3/EditorGUI知识讲解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知识讲解窗口");win.Show();}bool isTog;bool isTogLeft;bool isTogGroup;float fSlider;int   iSlider;float leftV;float rightV;AnimationCurve curve = new AnimationCurve();Vector2 vec2Pos;private void OnGUI() {vec2Pos = EditorGUILayout.BeginScrollView(vec2Pos); // 开启滚动视图// 开关组控件isTogGroup = EditorGUILayout.BeginToggleGroup("开关组控件", isTogGroup);// 开关控件isTog = EditorGUILayout.Toggle("开关控件", isTog);isTogLeft = EditorGUILayout.ToggleLeft("左侧开关", isTogLeft);EditorGUILayout.EndToggleGroup();// 滑动条fSlider = EditorGUILayout.Slider("滑动条", fSlider, 0, 10);iSlider = EditorGUILayout.IntSlider("整形滑动条", iSlider, 0, 10);// 双块滑动条EditorGUILayout.MinMaxSlider("双块滑动条", ref leftV, ref rightV, 0, 10);EditorGUILayout.LabelField(leftV.ToString());EditorGUILayout.LabelField(rightV.ToString());// 帮助框控件EditorGUILayout.HelpBox("一般提示", MessageType.None);EditorGUILayout.Space(10);EditorGUILayout.HelpBox("感叹号提示", MessageType.Info);EditorGUILayout.Space(50);EditorGUILayout.HelpBox("警告符号提示", MessageType.Warning);EditorGUILayout.Space(100);EditorGUILayout.HelpBox("错误符号提示", MessageType.Error);// 间隔控件EditorGUILayout.EndScrollView(); // 结束滚动视图// 动画曲线控件curve = EditorGUILayout.CurveField("曲线控件", curve);// 布局APIEditorGUILayout.BeginHorizontal(); // 开始水平布局EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.EndHorizontal(); // 结束水平布局EditorGUILayout.BeginVertical(); // 开始垂直布局EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.EndVertical(); // 结束垂直布局}
}
image-20240212145703501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/680274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础I/O(三)——缓冲区和文件系统

文章目录 什么是C语言的缓冲区理解文件系统理解软硬链接 什么是C语言的缓冲区 C语言的缓冲区其实就是一部分内存 那么它的作用是什么&#xff1f; 下面有一个例子&#xff1a; 你在陕西&#xff0c;你远在山东的同学要过生日了&#xff0c;你打算送给他一份生日礼物。你有两种方…

Centos9部署LAMP

配置LAMP 参考文档 https://blog.csdn.net/weixin_51432789/article/details/112254685 首先安装 yum install -y libxml2-devel 安装apr-1.7.4 解压 tar xf apr-1.7.4.tar.gz 安装以来 yum -y install gcc cd apr-1.7.4/ 预编译 ./configure --prefix/usr/local/…

鸿蒙系统进一步学习(一):学习资料总结,少走弯路

随着鸿蒙Next的计划越来越近&#xff0c;笔者之前的鸿蒙系统扫盲系列中&#xff0c;有很多朋友给我留言&#xff0c;不同的角度的问了一些问题&#xff0c;我明显感觉到一点&#xff0c;那就是许多人参与鸿蒙开发&#xff0c;但是又不知道从哪里下手&#xff0c;因为资料太多&a…

C#中的 async void 、 async Task与async Task<TResult>

异步方法可具有以下返回类型&#xff1a; Task&#xff1a;如果方法不含任何 return 语句或包含不返回操作数的 return 语句&#xff0c;则将 Task 用作返回类型&#xff1b;Task<TResult>&#xff1a;如果方法包含指定 TResult 类型操作数的 return 语句&#xff0c;将…

【lesson51】信号之信号处理

文章目录 信号处理可重入函数volatileSIGCHLD信号 信号处理 信号产生之后&#xff0c;信号可能无法被立即处理&#xff0c;一般在合适的时候处理。 1.在合适的时候处理&#xff08;是什么时候&#xff1f;&#xff09; 信号相关的数据字段都是在进程PCB内部。 而进程工作的状态…

零基础学编程怎么入手,中文编程工具构件箱之星空构件用法教程,系统化的编程视频教程上线

零基础学编程怎么入手&#xff0c;中文编程工具构件箱之星空构件用法教程&#xff0c;系统化的编程视频教程上线 一、前言 今天给大家分享的中文编程开发语言工具资料如下&#xff1a; 编程入门视频教程链接 http://​ https://edu.csdn.net/course/detail/39036 ​ 编程…

SQL世界之命令语句Ⅳ

目录 一、SQL CREATE DATABASE 语句 1.CREATE DATABASE 语句 2.SQL CREATE DATABASE 语法 3.SQL CREATE DATABASE 实例 二、SQL CREATE TABLE 语句 1.CREATE TABLE 语句 2.SQL CREATE TABLE 语法 3.SQL中最常用的数据类型 4.SQL CREATE TABLE 实例 三、SQL 约束 (Con…

Days 29 ElfBoard LCD屏双电荷泵电路原理

7寸LCD屏幕的屏幕排线中采用的供电电压是5V供电&#xff0c;但是在屏幕工作时需要VCOM-5.3V、AVDD-12.5V、VGL--7V、VGH-17V几组电压&#xff0c;所以要对初始的5V电源进行DC-DC电压变换&#xff0c;在这里我们用到了双电荷泵电路。 再此电路中VCC_5V为电源输入&#xff0c;E…

设计模式-适配器模式 Adapter

适配器模式 (Adapter) (重点) 适配器设计模式&#xff08;Adapter Design Pattern&#xff09;是一种结构型设计模式&#xff0c;用于解决两个不兼容接口之间的问题。适配器允许将一个类的接口转换为客户端期望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的…

CentOS 7.9安装Tesla M4驱动、CUDA和cuDNN

正文共&#xff1a;1333 字 21 图&#xff0c;预估阅读时间&#xff1a;2 分钟 上次我们在Windows上尝试用Tesla M4配置深度学习环境&#xff08;TensorFlow识别GPU难道就这么难吗&#xff1f;还是我的GPU有问题&#xff1f;&#xff09;&#xff0c;但是失败了。考虑到Windows…

LeetCode662:二叉树最大宽度(二叉树非典型最大宽度,BFS层序遍历重编号)

题目 给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉树视作与满二叉树结构相同&#xff0c;…

金明的预算方案 ——分组背包

金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间金明自己专用的很宽敞的房间。 更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物品&#xff0c;怎么布置&#xff0c;你说了算&#xff0c;只要不超过N元钱就行”…

复习2:带头双向链表

1.双向链表 typedef struct shuangxiang { int data; struct shuangxiang *next; struct shuangxiang *prev; }biao; 2.哨兵位创建 void setshaobing(biao**point) { *point(biao*)malloc(sizeof(biao)); *point->data-1; *point->next*point->prevNULL; } 3.尾插 …

服务器操作系统windows和linux区别对比

阿里云服务器镜像Windows和Linux操作系统有什么区别&#xff1f;性能有差异吗&#xff1f;有&#xff0c;同配置下Linux性能要优于Windows&#xff0c;但这与阿里云无关&#xff0c;仅仅是linux和windows之间的区别。另外&#xff0c;阿里云提供的windows和linux操作系统均为正…

JAVA设计模式之备忘录模式详解

备忘录模式 1 备忘录模式介绍 备忘录模式提供了一种对象状态的撤销实现机制,当系统中某一个对象需要恢复到某一历史状态时可以使用备忘录模式进行设计. 很多软件都提供了撤销&#xff08;Undo&#xff09;操作&#xff0c;如 Word、记事本、Photoshop、IDEA等软件在编辑时按…

【深度学习】S1 预备知识 P1 张量

目录 张量创建第一个张量张量的下载与引入创建第一个张量 张量的大小和形状张量的形状张量的大小 改变张量的形状创建特殊张量张量的基本运算按元素运算张量连结逻辑运算张量求和 张量的广播机制张量的索引与切片索引、切片访问张量通过切片方式节省内存占用 张量转换为其他对象…

Stable Diffusion 模型下载:majicMIX fantasy 麦橘幻想

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

STM32自学☞PWM驱动舵机(按键控制)

PWM.c文件 #include "stm32f10x.h" /*初始化函数*/ void PWM_Init(void){ /*开启时钟*/ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟 /*GPIO初始化*/ G…

洛谷:P1331 海战

题目描述 在一个方形的盘上&#xff0c;放置了固定数量和形状的船只&#xff0c;每只船却不能碰到其它的船。在本题中&#xff0c;我们认为船是方形的&#xff0c;所有的船只都是由图形组成的方形。 求出该棋盘上放置的船只的总数。 输入格式 第一行为两个整数 R 和 C&…

LeetCode1143. Longest Common Subsequence——动态规划

文章目录 一、题目二、题解 一、题目 Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0. A subsequence of a string is a new string generated from the original string with so…