【unity之IMGUI】所以你还想在百度上搜IMGUI的底层原理是什么吗?

news2024/11/20 12:41:31

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unity实战入门

在这里插入图片描述


IMGUI原理


文章目录

    • IMGUI原理
    • 🎶前言
    • 🎶(A)IMGUI工作原理
    • 🎶(B)IMGUI——基本控件
    • 🎶(C)IMGUI基本控件—文本控件
    • 🎶(D)IMGUI基本控件—按钮控件
      • 练习操作
    • 🎶(E)IMGUI基本控件—多选框和单选框
      • 练习操作
    • 🎶(G)IMGUI基本控件—拖动条
      • 练习操作
    • 🎶(F)IMGUI基本控件—输入框
      • 练习操作
    • 🎶(H)IMGUI基本控件—图片绘制
    • 🎶(III)IMGUI——复合控件
    • 🎶(J)IMGUI复合控件—工具栏(标签)
      • 练习操作
    • 🎶(K)IMGUI复合控件—分组和滚动视图
      • 实践练习
    • 🎶(L)IMGUI复合控件—窗口相关
      • 实践练习
    • 🎶(M)IMGUI综合—GuiSkin
    • 🎶(N)IMGUI综合—GUILayout
    • ⭐相关文章⭐


🎶前言

  • IMGUI不会用作游戏的UI开发
  • 会用到游戏的编辑器开发

🅰️ 题单来自:唐老狮


🎶(A)IMGUI工作原理


在这里插入图片描述


🎶(B)IMGUI——基本控件


在这里插入图片描述
在这里插入图片描述

  • GUIContent -----可以是以下三者的结合
    在这里插入图片描述
    tooltip–鼠标选中后课得到该信息(作为隐藏信息使用)
  • GUIStyle ———全部综合
    1.Nomal ——正常情况
    2.Hover——鼠标停留后
    3.Active——按下之后

🎶(C)IMGUI基本控件—文本控件


在这里插入图片描述


🎶(D)IMGUI基本控件—按钮控件


在这里插入图片描述

  • 点击的逻辑情况 ——> GUI.Button == true ;
    (在原地方点击后松开才算一次点击)

练习操作

  • 用GUI制作一个游戏开始界面,上面有开始游戏,退出游戏,设置等等按钮选项,点击开始游戏可以切换到游戏场景
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  标签和按钮组件的应用     
//___________功能: 主面板界面 
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class GuiExsi : MonoBehaviour
{
    public Rect RectLabel;
    public Rect RectButton1;
    public Rect RectButton2;
    public Rect RectButton3;
  
    public GUIContent guiContent;
    public GUIStyle guistyle;

    public GUIStyle button1;
    public GUIStyle button2;
    public GUIStyle button3;

    private void OnGUI()
    {
        //------------开始游戏基本画面--------------

        GUI.Label(RectLabel , guiContent ,guistyle);
        if (GUI.Button(RectButton1, "开始游戏", button1))
        {
            SceneManager.LoadScene("simple1");
                
        }
        GUI.Button(RectButton2,"设置", button2);
        GUI.Button(RectButton3, "退出游戏",button3);

        //------------游戏设置面板--------------



    }
}


🎶(E)IMGUI基本控件—多选框和单选框


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习操作

在上一题基础上,弄一个游戏设置面板
有背景音乐的开关和音效的开关
并且点击开始界面的设置可以打开设置面板

  • 设置界面主代码

//-------------------------------------
//—————————————————————————————————————
//___________项目: GUI组件练习 
//___________功能: 设置面板    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class GUISetPlane : MonoBehaviour
{
    static public  GUISetPlane instance;
    public Rect SetLable1, SetLable2;
    public Rect closeButPos;
    public GUIContent closeButton;

    private  bool swtich1 = true ;
    private  bool swtich2 = true ;
    private  bool swtich3 = true;
    public Rect SetLable3;
    //-----------------------------------

    public void Active()      //让自身激活
    {
        Debug.Log("设置面板已经激活");
        GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;
        a.enabled = true;
    }

    public void DisActive()   //让自身失活
    {
        Debug.Log("设置面板已经失活");
        GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;
        a.enabled = false ;
    }

    //-------------------------------------
    private void OnGUI()
    {
       
        swtich1 = GUI.Toggle(SetLable1, swtich1, "音效开关");

        swtich2 = GUI.Toggle(SetLable2, swtich2, "音乐开关");

        swtich3 = GUI.Toggle(SetLable3, swtich3, "音乐开关");

        if (GUI.Button(closeButPos, closeButton))
        {
            Debug.Log("已点击关闭窗口");
            DisActive();
            GuiExsi.instance.gameObject.GetComponent<GuiExsi>().enabled = true ;
        }
    }
    private void Awake()
    {
        instance = this;
    }
}

  • 开始界面主代码
