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

news2024/11/25 2:34:17

文章目录

  • 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);
        // 布局API
        EditorGUILayout.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.coloradmin.cn/o/1445338.html

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

相关文章

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换 1 投票策略 考虑到外点率太高 ①让直线上的每一点投票 ②希望噪声点不要给具体的任何模型投票&#xff0c;即噪声点不会有一致性的答案 ③即使被遮挡了&#xff0c;也能把直线找出来 参数空间离散化 直线相当于就是m,b两…

【Web】vulhub Fastjson反序列化漏洞复现学习笔记

目录 1.2.24 RCE CVE-2017-18349 复现流程 原理分析 1.2.47 RCE CNVD-2019-22238 复现流程 原理分析 漏洞探测 1.2.24 RCE CVE-2017-18349 复现流程 vulhub启动靶场 用marshalsec启动LDAP/RMI服务 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRef…

使用securecrt+xming通过x11访问ubuntu可视化程序

windows使用securecrtxming通过x11访问ubuntu可视化程序 windows机器IP&#xff1a;192.168.9.133 ubuntu-desktop20.04机器IP&#xff1a;192.168.9.190 windows下载xming并安装 按照图修改xming配置 开始->xming->Xlaunch 完成xming会在右下角后台运行 windows在…

Vue源码系列讲解——模板编译篇【一】(综述)

目录 1. 前言 2. 什么是模板编译 3. 整体渲染流程 4. 模板编译内部流程 4.1 抽象语法树AST 4.2 具体流程 5. 总结 1. 前言 在前几篇文章中&#xff0c;我们介绍了Vue中的虚拟DOM以及虚拟DOM的patch(DOM-Diff)过程&#xff0c;而虚拟DOM存在的必要条件是得先有VNode&…

Oracle11g安装配置详细教程

Oracle Database 11g是一款广泛使用的关系型数据库管理系统&#xff0c;它为企业级的应用提供了强大的数据管理功能。本文将详细介绍如何在Windows环境下安装和配置Oracle 11g。 准备工作 系统要求&#xff1a;确保你的系统满足安装Oracle 11g的最低要求。对于Oracle 11g Rele…

linux系统下vscode portable版本的python环境搭建003:venv

这里写自定义目录标题 python安装方案一. 使用源码安装&#xff08;有[构建工具](https://blog.csdn.net/ResumeProject/article/details/136095629)的情况下&#xff09;方案二.使用系统包管理器 虚拟环境安装TESTCG 本文目的&#xff1a;希望在获得一个新的系统之后&#xff…

Oracle的学习心得和知识总结(三十二)|Oracle数据库数据库回放功能之论文四翻译及学习

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

S32 Design Studio PE工具配置GPIO

首先我们来讲最简单的GPIO配置 代码生成 按照下图步骤就能配置一个基本的GPIO口&#xff0c;在组件里面选择pin_mux&#xff0c;选中就能配置使能和方向&#xff0c;no pin routed就是没有配置的。GPIO口分ABCDE组&#xff0c;每组从0到最大的序号。 然后在functional prope…

互联网加竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

政安晨:在Jupyter中【示例演绎】Matplotlib的官方指南(二){Image tutorial}·{Python语言}

咱们接着上一篇&#xff0c;这次咱们讲使用Matplotlib绘制图像的简短尝试。 我的这个系列的上一篇文章在这里&#xff1a; 政安晨&#xff1a;在Jupyter中【示例演绎】Matplotlib的官方指南&#xff08;一&#xff09;{Pyplot tutorial}https://blog.csdn.net/snowdenkeke/ar…

创建菜单与游戏页面

bootstrap地址 Bootstrap v5 中文文档 Bootstrap 是全球最受欢迎的 HTML、CSS 和 JS 前端工具库。 | Bootstrap 中文网 (bootcss.com) 创建导航栏组件 web--src--components--NavBar.vue <!-- html --> <template><nav class"navbar navbar-expand-lg n…

Linux ipvlan详解(l2、l3、l3s和bridge、private和vepa模式)

Linux ipvlan详解&#xff0c;测试l2、l3、l3s和bridge、private和vepa模式。 最近在看Docker的网络&#xff0c;看到关于ipvlan网络的介绍。查阅了相关资料&#xff0c;记录如下。 参考 1.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 2.IPVlan 详…

假如程序员也分等级……

本次考试有10道题&#xff0c;一题10分&#xff0c;做完后可查看段位等级。 1.请问复制粘贴用什么快捷键&#xff1f; A.CtrlV,CtrlC B.CtrlC,CtrlV 2.计算机里用的是&#xff08; &#xff09;进制&#xff1f; A.二 B.十 3.对于输出“Hello world”正确的一项是&#…

Oracle 几种行转列的方式 sum+decode sum+case when pivot

目录 原始数据&#xff1a; 方式一&#xff1a; 方式二&#xff1a; 方式三&#xff1a; unpivot的使用&#xff1a; 原始数据&#xff1a; 方式一&#xff1a; select t_name,sum(decode(t_item, item1, t_num, 0)) item1,sum(decode(t_item, item2, t_num, 0)) item2,s…

洗地机买什么品牌好?最好的洗地机品牌

对于双职工家庭来说&#xff0c;日常家务活是一个很大的难题。所以就要借助洗地机来提升生活质量&#xff0c;确实智能家电能够帮助日常家务减负。市面上的洗地机的品牌是真的很多&#xff0c;笔者今天带大家一起来看看什么洗地机品牌好用。 该如何挑选适合自己的家用洗地机 …

nginx2

mkdir /usr/local/develop cd /usr/local/develop 下载 wget http://nginx.org/download/nginx-1.17.4.tar.gz 解压文件 tar zxmf nginx-1.17.4.tar.gz 进入解压目录 cd nginx-1.17.4/ 安装编译工具及依赖库 都安装成功后再次执行会有下面提示 yum -y install gcc pcre-de…

C++入门学习(二十七)跳转语句—continue语句

当在循环中遇到continue语句时&#xff0c;它会跳过当前迭代剩余的代码块&#xff0c;并立即开始下一次迭代。这意味着continue语句用于跳过循环中特定的执行步骤&#xff0c;而不是完全终止循环。 直接看一下下面的代码更清晰&#xff1a; 与上一节的break语句可以做一下对比…

编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC

编译OpenSSL 3.0.1时报错&#xff0c;错误信息如下 解决方法&#xff1a; 安装perl-CPAN yum install -y perl-CPAN进入CPAN的shell模式&#xff0c;首次进入需要配置shell&#xff0c;按照提示操作即可&#xff08;本人perl小白&#xff0c;全部选择默认配置&#xff0c;高…

WSL下如何使用Ubuntu本地部署Vits2.3-Extra-v2:中文特化修复版(新手从0开始部署教程)

环境&#xff1a; 硬&#xff1a; 台式电脑 1.cpu:I5 11代以上 2.内存16G以上 3.硬盘固态500G以上 4.显卡N卡8G显存以上 20系2070以上 本案例英伟达4070 12G 5.网络可连github 软&#xff1a; Win10 专业版 19045以上 WSL2 -Ubuntu22.04 1.bert-Vits2.3 Extra-v2:…

Packet Tracer - Configure IOS Intrusion Prevention System (IPS) Using the CLI

Packet Tracer - 使用CLI配置IOS入侵防御系统&#xff08;IPS&#xff09; 地址表 目标 启用IOS入侵防御系统&#xff08;IPS&#xff09;。 配置日志记录功能。 修改IPS签名规则。 验证IPS配置。 背景/场景 您的任务是在R1上启用IPS&#xff0c;扫描进入192.168.1.0网络…