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://xiahunao.cn/news/2780753.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

第 384 场 LeetCode 周赛题解

A 修改矩阵 模拟 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vector<int>> &matrix) {int m matrix.size(), n matrix[0].size();vector<int> mx(n, INT32_MIN);for (int i 0; i < m; i)for (int j 0; j &l…

【C#】MVVM架构

示例结果展示 前提了解 MVVM是Model-View-ViewModel的缩写形式,它通常被用于WPF或Silverlight开发。 Model——可以理解为带有字段,属性的类。例如学校类,教师类,学生类等 View——可以理解为我们所看到的UI。前端界面。 View Model在View和Model之间,起到连接的作用,…

Nodejs基础6之HTTP模块的获取请求行和请求头、获取请求体、获取请求路径和查询字符串、http请求练习、设置HTTP响应报文、http响应练习

Nodejs基础 HTTP模块获取请求行和请求头获取请求体获取请求路径和查询字符串方式一方式二 http请求练习设置HTTP响应报文状态码响应状态描述响应头响应体 HTTP响应练习 HTTP模块 含义语法重点掌握请求方法request.method*请求版本request.httpVersion请求路径request.url*URL …

HeidiSQL安装配置(基于小皮面板(phpstudy))连接MySQL

下载资源 对于这款图形化工具&#xff0c;博主建议通过小皮面板&#xff08;phpstudy&#xff09;来下载即可&#xff0c;也是防止你下载到钓鱼软件&#xff0c;小皮面板&#xff08;phpstudy&#xff09;如果你不懂是什么&#xff0c;请看下面链接这篇博客 第二篇&#xff1a;…

leetcode链表相关题目

文章目录 1.移除链表元素方法1&#xff1a;方法2 2.合并两个有序链表3.链表的中间节点方法1方法2 4.反转单链表方法1方法2 5.分割链表6.链表中的倒数第k个节点方法1&#xff1a;方法2: 7.环形链表的约瑟夫问题8.链表的回文结构9.相交链表方法1方法2&#xff1a; 10.环形链表11.…

SHA-512在Go中的实战应用: 性能优化和安全最佳实践

SHA-512在Go中的实战应用: 性能优化和安全最佳实践 简介深入理解SHA-512算法SHA-512的工作原理安全性分析SHA-512与SHA-256的比较结论 实际案例分析数据完整性验证用户密码存储数字签名总结 性能优化技巧1. 利用并发处理2. 避免不必要的内存分配3. 适当的数据块大小总结 与其他…

Linux--基础开发工具篇(2)(vim)(配置白名单sudo)

目录 前言 1. vim 1.1vim的基本概念 1.2vim的基本操作 1.3vim命令模式命令集 1.4vim底行命令 1.5 异常问题 1.6 批量注释和批量去注释 1.7解决普通用户无法sudo的问题 1.8简单vim配置 前言 在前面我们学习了yum&#xff0c;也就是Linux系统的应用商店 Linux--基础开…

Stable Diffusion 模型下载:majicMIX sombre 麦橘唯美

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

Stream流学习笔记

Stream流 创建流中间操作1、filter2、map3、distinct4、sorted5、limit6、skip7、flatMap 终结操作1、forEach2、count3、max&min4、collect5、查找与匹配 创建流 单例集合&#xff1a;集合对象.stream() List<Integer> list new ArrayList<>(); Stream<…

第5讲小程序微信用户登录实现

小程序微信用户登录实现 小程序登录和jwt&#xff0c;httpclient工具类详细介绍可以看下小锋老师的 小程序电商系统课程&#xff1a;https://www.bilibili.com/video/BV1kP4y1F7tU application.yml加上小程序登录需要的参数&#xff0c;小伙伴们可以登录小程序后台管理&#…

电视上如何下载软件

电视上如何下载软件&#xff0c;告诉大家一个简单的方法&#xff0c;可以用DT浏览器下载软件&#xff0c;然后会自动安装这个软件&#xff0c;如有技术问题&#xff0c;可以免费解答

linux 09 软件安装,YUM

下载软件时候&#xff0c;windows会从网上下载exe文件。 windows中的exe文件linux中的rpm文件 YUM&#xff08;软件包管理工具&#xff09; 01. 02. 全新安装&#xff1a; 第一.先ping 第二.yum -y install httpd vsftpd (httpd和vsftpd是一种工具) 命令解释 yum -y ins…

java数据结构与算法刷题-----LeetCode594. 最长和谐子序列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 子序列要尽可能长&#xff0c;并且最大值和最小值之间的差&#…

腾讯云4核8G服务器多少钱?2024精准报价

腾讯云4核8G服务器S5和轻量应用服务器优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;轻量应用服务器4核8G12M带宽一…

第三节课[LangChain]作业

文章目录 前言实践搭建向量知识库 前言 本次作业虽然是第三节课作业&#xff0c;但是在第四次作业之后才完成&#xff0c;所以用的是经过自我认知微调的小助手权重。 使用**诡秘之主和宿命之环小说&#xff08;仅用于学习和研究&#xff09;**以及设定集、百度百科&#xff0c…

《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)

文章目录 6.1 使用 CSS 变量进行设计&#xff1a;魔法配方的调配6.1.1 基础知识6.1.2 重点案例&#xff1a;创建可定制的主题6.1.3 拓展案例 1&#xff1a;响应式字体大小6.1.4 拓展案例 2&#xff1a;使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…

算法学习——LeetCode力扣字符串篇

算法学习——LeetCode力扣字符串篇 344. 反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 描述 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地…

sheng的学习笔记-网络爬虫scrapy框架

基础知识&#xff1a; scrapy介绍 何为框架&#xff0c;就相当于一个封装了很多功能的结构体&#xff0c;它帮我们把主要的结构给搭建好了&#xff0c;我们只需往骨架里添加内容就行。scrapy框架是一个为了爬取网站数据&#xff0c;提取数据的框架&#xff0c;我们熟知爬虫总…

华为问界M9:全方位自动驾驶技术解决方案

华为问界M9的自动驾驶技术采用了多种方法来提高驾驶的便利性和安全性。以下是一些关键技术&#xff1a; 智能感知系统&#xff1a;问界M9配备了先进的传感器&#xff0c;包括高清摄像头、毫米波雷达、超声波雷达等&#xff0c;这些传感器可以实时监测车辆周围的环境&#xff0…

【开源】JAVA+Vue.js实现高校学院网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学院院系模块2.2 竞赛报名模块2.3 教育教学模块2.4 招生就业模块2.5 实时信息模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学院院系表3.2.2 竞赛报名表3.2.3 教育教学表3.2.4 招生就业表3.2.5 实时信息表 四、系…