//-------------------------------------
//—————————————————————————————————————
//___________项目:   GUI组件练习     
//___________功能:  开始界面    
//___________创建者:秩沅
//_____________________________________
//-------------------------------------

public class GuiExsi : MonoBehaviour
{
    static public GuiExsi instance;
    //---------------------------
    public Rect RectLabel;
    public Rect RectButton1;
    public Rect RectButton2;
    public Rect RectButton3;
    public GUIContent guiContent;
    public GUIStyle guistyle;
    public GUIStyle button1;
    public GUIStyle button2;
    public GUIStyle button3;
    //---------------------------
    public void Active()      //让自身激活
    {
        Debug.Log("主面板已经激活");
        GuiExsi a =instance.gameObject.GetComponent<GuiExsi>() as GuiExsi;
        a.enabled = true ;
    }
    public void DisActive()   //让自身失活
    {
        Debug.Log("主面板已经失活");
        GuiExsi a = instance.gameObject.GetComponent<GuiExsi>() as GuiExsi;
        a.enabled = false;
    }
    private void OnGUI()
    {
        //------------开始游戏基本画面--------------

        GUI.Label(RectLabel , guiContent ,guistyle);
        if (GUI.Button(RectButton1, "开始游戏", button1))
        {
            SceneManager.LoadScene("simple1");               
        }

        GUI.Button(RectButton3, "退出游戏",button3);

       if(GUI.Button(RectButton2, "设置", button2))
        {
            Debug.Log("已点击设置");
            DisActive();
              GUISetPlane.instance.gameObject.GetComponent<GUISetPlane>().enabled = true ;
     
        }   
    }
    private void Awake()
    {
         instance = this;
    }
}


🎶(G)IMGUI基本控件—拖动条


在这里插入图片描述

练习操作

  • 在原有的基础上加入拖动条
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目: 单选框和拖动条的应用 
//___________功能: 音效设置面板    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class GUISetPlane : MonoBehaviour
{
    //-----------------------------------
    static public  GUISetPlane instance;
    public Rect SetLable1, SetLable2;
    
    public Rect closeButPos;
    public GUIContent closeButton;
    private  bool swtich1 = true ;
    private  bool swtich2 = true ;

    //-----------------------------------

    float ling1 = 1f;
    float ling2 = 1f;
    public Rect roelPso1;
    public Rect roelPso2;
    public Rect texturePos;
    public Texture texture;

    //-----------------------------------

    public void Active()      //让自身激活
    {
        Debug.Log("设置面板已经激活");
        GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;
        a.enabled = true;
    }

    public void DisActive()   //让自身失活
    {
        Debug.Log("设置面板已经失活");
        GUISetPlane a = instance.gameObject.GetComponent<GUISetPlane>() as GUISetPlane;
        a.enabled = false ;
    }
    //-------------------------------------
    private void OnGUI()
    {
        GUI.DrawTexture(texturePos, texture);
        swtich1 = GUI.Toggle(SetLable1, swtich1, "音效开关");
        swtich2 = GUI.Toggle(SetLable2, swtich2, "音乐开关");

          ling1 = GUI.HorizontalSlider(roelPso1 , ling1, 1, 0);
          ling2 = GUI.HorizontalSlider(roelPso2 , ling2, 1, 0);

        if (GUI.Button(closeButPos, closeButton))
        {
            Debug.Log("已点击关闭窗口");
            DisActive();
            GuiExsi.instance.gameObject.GetComponent<GuiExsi>().enabled = true ;
        }
    }
    private void Awake()
    {
        instance = this;
    }
}


🎶(F)IMGUI基本控件—输入框


在这里插入图片描述

练习操作

  • 在之前的基础上
    弄一个登陆面板
    有用户名输入和密码输入
    有进入游戏和返回上一级按钮
    点击开始界面中的开始游戏后 进入登陆面板
    输入的 用户名为 admin 密码为8888才能切换场景
    在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:   输入框的和图片绘制组件的应用
