当前位置: 首页 > news >正文

【unity实战】使用unity制作一个红点系统

前言

注意,本文是本人的学习笔记记录,这里先记录基本的代码,后面用到了再回来进行实现和整理

素材

https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050
在这里插入图片描述

框架:

RedPointSystem.cs

using System.Collections.Generic;
using UnityEngine;namespace RedpointSystem
{public class RedPointNode{public int redNum; // 红点数量public string strKey; // 节点关键字public Dictionary<string, RedPointNode> children; // 子节点字典public delegate void RedPointChangeDelegate(int redNum); // 红点变化委托public RedPointChangeDelegate OnRedPointChange; // 红点变化事件public RedPointNode(string key){strKey = key;children = new Dictionary<string, RedPointNode>();}}public class RedPointSystem{private static RedPointSystem instance = new RedPointSystem(); // 单例实例public static RedPointSystem Instance // 单例访问属性{get { return instance; }}public RedPointNode root; // 根节点private RedPointSystem(){this.root = new RedPointNode(RedPointKey.Root); // 根节点初始化}// 添加节点public RedPointNode AddNode(string key){if (FindNode(key) != null){return null; // 如果节点已存在,则返回空}string[] keys = key.Split('|'); // 按'|'分割关键字RedPointNode curNode = root;curNode.redNum += 1; // 根节点红点数量加一curNode.OnRedPointChange?.Invoke(curNode.redNum); // 触发红点变化事件foreach (string k in keys){if (!curNode.children.ContainsKey(k)){curNode.children.Add(k, new RedPointNode(k)); // 如果子节点不包含该关键字,则添加新节点}curNode = curNode.children[k];curNode.redNum += 1; // 子节点红点数量加一curNode.OnRedPointChange?.Invoke(curNode.redNum); // 触发红点变化事件}return curNode;}// 查找节点public RedPointNode FindNode(string key){string[] keys = key.Split('|'); // 按'|'分割关键字RedPointNode curNode = root;foreach (string k in keys){if (!curNode.children.ContainsKey(k)){return null; // 如果子节点不包含该关键字,则返回空}curNode = curNode.children[k];}return curNode;}// 删除节点public void DeleteNode(string key){if (FindNode(key) == null){return; // 如果节点不存在,则返回}DeleteNode(key, root);}// 递归删除节点private RedPointNode DeleteNode(string key, RedPointNode node){string[] keys = key.Split('|'); // 按'|'分割关键字if (key == "" || keys.Length == 0){node.redNum = Mathf.Clamp(node.redNum - 1, 0, node.redNum); // 调整节点红点数量node.OnRedPointChange?.Invoke(node.redNum); // 触发红点变化事件return node;}string newKey = string.Join("|", keys, 1, keys.Length - 1); // 获取新的关键字RedPointNode curNode = DeleteNode(newKey, node.children[keys[0]]); // 递归删除子节点node.redNum = Mathf.Clamp(node.redNum - 1, 0, node.redNum); // 调整节点红点数量node.OnRedPointChange?.Invoke(node.redNum); // 触发红点变化事件// 移除红点数量为零的子节点if (curNode.children.Count > 0){foreach (RedPointNode child in curNode.children.Values){if (child.redNum == 0){child.children.Remove(child.strKey);}}}return node;}// 设置回调函数public void SetCallBack(string key, RedPointNode.RedPointChangeDelegate cb){RedPointNode node = FindNode(key);if (node == null){return; // 如果节点不存在,则返回}node.OnRedPointChange += cb; // 设置红点变化事件的回调函数}// 获取红点数量public int GetRedpointNum(string key){RedPointNode node = FindNode(key);if (node == null){return 0; // 如果节点不存在,则返回0}return node.redNum; // 返回节点的红点数量}}public class RedPointKey{// 根节点关键字public const string Root = "Root";// Play节点及其子节点关键字public const string Play = "Play";public const string Play_LEVEL1 = "Play|Level1";  // Play节点下的Level1节点public const string Play_LEVEL1_HOME = "Play|Level1|HOME";  // Level1节点下的HOME子节点public const string Play_LEVEL1_SHOP = "Play|Level1|SHOP";  // Level1节点下的SHOP子节点public const string Play_LEVEL2 = "Play|Level2";  // Play节点下的Level2节点public const string Play_LEVEL2_HOME = "Play|Level2|HOME";  // Level2节点下的HOME子节点public const string Play_LEVEL2_SHOP = "Play|Level2|SHOP";  // Level2节点下的SHOP子节点}}

使用案例

RootPanel.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RedpointSystem;public class RootPanel : MonoBehaviour
{public GameObject Canvas; // UI画布对象public MenuPanel menuPanel; // 菜单面板对象public LevelPanel levelPanel; // 关卡面板对象private void Awake(){// 在Awake方法中初始化红点节点,表示需要显示红点的条件// 示例:如果跨过每月最后一天的0点,则显示Play|Level1|HOME节点的红点RedPointSystem.Instance.AddNode(RedPointKey.Play_LEVEL1_HOME);// 示例:如果任务完成,可以领奖,则显示Play|Level1|SHOP节点的红点RedPointSystem.Instance.AddNode(RedPointKey.Play_LEVEL1_SHOP);// 其他条件类似,根据具体逻辑添加不同的红点节点RedPointSystem.Instance.AddNode(RedPointKey.Play_LEVEL2_HOME);RedPointSystem.Instance.AddNode(RedPointKey.Play_LEVEL2_SHOP);}private void Start() {// 在Start方法中设置菜单面板可见,关卡面板不可见menuPanel.gameObject.SetActive(true);levelPanel.gameObject.SetActive(false);}
}

MenuPanel.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using RedpointSystem;public class MenuPanel : MonoBehaviour
{public GameObject playBtn; // 播放按钮对象public GameObject continueBtn; // 继续按钮对象public GameObject optionsBtn; // 选项按钮对象public GameObject QuitBtn; // 退出按钮对象public LevelPanel LevelPanel; // 关卡面板对象void Start(){// 在Start方法中为播放按钮添加点击事件监听器,绑定到OnPlay方法playBtn.GetComponent<Button>().onClick.AddListener(OnPlay);// 初始化红点状态InitRedPointState();}void OnPlay(){// 点击播放按钮后,隐藏菜单面板,显示关卡面板this.gameObject.SetActive(false);LevelPanel.gameObject.SetActive(true);}void InitRedPointState(){// 获取Play节点的红点数量int redNum = RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play);// 根据红点数量更新红点状态RefreshRedPointState(redNum);// 设置回调函数,当Play节点的红点数量发生变化时刷新红点状态RedPointSystem.Instance.SetCallBack(RedPointKey.Play, RefreshRedPointState);}void RefreshRedPointState(int redNum){// 查找播放按钮下的红点和数字对象Transform redPoint = playBtn.transform.Find("RedPoint");Transform redNumText = redPoint.transform.Find("Num");// 根据红点数量决定是否显示红点if (redNum <= 0){redPoint.gameObject.SetActive(false);}else{redPoint.gameObject.SetActive(true);redNumText.GetComponent<Text>().text = redNum.ToString(); // 更新红点数字文本}}
}

LevelPanel.cs

using RedpointSystem;
using UnityEngine;
using UnityEngine.UI;public class LevelPanel : MonoBehaviour
{// UI元素引用public GameObject Back1Btn; // 返回按钮public MenuPanel menuPanel; // 菜单面板引用public GameObject Level1Btn; // 关卡1按钮public GameObject Level1Container; // 关卡1容器public GameObject Level1HomeBtn; // 关卡1的主页按钮public GameObject Level1ShopBtn; // 关卡1的商店按钮public GameObject Level2Btn; // 关卡2按钮public GameObject Level2Container; // 关卡2容器public GameObject Level2HomeBtn; // 关卡2的主页按钮public GameObject Level2ShopBtn; // 关卡2的商店按钮void Start(){// 初始时隐藏关卡容器Level1Container.SetActive(false);Level2Container.SetActive(false);// 给返回按钮添加点击事件监听器Back1Btn.GetComponent<Button>().onClick.AddListener(OnBackClick);// 给关卡1按钮添加点击事件监听器Level1Btn.GetComponent<Button>().onClick.AddListener(OnLevel1Click);// 给关卡2按钮添加点击事件监听器Level2Btn.GetComponent<Button>().onClick.AddListener(OnLevel2Click);// 给关卡1主页按钮添加点击事件监听器Level1HomeBtn.GetComponent<Button>().onClick.AddListener(OnLevel1HomeBtn);// 给关卡1商店按钮添加点击事件监听器Level1ShopBtn.GetComponent<Button>().onClick.AddListener(OnLevel1ShopBtn);// 给关卡2主页按钮添加点击事件监听器Level2HomeBtn.GetComponent<Button>().onClick.AddListener(OnLevel2HomeBtn);// 给关卡2商店按钮添加点击事件监听器Level2ShopBtn.GetComponent<Button>().onClick.AddListener(OnLevel2ShopBtn);// 初始化红点状态InitRedPointState();}// 返回按钮点击事件处理void OnBackClick(){// 隐藏当前关卡面板,显示菜单面板this.gameObject.SetActive(false);menuPanel.gameObject.SetActive(true);}// 关卡1按钮点击事件处理void OnLevel1Click(){// 切换显示关卡1容器的可见性Level1Container.gameObject.SetActive(!Level1Container.gameObject.activeSelf);}// 关卡2按钮点击事件处理void OnLevel2Click(){// 切换显示关卡2容器的可见性Level2Container.gameObject.SetActive(!Level2Container.gameObject.activeSelf);}// 关卡1主页按钮点击事件处理void OnLevel1HomeBtn(){// 删除关卡1主页红点RedPointSystem.Instance.DeleteNode(RedPointKey.Play_LEVEL1_HOME);}// 关卡1商店按钮点击事件处理void OnLevel1ShopBtn(){// 删除关卡1商店红点RedPointSystem.Instance.DeleteNode(RedPointKey.Play_LEVEL1_SHOP);}// 关卡2主页按钮点击事件处理void OnLevel2HomeBtn(){// 删除关卡2主页红点RedPointSystem.Instance.DeleteNode(RedPointKey.Play_LEVEL2_HOME);}// 关卡2商店按钮点击事件处理void OnLevel2ShopBtn(){// 删除关卡2商店红点RedPointSystem.Instance.DeleteNode(RedPointKey.Play_LEVEL2_SHOP);}void InitRedPointState(){// 初始化关卡1按钮的红点状态RefreshRedPointState(RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play_LEVEL1),Level1Btn.transform.Find("RedPoint"));// 设置关卡1红点回调RedPointSystem.Instance.SetCallBack(RedPointKey.Play_LEVEL1, (int redNum) =>{RefreshRedPointState(redNum, Level1Btn.transform.Find("RedPoint"));});// 初始化关卡2按钮的红点状态RefreshRedPointState(RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play_LEVEL2),Level2Btn.transform.Find("RedPoint"));// 设置关卡2红点回调RedPointSystem.Instance.SetCallBack(RedPointKey.Play_LEVEL2, (int redNum) =>{RefreshRedPointState(redNum, Level2Btn.transform.Find("RedPoint"));});// 初始化关卡1主页按钮的红点状态RefreshRedPointState(RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play_LEVEL1_HOME),Level1HomeBtn.transform.Find("RedPoint"));// 设置关卡1主页红点回调RedPointSystem.Instance.SetCallBack(RedPointKey.Play_LEVEL1_HOME, (int redNum) =>{RefreshRedPointState(redNum, Level1HomeBtn.transform.Find("RedPoint"));});// 初始化关卡1商店按钮的红点状态RefreshRedPointState(RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play_LEVEL1_SHOP),Level1ShopBtn.transform.Find("RedPoint"));// 设置关卡1商店红点回调RedPointSystem.Instance.SetCallBack(RedPointKey.Play_LEVEL1_SHOP, (int redNum) =>{RefreshRedPointState(redNum, Level1ShopBtn.transform.Find("RedPoint"));});// 初始化关卡2主页按钮的红点状态RefreshRedPointState(RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play_LEVEL2_HOME),Level2HomeBtn.transform.Find("RedPoint"));// 设置关卡2主页红点回调RedPointSystem.Instance.SetCallBack(RedPointKey.Play_LEVEL2_HOME, (int redNum) =>{RefreshRedPointState(redNum, Level2HomeBtn.transform.Find("RedPoint"));});// 初始化关卡2商店按钮的红点状态RefreshRedPointState(RedPointSystem.Instance.GetRedpointNum(RedPointKey.Play_LEVEL2_SHOP),Level2ShopBtn.transform.Find("RedPoint"));// 设置关卡2商店红点回调RedPointSystem.Instance.SetCallBack(RedPointKey.Play_LEVEL2_SHOP, (int redNum) =>{RefreshRedPointState(redNum, Level2ShopBtn.transform.Find("RedPoint"));});}void RefreshRedPointState(int redNum, Transform redPoint){Transform redNumText = redPoint.transform.Find("Num");// 如果红点数小于等于0,隐藏红点图标if (redNum <= 0){redPoint.gameObject.SetActive(false);}else{// 否则显示红点图标,并更新红点数显示redPoint.gameObject.SetActive(true);redNumText.GetComponent<Text>().text = redNum.ToString();}}
}

源码

整理好了会放上来

参考

https://www.bilibili.com/video/BV1jx4y1t7Uz/?spm_id_from=333.999.0.0&vd_source=2526a18398a079ddb95468a0c73f126e
https://www.bilibili.com/read/cv35873128/

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

相关文章:

【unity实战】使用unity制作一个红点系统

前言 注意&#xff0c;本文是本人的学习笔记记录&#xff0c;这里先记录基本的代码&#xff0c;后面用到了再回来进行实现和整理 素材 https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050 框架&#xff1a; RedPointSystem.cs using System.…...

开发指南046-机构树控件

为了简化编程&#xff0c;平台封装了很多前端组件。机构树就是常用的组件之一。 基本用法&#xff1a; import QlmOrgTree from /qlmcomponents/tree/QlmOrgTree <QlmOrgTree></QlmOrgTree> 功能&#xff1a; 根据权限和控制参数显示机构树。机构树数据来源于核…...

SpringBatch文件读写ItemWriter,ItemReader使用详解

SpringBatch文件读写ItemWriter&#xff0c;ItemReader使用详解 1. ItemReaders 和 ItemWriters1.1. ItemReader1.2. ItemWriter1.3. ItemProcessor 2.FlatFileItemReader 和 FlatFileItemWriter2.1.平面文件2.1.1. FieldSet 2.2. FlatFileItemReader2.3. FlatFileItemWriter 3…...

如何评估AI模型:评估指标的分类、方法及案例解析

如何评估AI模型&#xff1a;评估指标的分类、方法及案例解析 引言第一部分&#xff1a;评估指标的分类第二部分&#xff1a;评估指标的数学基础第三部分&#xff1a;评估指标的选择与应用第四部分&#xff1a;评估指标的局限性第五部分&#xff1a;案例研究第六部分&#xff1a…...

程序员学CFA——经济学(七)

经济学&#xff08;七&#xff09; 汇率外汇市场外汇市场的功能外汇市场的参与者卖方买方 汇率的计算汇率报价基础货币与计价货币直接报价与间接报价外汇报价习惯 名义汇率和实际汇率货币的升值与贬值交叉汇率计算即期汇率与远期汇率即期汇率与远期汇率的概念远期升水/贴水远期…...

imx335帧率改到10fps的方法

验证: imx335.c驱动默认的帧率是30fps,要将 IMX335 的帧率更改为 10fps,需要调整与帧率相关的参数。FPS(frames per second,每秒帧数)通常由 sensor 的曝光时间(exposure time)和垂直总时间(VTS,Vertical Total Size)共同决定。VTS 定义了 sensor 完成一帧图像采集…...

Large Language Model系列之二:Transformers和预训练语言模型

Large Language Model系列之二&#xff1a;Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型&#xff0c;它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出&#xff0c;主要用于机器翻译任务。随…...

java后端项目启动失败,解决端口被占用问题

报错信息&#xff1a; Web server failed to start . Port 8020 was already in use. 1、查看端口号 netstat -ano | findstr 端口号 2、终止进程 taskkill /F /PID 进程ID 举例&#xff1a;关闭8020端口...

PostgreSQL安装/卸载(CentOS、Windows)

说明&#xff1a;PostgreSQL与MySQL一样&#xff0c;是一款开源免费的数据库技术&#xff0c;官方口号&#xff1a;The World’s Most Advanced Open Source Relational Database.&#xff08;世界上最先进的开源关系数据库&#xff09;&#xff0c;本文介绍如何在Windows、Cen…...

OutOfMemoryError异常OOM排查

目录 参考工具MAT(Memory Analyzer)一、产生原因二、测试堆溢出 java.lang.OutOfMemoryError: Java heap space测试代码运行手动导出dump文件mat排查打开dump文件查看Leak Suspects(泄露疑点)参考 【JVM】八、OOM异常的模拟 MAT工具分析Dump文件(大对象定位) 用arthas排…...

【Python】Arcpy将excel点生成shp文件

根据excel点经纬度数据&#xff0c;生成shp&#xff0c;参考博主的代码&#xff0c;进行了修改&#xff0c;在属性表中保留excel中的数据。 参考资料&#xff1a;http://t.csdnimg.cn/OleyT 注意修改以下两句中的数字。 latitude float(row[1]) longitude float(row[2])imp…...

torch之从.datasets.CIFAR10解压出训练与测试图片 (附带网盘链接)

前言 从官网上下载的是长这个样子的 想看图片&#xff0c;咋办咧&#xff0c;看下面代码 import torch import torchvision import numpy as np import os import cv2 batch_size 50transform_predict torchvision.transforms.Compose([torchvision.transforms.ToTensor(),…...

什么ISP?什么是IAP?

做单片机开发的工程师经常会听到两个词&#xff1a;ISP和IAP&#xff0c;但新手往往对这两个概念不是很清楚&#xff0c;今天就来和大家聊聊什么是ISP&#xff0c;什么是IAP&#xff1f; 一、ISP ISP的全称是&#xff1a;In System Programming&#xff0c;即在系统编程&…...

外卖霸王餐系统怎么快速盈利赚钱?

微客云外卖霸王餐系统&#xff0c;作为近年来外卖行业中的一股新兴力量&#xff0c;以其独特的商业模式和营销策略&#xff0c;迅速吸引了大量消费者的目光。该系统通过提供显著的折扣和返利&#xff0c;让顾客能够以极低的价格甚至免费享受到美味的外卖&#xff0c;同时&#…...

Linux环境下安装Nodejs

Linux环境下安装Nodejs 下载地址&#xff1a;https://nodejs.org/zh-cn/download/package-manager 一、使用压缩包自定义安装 上述链接下载好对应版本的软件包后&#xff0c;我存放到 /evn/nodejs 目录下&#xff08;根据自己实际情况设置&#xff09; 设置软链接 sudo ln…...

【Rust】字符串String类型学习

什么是String Rust的核心语言中只有一个String类型&#xff0c;那就是String slice,str通常被当作是&str的借用。String类型是通过标准库提供的&#xff0c;而不是直接编码到核心语言中&#xff0c;它是一个可增长的、可变的、utf-8编码的类型。str和String都是utf-8编码的…...

先验概率 后验概率 最大似然估计 自编码器AE

先验概率 先验概率&#xff1a;由因求果中的因 作用&#xff1a;后验概率是比较难以计算的&#xff0c;我们通常使用贝叶斯公式由先验概率计算后验概率。 贝叶斯公式&#xff1a;P(B|A)P(A|B)P(B)/P(A)&#xff0c;其中P(B|A)为后验概率&#xff0c;P(A|B)为先验概率。 后验…...

qt 鼠标接近某线时,形状变化举例

1.qt 鼠标接近某线时&#xff0c;形状变化举例 在Qt中&#xff0c;要实现鼠标接近某条线时形状发生变化的效果&#xff0c;你需要利用QWidget的enterEvent和leaveEvent&#xff0c;或者更通用的mouseMoveEvent来检测鼠标的位置&#xff0c;并相应地改变鼠标的光标形状。 以下…...

800块,我从淘宝上买AGV……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 从淘宝上打算够购买一台AGV小车&#xff0c;上去一搜&#xff0c;嘿&#xff0c;你别说&#xff0c;还真有。便宜的才200块钱。 很兴奋把…...

C++相关概念和易错语法(21)(虚函数、协变、析构函数的重写)

多态的核心是虚函数&#xff0c;本文从虚函数出发&#xff0c;根据原理慢慢推进得到结论&#xff0c;进而理解多态 1.虚函数 先看一下下面的代码&#xff0c;想想什么导致了这个结果 #include <iostream> using namespace std;class A { public:virtual void test(){co…...

SoulApp创始人张璐团队以AI驱动社交进化,平台社交玩法大变革

在科技飞速发展的今天,人工智能正逐步渗透到社交媒体的各个环节,赋能全链路社交体验。AI的引入不仅提升了内容推荐的精准度,使用户能够更快速地发现感兴趣的内容,还能通过用户行为预测,帮助平台更好地理解和满足用户需求。此外,AI驱动的虚拟助手和聊天机器人也正在改变用户互动…...

MySQL事务隔离级别+共享锁,排他锁,乐观锁,悲观锁

在操作数据库的时候&#xff0c;可能会由于并发问题而引起的数据的不一致性&#xff08;数据冲突&#xff09;。 MySQL事务隔离级别 一个事务的执行&#xff0c;本质上就是一条工作线程在执行&#xff0c;当出现多个事务同时执行时&#xff0c;这种情况则被称之为并发事务&am…...

Zynq系列FPGA实现SDI编解码转SFP光口传输(光端机),基于GTX高速接口,提供6套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx-Kintex7上的应用 3、详细设计方案设计原理框图输入Sensor之-->OV5640摄像头输入Sensor之-->HDMIVDMA图像缓存RGB转BT1120GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBHDMI输…...

SpringBoot实现图形验证码

目录 项目创建 前端代码实现 约定前后端交互接口 需求分析 接口定义 Hutool工具 实现服务器端代码 引入依赖 获取验证码 验证码校验 调整前端代码 随着安全性的要求越来越高&#xff0c;目前许多项目中都使用了验证码&#xff0c;验证码也有各种类型&#xff0c;如 …...

【JVM基础01】——介绍-初识JVM运行流程

目录 1- 引言&#xff1a;初识JVM1-1 JVM是什么&#xff1f;(What)1-1-1 概念1-1-2 优点 1-2 为什么学习JVM?(Why) 2- 核心&#xff1a;JVM工作的原理&#xff08;How&#xff09;⭐2-1 JVM 的组成部分及工作流程2-2 学习侧重点 3- 小结(知识点大纲)&#xff1a;3-1 JVM 组成3…...

图数据库 - Neo4j简介

深入理解 Neo4j 与 Cypher 语法 什么是 Neo4j Neo4j 是一个基于图的数据库管理系统&#xff0c;它使用图形理论来表示数据关系。这种数据库与传统的关系型数据库不同&#xff0c;它更适合处理高度互联的数据结构。 基本概念 图&#xff1a;在 Neo4j 中&#xff0c;数据以图的…...

C#环境与数据类型

文章目录 C#环境.NET 框架集成开发环境 创建一个C#项目数据类型值类型引用类型对象类型object动态类型dynamic字符串类型string 指针类型 类型转换隐式转换显示转换&#xff08;强制转换&#xff09;C#提供的类型转换方法Convert类Parse方法TryParse方法 C#环境 .NET 框架 C#是…...

jenkins系列-06.harbor

https://github.com/goharbor/harbor/releases?page2 https://github.com/goharbor/harbor/releases/download/v2.3.4/harbor-offline-installer-v2.3.4.tgz harbor官网&#xff1a;https://goharbor.io/ 点击 Download now 链接&#xff0c;会自动跳转到上述github页面&am…...

kotlin get set

在 Kotlin 中&#xff0c;如果想实现一个类的属性可以从外部读取但不能修改&#xff0c;可以使用自定义的 getter 和 private setter。以下是一个示例代码&#xff1a; class MyClass {var myProperty: Stringprivate set // 使 setter 私有化&#xff0c;外部无法修改get // …...

Flask包算法服务

常规包算法服务,就是比较简单,直接起一个fastapi就可以了。 import time import asyncio from aidraw import engineer_log as eng from fastapi import FastAPI from pydantic import BaseModel from typing import Optional from aidraw.ardraw import run_aidraw_api# 起…...