//___________功能:  登录界面面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class RegisterIn : MonoBehaviour
{
    public   Rect fieldPos1;
    public   Rect fieldPos2;
    public   Rect texturePos;
    public   Rect buttonPos,buttonPos2;
    public   Rect lable1, lable2;
    public   Texture backGrounp;
    public   GUIContent content,content2;
    public   GUIStyle buttonStyle, buttonStyle2;
    string acount = "";
    string secret = "";
    static public RegisterIn instance;
    //-------------------------------------
    public void Active()      //让自身激活
    { 
        RegisterIn a = instance.gameObject.GetComponent<RegisterIn>() as RegisterIn;
        a.enabled = true;
    }
    public void DisActive()   //让自身失活
    {      
        RegisterIn a = instance.gameObject.GetComponent<RegisterIn>() as RegisterIn;
        a.enabled = false;
    }
    //-------------------------------------
    private void OnGUI()
    {
        GUI.DrawTexture(texturePos, backGrounp);
        acount = GUI.TextField(fieldPos1 , acount);
        secret = GUI.PasswordField(fieldPos2, secret, '*');
        GUI.Label (lable1  ,"用户名");
        GUI.Label (lable2  , "密码");
        //信息正确载入场景
        if ( GUI.Button(buttonPos, content, buttonStyle))
        {
            if( acount == "admin" && secret == "88888")
            {
                SceneManager.LoadScene("simple1");
                Debug.Log("登录成功");
            }          
        }
        //返回到主界面
        if (GUI.Button(buttonPos2, content2, buttonStyle2))
        {
            DisActive();
            GuiExsi.instance.gameObject.GetComponent<GuiExsi>().enabled = true;
        }

    }
    private void Awake()
    {
        instance = this;
    }
}


🎶(H)IMGUI基本控件—图片绘制


在这里插入图片描述
在这里插入图片描述


🎶(III)IMGUI——复合控件


在这里插入图片描述


🎶(J)IMGUI复合控件—工具栏(标签)


在这里插入图片描述
在这里插入图片描述

练习操作

  • 在登录进去的界面后,创建三个信息标签
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  复合控件工具栏的应用    
//___________功能: 信息显示面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Maincontent : MonoBehaviour
{
    //默认选择第一个表格
    int num = 0;    
    public Rect toolPos2 ;
    public GUIStyle messStyle;
    string[] mess = { "人物信息","装备信息","宠物信息"};
    private void OnGUI()
    {      
          //num =  GUI.Toolbar(toolPos1,num,mess);
          num = GUI.SelectionGrid(toolPos2, num, mess,1, messStyle);

    }

}


🎶(K)IMGUI复合控件—分组和滚动视图


在这里插入图片描述
在这里插入图片描述

实践练习

  • 动态变化滚动视图的内容框长度
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:  复合控件工具栏的应用    
//___________功能: 信息显示面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Maincontent : MonoBehaviour
{
    
    int num = 0; //默认选择第一个表格
    public int viewNumber;
    public Rect toolPos2 ,showPos,contenPos ;
    public Vector2 scorllPos;
    public GUIStyle messStyle;
    string[] mess = { "人物信息","装备信息","宠物信息"};
    string[] messView = {"装备1", "装备2", "装备3", "装备4", "装备5" };
    
    private void OnGUI()
    {      
          //num =  GUI.Toolbar(toolPos1,num,mess);
        num = GUI.SelectionGrid(toolPos2, num, mess,1, messStyle);


        //动态变化内容框的长度——随着内容的数量而改变
        contenPos.height = viewNumber * 30;

        scorllPos = GUI.BeginScrollView(showPos, scorllPos, contenPos);
        
        for (int i = 0; i < viewNumber ; i++)
        {
            GUI.Button(new Rect(0,i * 30, 50, 30),messView[i]);
        }
       
        GUI.EndScrollView();
    }

}


🎶(L)IMGUI复合控件—窗口相关


  • ID相当于窗口唯一识别码
    在这里插入图片描述

实践练习

  • 将游戏退出

在这里插入图片描述


//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 退出确定窗口
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class ExitWindows : MonoBehaviour
{
    static public ExitWindows instance;
    public Rect windowPos;
    //---------------------------
    public void Active()      //让自身激活
    {
        Debug.Log("主面板已经激活");
        ExitWindows a = instance.gameObject.GetComponent<ExitWindows>() as ExitWindows;
        a.enabled = true;
    }
    public void DisActive()   //让自身失活
    {
        Debug.Log("主面板已经失活");
        ExitWindows a = instance.gameObject.GetComponent<ExitWindows>() as ExitWindows;
        a.enabled = false;
    }
    private void OnGUI()
    {
        GUI.ModalWindow(1, windowPos, (int id)=> WinFuction(1) , "提示");
        
    }
    public Rect pos1, pos2, pos3;
    public void WinFuction( int id)
    {
        
        GUI.Label(pos1, "请再次确认");
        if(GUI.Button(pos2, "退出"))
        {
            Application.Quit();
        }
        else if (GUI.Button(pos3, "取消"))
        {
            DisActive();
        }
    }
    
    private void Awake()
    {
        instance = this;
    }
}


🎶(M)IMGUI综合—GuiSkin


在这里插入图片描述

  • 图片中备注来自唐老狮
    在这里插入图片描述

🎶(N)IMGUI综合—GUILayout


在这里插入图片描述


⭐相关文章⭐

⭐【2023unity游戏制作-mango的冒险】-6.关卡设计

⭐【2023unity游戏制作-mango的冒险】-5.攻击系统的简单实现

⭐【2023unity游戏制作-mango的冒险】-4.场景二的镜头和法球特效跟随

⭐【2023unity游戏制作-mango的冒险】-3.基础动作和动画API实现

⭐【2023unity游戏制作-mango的冒险】-2.始画面API制作

⭐【2023unity游戏制作-mango的冒险】-1.场景搭建

⭐“狂飙”游戏制作—游戏分类图鉴(网易游学)

⭐本站最全-unity常用API大全(万字详解),不信你不收藏



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!

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

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

相关文章

安装python详细步骤(超详细,保姆级,一步一图)

❄️作者介绍&#xff1a;奇妙的大歪❄️ &#x1f380;个人名言&#xff1a;但行前路&#xff0c;不负韶华&#xff01;&#x1f380; &#x1f43d;个人简介&#xff1a;云计算网络运维专业人员&#x1f43d; 前言 作为一个实用学习的主义的学习者&#xff0c;最关心的问题一…

光亚展 | 移远通信Matter解决方案,照亮智能家居产业未来

6月9-12日&#xff0c;第二十八届广州国际照明展览会&#xff08;光亚展&#xff09;在中国进出口商品交易会展馆举行。本次展会以“光未来”为主题&#xff0c;整个照明、灯饰产业链的上下游企业、品牌在此汇聚&#xff0c;共同探讨照明行业未来的发展方向。 作为照明行业智能…

智见|黄铁军:未来的大模型生态中将会只有少数赢家

2023智源大会可谓群星璀璨。中外200余位人工智能顶级专家参会&#xff0c;人工智能领域最关键的人物、机构悉数亮相。 全面、专业、前沿&#xff0c;会场上大咖们观点激荡、多元碰撞&#xff0c;会场下观众们兴奋异常、座无虚席。 会上&#xff0c;北京智源人工智能研究院院长黄…

英语知识点-填空-考试酷

第一章 英语知识填空题 一、语法 1.词法&#xff1a;介词将关系建立在人/物A与人/物B&#xff0c;可能会形成修饰限制关系&#xff0c;有定语成分&#xff1b;介词将关系建立在事A与物B&#xff0c;可能有事A动作发生时环境因素&#xff0c;有状语成分&#xff1b;写作中经常用…

【Vue.js】1711- 深入浅出 Vue3 自定义指令

Vue.js[1] 提供了丰富的指令来简化开发者的工作。除了内置指令外&#xff0c;Vue.js 还支持自定义指令&#xff0c;开发者可以根据自己的需求扩展 Vue.js 的指令库。Vue.js 3.x 相较于 Vue.js 2.x 在自定义指令方面进行了一些改进&#xff0c;本文将介绍 Vue.js 3.x 中自定义指…

HLS 设计数字时钟

绪论 该项目的目标是展示 HLS 在设计数字系统方面的能力。为此&#xff0c;本文展示如何在 HLS 中描述数字时钟。如果有兴趣学习 HLS 编码技术&#xff0c;请参阅&#xff1a; ❝ https://highlevel-synthesis.com/ ❞ ❝ https://www.udemy.com/course/hls-combinational-circ…

2023 年的 5G 和网络安全风险

5G 网络的推出出奇地缓慢。作为一个概念&#xff0c;它于 2016 年推出&#xff0c;但直到 2019 年才在全球范围内推出。 四年后&#xff0c;在大多数国家地区&#xff0c;拥有 5G 设备的人数仍然很少。 不确定采用缓慢背后的原因是负担能力、缺乏必要性还是关于它的严重错误…

【redis】redis集群

这里是redis系列文章之《redis集群》&#xff0c;上一篇文章链接&#xff1a;【redis基础】哨兵_努力努力再努力mlx的博客-CSDN博客 目录 概念 作用 集群算法-分片-槽位slot 槽位与分配的概念及两者的优势 官网介绍分析 槽位 分片 两者的优势 slot槽位映射的三种解决方…

linux eventfd事件通知 比信号量更好用

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e; 目录 前言 概述 原理简介 使用场景 接口说明 头文件 参数说明 代码演示 默认参数 …

1740_使用Python+ImageMagick实现图像的批量压缩

全部学习汇总&#xff1a; GreyZhang/python_basic: My learning notes about python. (github.com) 前些年使用Linux的时候为了能够方便地往网络上上传照片&#xff0c;使用shell ImageMagick的组合进行照片的批量压缩一直觉得比较方便。不过&#xff0c;那时候即使这么简单的…

JMeter从入门到精通--开始你的第一个JMeter脚本

JMeter是一款在国外非常流行和受欢迎的开源性能测试工具&#xff0c;像LoadRunner 一样&#xff0c;它也提供了一个利用本地Proxy Server&#xff08;代理服务器&#xff09;来录制生成测试脚本的功能&#xff0c;但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——…

软考A计划-2023系统架构师-知识点集锦(4/4)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

redis的远程登录配置

目录 服务端&#xff1a; 客户端&#xff1a; 服务端&#xff1a; 步骤一&#xff1a;关闭防火墙 systemctl stop firewalld iptables -F setenforce 0 步骤二&#xff1a;配置/etc/redis.conf配置文件 vim /etc/redis.conf bind 127.0.0.1 改为 bind 0.0.0.0 &#xff08;…

【图书推荐 | 13】前端系列

【赠书活动第十三期 】 图书推荐 本期书籍&#xff1a;前端系列 图书列表&#xff1a; Vue.js核心技术解析Nuxt.js实战Nuxt.js Web开发实战HTML5CSS 从入门到精通Flutter2 开发实例精解Electron项目开发实战 Vue.js核心技术解析 Nuxt.js实战 Nuxt.js Web开发实战 HTML5CSS 从入…

机器鱼的制作分享

1. 运动功能说明 本文示例将实现R330样机机器鱼胸鳍能够灵活的上下摆动的功能。 2. 结构说明 本样机采用舵机模块来进行仿生机器鱼结构的设计。 胸鳍 整机 3. 电子硬件 在这个示例中&#xff0c;我们采用了以下硬件&#xff0c;请大家参考&#xff1a; 主控板 Basra主控板&…

一文搞懂ChatGPT 和 AIGC 到底是什么?【最强科普】

目录&#xff1a; 1.AIGC是什么&#xff1f; 2.ChatGPT是什么&#xff1f; 3.ChatGPT发展的几个阶段&#xff1f; 4.ChatGPT能做什么&#xff1f; 5.ChatGPT的应用场景&#xff1f; 一、AIGC是什么&#xff1f; GC&#xff08;Generated Content&#xff09;&#xff1a…

Java实训日记第六天——2023.6.12

文章目录 一、MyBatis-Plus二、将MyBatis-Plus框架整合到SpringBoot1.导依赖2.在启动类上开扫描3.在application.yml中配关于数据库的连接4.在idea中安装MyBatisX插件5.在idea中连上MySQL6.测试查询所有 3.完善增删改查功能4.逻辑删除5.自动填充 一、MyBatis-Plus 1.为什么有了…

【手撕MyBatis源码】Configuration配置体系

文章目录 Configuration概述Configuration的核心作用与配置来源配置元素元素承载配置文件解析XML文件解析流程注解配置解析 Configuration概述 Configuration 是整个MyBatis的配置体系集中管理中心&#xff0c;前文所说的Executor、StatementHandler、Cache、MappedStatement……

react---react router 5 基本使用

目录 1.路由介绍 2.路由使用 3.路由组件和一般组件 4.Switch 单一匹配 5.解决二级路由样式丢失的问题 6.路由精准匹配和模糊匹配 1.路由介绍 路由是根据不同的 URL 地址展示不同的内容或页面&#xff0c;在 SPA 应用中&#xff0c;大部分页面结果不改变&#xff0c;只改变…

PostgreSQL 对特定类索引的优化,节省磁盘空间百倍 --BRIN 索引应用在生产案例...

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…