【unity之IMGUI实践】单例模式管理数据存储【二】

在这里插入图片描述


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

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

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏unityUI专题篇
在这里插入图片描述


单例模式管理面板对象


文章目录

    • 单例模式管理面板对象
    • 🎶前言
    • 🎶(==A==)常用关键API
    • 🎶(==B==)需求分析
    • 🎶(==C==)逻辑封装——游戏音乐数据存储
      • 😶‍🌫️:步骤实现
        • 实现音乐数据的同步更新——最终代码
    • 🎶(==D==)逻辑封装——游戏排行榜数据存储
      • 😶‍🌫️:**步骤实现**
        • 总UML图
    • 🎶(==E==)逻辑封装——音乐数据管理类
      • 😶‍🌫️步骤:
      • 结论:
    • 👌结论:


🎶前言


🅰️


🎶(A常用关键API


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


🎶(B需求分析


在这里插入图片描述


🎶(C逻辑封装——游戏音乐数据存储


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


😶‍🌫️:步骤实现

1.首先将音乐数据封装在类中,不采用单例模式
2. 而后封装一个游戏数据类为单例模式:功能:利用Playerfabs进行数据存储音乐数据
3.读取存盘中的数据更新游戏数据


1.首先将音乐数据封装在类中,不采用单例模式

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   音乐相关数据存储类      
//___________功能:    记录音乐相关的数据 
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class MusicData 
{//记录音乐,音效的开关状态和拖动条public bool  musicSwitch;public bool  soundSwitch;public float musicRoll;public float soundRoll;public bool isFirst;
}

2. 而后封装一个游戏数据类为单例模式:功能:利用Playerfabs进行数据存储音乐数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据类   
//___________功能:    记录游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;private GameData(){musicData = new MusicData();musicData = PlayerfabsClass.Chats.GetDataMess(typeof(MusicData), "Music") as MusicData ;if ( !musicData.isFirst ) //如果是第一次进入游戏{musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 0.5f;musicData.soundRoll = 0.5f;PlayerfabsClass.Chats.SaveDataMess(musicData, "Music");   //设置为自定义的默认值后进行存储             }}}

3.读取存盘中的数据更新游戏数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  设置面板功能
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class SetPlane : BeginFather<SetPlane>
{//将功能控件拖拽对应的成员变量中public Button closeButt;public Slider sliderMusic;public Slider sliderSound;public ToggleM toggleMusic;public ToggleM toggleSound;private float toggle1;private float toggle2;private void Start(){//按钮中事件的添加closeButt.triggerEvent += () => {this.gameObject.SetActive(false);BeginPlane.SingleInstance.Show();};//滑条中事件的添加sliderMusic.triggerEvent += (value) =>{};sliderSound.triggerEvent += (value) =>{};//多选框中事件的添加toggleMusic.triggerEvent += (value) =>{};toggleSound .triggerEvent += (value) =>{};this.Hidden();}private void MusicDataUpdate(){MusicData data = GameData.DataContorl.musicData;sliderMusic.NowValue = data.musicRoll;sliderSound.NowValue = data.soundRoll;toggleMusic.IsSwitch = data.musicSwitch;toggleSound.IsSwitch = data.soundSwitch;}public override void Show(){base.Show();  //保留父类的封装逻辑MusicDataUpdate();}
}

实现音乐数据的同步更新——最终代码


目的: 将游戏游戏数据保存至硬盘,下次开启游戏实现数据同步

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据类   
//___________功能:    记录游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;private GameData(){musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时){musicData.isFirst = true;musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 1f;musicData.soundRoll = 1f;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                }}//音乐开关数据的更新存储public void ChangeMusicS( bool value){musicData.musicSwitch = value;PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music");}//音效开关数据的更新存储public void ChangeSoundS(bool value){musicData.soundSwitch  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音乐滑条数据的更新存储public void ChangeMusicR(float value){musicData.musicRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音效滑条数据的更新存储public void ChangeSoundR(float value){musicData.soundRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  设置面板功能
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class SetPlane : BeginFather<SetPlane>
{//将功能控件拖拽对应的成员变量中public Button closeButt;public Slider sliderMusic;public Slider sliderSound;public ToggleM toggleMusic;public ToggleM toggleSound;private float toggle1;private float toggle2;private MusicData musicData;private void Start(){//按钮中事件的添加closeButt.triggerEvent += () => {Hidden();BeginPlane.SingleInstance.Show();};//多选框中事件的添加toggleMusic.triggerEvent += (value) => GameData.DataContorl.ChangeMusicS(value);toggleSound.triggerEvent += (value) => GameData.DataContorl.ChangeSoundS(value);//滑条中事件的添加sliderMusic.triggerEvent += (value) => GameData.DataContorl.ChangeMusicR(value);sliderSound.triggerEvent += (value) => GameData.DataContorl.ChangeSoundR(value);Hidden();}private void MusicDataUpdate() //将已存盘的数据读取后更新{MusicData data = GameData.DataContorl.musicData;toggleMusic.IsSwitch = data.musicSwitch;toggleSound.IsSwitch = data.soundSwitch;sliderMusic.NowValue = data.musicRoll;sliderSound.NowValue = data.soundRoll;}public override void Show(){base.Show();        //保留父类的封装逻辑MusicDataUpdate();  //在展示时更新}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 开始面板类
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class BeginPlane : BeginFather<BeginPlane>
{// 获取开始面板中的各个按钮控件public Button but1;public Button but2;public Button but3;public Button but4;private void Start(){but1.triggerEvent += () => { SceneManager.LoadScene("Start"); };                 //点击“开始游戏”but2.triggerEvent += () => { Hidden(); SetPlane.SingleInstance.Show();   };      //点击“游戏设置”but3.triggerEvent += () => { Application.Quit(); };                              //点击“退出游戏”but4.triggerEvent += () => { Hidden();  };                                       //点击“排行榜”}}

🎶(D逻辑封装——游戏排行榜数据存储


界面设计

在这里插入图片描述

  • 效果演示:在这里插入图片描述

😶‍🌫️:步骤实现

  • 1.封装排行榜数据类(无参构造做new ,有参构造做一键赋值)

  • 2.以数据管理类为载体进行更新API封装——只存储排行榜中的数据到盘(注册表)中

  • 3.封装排行榜面板类进行实时显示


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

封装排行榜数据类(无参构造做new ,有参构造做一键赋值)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:   
//___________功能: 排行榜数据的载体    
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class RankData
{ public string name;public int score;public int time;public RankData() //用来new{}public RankData(string name, int score, int time ) //用来一键赋值{this.name = name ;this.score = score ;this.time = time;}
}

在这里插入图片描述 ----------------------在这里插入图片描述
以数据管理类为载体进行更新API封装

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据管理类   
//___________功能:    记录和更新游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;public List<RankData> rankTopData;//固定承载前六名的数据信息private GameData(){//初始化读取音乐数据musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;//初始化读取排行榜数据rankTopData = PlayerPrefsDataMgr.Instance.LoadData(typeof(List<RankData>), "Rank") as List<RankData>;if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时){musicData.isFirst = true;musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 1f;musicData.soundRoll = 1f;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                }}       //------------------------排行榜数据的更新封装-------------------------------//在排行榜中添加数据public void SaveRankData(string name, int score, int time){rankTopData.Add(new RankData(name, score, time));Debug.Log(rankTopData);rankTopData.Sort((a, b) => { return a.score > b.score ? -1 : 1; }); //添加排序规则//但list大于6时for (int i = rankTopData.Count - 1 ; i > 5; i--){rankTopData.RemoveAt(i); //删除}PlayerPrefsDataMgr.Instance.SaveData(rankTopData, "Rank" );}//------------------------音乐数据的更新封装------------------------------//音乐开关数据的更新存储public void ChangeMusicS( bool value){musicData.musicSwitch = value;PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music");}//音效开关数据的更新存储public void ChangeSoundS(bool value){musicData.soundSwitch  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音乐滑条数据的更新存储public void ChangeMusicR(float value){musicData.musicRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音效滑条数据的更新存储public void ChangeSoundR(float value){musicData.soundRoll  = value;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}
}

在这里插入图片描述-----------在这里插入图片描述
3.封装排行榜面板类进行实时显示

using System.Collections;
using System.Collections.Generic;
using UnityEngine;//-------------------------------------
//—————————————————————————————————————
//___________脚本名:  排行榜面板
//___________功能:   掌控排行榜面板相关控件
//___________创建者: 秩沅_______________
//_____________________________________
//-------------------------------------public class RankPlane : BeginFather<RankPlane >
{public Button closeButton;//采用列表的方式进行排行数据的暂时存储private List<Label> RK_Name = new List<Label>();private List<Label> RK_Score = new List<Label>();private List<Label> RK_Time = new List<Label>();private void Start(){//通过API获取排行榜中的标签for (int i = 1; i <= 6; i++){        RK_Name.Add(this.transform.Find("RKName/player" + i ).GetComponent<Label>());RK_Score.Add(this.transform.Find("RKScore/Score" + i ).GetComponent<Label>());RK_Time.Add(this.transform.Find("RKTime/time" + i ).GetComponent<Label>());       } //为按钮中的事件添加方法closeButton .triggerEvent += ()=>{Hidden(); BeginPlane.SingleInstance.Show();};Hidden();    }public override void Show(){base.Show();ShowRankData();}public void ShowRankData()  //读盘排行榜数据并显示{GameData.DataContorl .SaveRankData("nibb", 100, 342);List<RankData> data = GameData.DataContorl.rankTopData;for (int i = 0; i < data.Count; i++){string showTime = "";int hour, min, second;print(data[i].name);RK_Name[i].ContorlContent.text = data[i].name;RK_Score[i].ContorlContent.text = data[i].score.ToString();RK_Time[i].ContorlContent.text = "";//时间格式转化hour = data[i].time / 3600;min = data[i].time / 60 % 60;second = data[i].time % 60;showTime = $"{hour}小时{min}分钟{second}秒";RK_Time[i].ContorlContent.text = showTime;}}
}

总UML图

在这里插入图片描述


在这里插入图片描述


🎶(E逻辑封装——音乐数据管理类


😶‍🌫️步骤:

  • 1.封装音乐数据管理类——单例
  • 2.在游戏数据管理类中,更新音乐数据更新方法

封装音乐数据类

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  更新音乐
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class MusicContol : MonoBehaviour
{static private MusicContol singleMusicContol;static public MusicContol SingleMusicContol => singleMusicContol;private  AudioSource beginAudio;private MusicData nowMusicData;void Awake(){singleMusicContol = this;//达到一运行游戏就有音乐的效果beginAudio = GetComponent<AudioSource>();      //从盘中读取nowMusicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData;beginAudio.enabled = nowMusicData.musicSwitch;beginAudio.volume = nowMusicData.musicRoll;}//----将其变成外界可调用的方法------ public void ChangeMusicSwitch(bool value) //改变音乐开关{beginAudio.enabled = value;}public void ChangeMusicRoll(float  value) //改变音乐大小{beginAudio.volume  = value;}public void ChangeSoundSwitch(bool value) //改变音效开关{}public void ChangeSoundRoll(float  value) //改变音效大小{}
}

游戏数据管理类,也需要更新——在方法中更新逻辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________脚本名:   游戏数据管理类   
//___________功能:    记录和更新游戏的数据并用PlayerFabs存储
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------public class GameData         
{static private GameData dataContorl = new GameData ();static public  GameData DataContorl => dataContorl ;public MusicData musicData ;public List<RankData> rankTopData;//固定承载前六名的数据信息private GameData(){//初始化读取音乐数据musicData = PlayerPrefsDataMgr.Instance.LoadData(typeof(MusicData), "Music") as MusicData ;//初始化读取排行榜数据rankTopData = PlayerPrefsDataMgr.Instance.LoadData(typeof(List<RankData>), "Rank") as List<RankData>;if ( !musicData.isFirst ) //如果是第一次进入游戏(表示注册表中第一次存该类型数据时){musicData.isFirst = true;musicData.musicSwitch = true;musicData.soundSwitch = true;musicData.musicRoll = 1f;musicData.soundRoll = 1f;PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");                }}       //【------------------------排行榜数据的更新封装----------------------------------】//在排行榜中添加数据public void SaveRankData(string name, int score, int time){rankTopData.Add(new RankData(name, score, time));Debug.Log(rankTopData);rankTopData.Sort((a, b) => { return a.score > b.score ? -1 : 1; }); //添加排序规则//但list大于6时for (int i = rankTopData.Count - 1 ; i > 5; i--){rankTopData.RemoveAt(i); //删除}PlayerPrefsDataMgr.Instance.SaveData(rankTopData, "Rank" );}//【------------------------音乐数据的更新(存盘)封装----------------------------------】//音乐开关数据的更新存储public void ChangeMusicS( bool value){musicData.musicSwitch = value;MusicContol.SingleMusicContol.ChangeMusicSwitch(value);  //实时改变音乐大小_下同PlayerPrefsDataMgr.Instance.SaveData(musicData,"Music"); //实时进行音乐数据存盘_下同}//音效开关数据的更新存储public void ChangeSoundS(bool value){musicData.soundSwitch  = value;MusicContol.SingleMusicContol.ChangeSoundSwitch(value);PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音乐滑条数据的更新存储public void ChangeMusicR(float value){musicData.musicRoll  = value;MusicContol.SingleMusicContol.ChangeMusicRoll(value);PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}//音效滑条数据的更新存储public void ChangeSoundR(float value){musicData.soundRoll  = value;MusicContol.SingleMusicContol.ChangeSoundRoll(value);PlayerPrefsDataMgr.Instance.SaveData(musicData, "Music");}}

过程中的错误——优化思维

在这里插入图片描述
进行优化__________==>

在这里插入图片描述

结论:


👌结论:

  • 1.进行模块化处理,数据管理就是数据管理,面板显示就是面板显示,各司其职,员工不得乱工作
  • 2.抽象行为,分配行为,你就是掌控者
  • 3.如果某个行为/操作,不仅限于一个对象,要将其封装成外界可以调用的API
    (例如修改主界面音频时,自己直接获取,却没想到将其封装成外界调用的方法)

相关文章


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

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

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

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

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

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

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

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



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

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

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

相关文章

每日一题——迷宫问题(I)

迷宫问题——I 题目链接 思路 创建二维数组&#xff0c;并实现输入 首先输入二维数组的行和列&#xff1a; int n, m; scanf("%d%d", &n, &m);然后动态开辟二维数组&#xff1a; 注&#xff1a;对动态开辟还不太了解的同学可以看看&#x1f449;C语言—…

CPU密集型和IO密集型任务的权衡:如何找到最佳平衡点

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、CPU密集型与IO密集型3.1、CPU密集型3.2、I/O密…

opencv-15 数字水印原理

最低有效位&#xff08;Least Significant Bit&#xff0c;LSB&#xff09;指的是一个二进制数中的第 0 位&#xff08;即最低位&#xff09;。 最低有效位信息隐藏指的是&#xff0c;将一个需要隐藏的二值图像信息嵌入载体图像的最低有效位&#xff0c;即将载体图像的最低有效…

再开源一款轻量内存池

前两天已开源线程池&#xff0c;开源一款轻量线程池项目&#xff0c;本节继续开源另一个孪生兄弟&#xff1a;内存池。 本节的线程池与内存池代码解析会在我的星球详细讲解。 内存池&#xff1a;https://github.com/Light-City/light-memory-pool 线程池&#xff1a;https://gi…

Python案例分析|使用Python图像处理库Pillow处理图像文件

本案例通过使用Python图像处理库Pillow&#xff0c;帮助大家进一步了解Python的基本概念&#xff1a;模块、对象、方法和函数的使用 使用Python语言解决实际问题时&#xff0c;往往需要使用由第三方开发的开源Python软件库。 本案例使用图像处理库Pillow中的模块、对象来处理…

ZooKeeper原理剖析

1.ZooKeeper简介 ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能&#xff1a; 帮助系统避免单点故障&#xff0c;建立可靠的应用程序。提供分布式协作服务和维护配置信息。 2.ZooKeeper结构 ZooKeeper集群中的节点分为三种角色&#xff1a;Le…

git如何撤销commit(未push)

文章目录 前言undo commitreset current branch to here Undo Commit&#xff0c;Revert Commit&#xff0c;Drop Commit的区别 是否删除对代码的修改是否删除Commit记录是否会新增Commit记录Undo Commit不会未Push会&#xff0c;已Push不会不会Revert Commit会不会会Drop Com…

vue 3.0 如何加载图片

.logo { background: url(~/assets/images/logo.svg) no-repeat center center/contain; width: 117px; height: 24px; margin: 0 20px; } <a class"logo" href"#"></a> 比较实用的书写方式

汽车销售数据可视化分析实战

1、任务 市场需求&#xff1a;各年度汽车总销量及环比&#xff0c;各车类、级别车辆销量及环比 消费能力/价位认知&#xff1a;车辆销售规模及环比、不同价位车销量及环比 企业/品牌竞争&#xff1a;各车系、厂商、品牌车销量及环比&#xff0c;市占率及变化趋势 热销车型&…

python多线程排查

问题 公司服务总是莫名其妙的cpu饱满排查了代码中的定时任务&#xff0c;排除之后仍经常出现类似问题。是时候debug了 排查过程 cpu劣化是一个过程&#xff0c;cpu持续增长到60%&#xff0c;然后突然服务雪崩不服务了。排查下来看sleep的物理线程和cpu增长的幅度一致 那么…

hadoop安全保护机制(kerberos + ldap)

信息安全理论&#xff1a; CIA模型&#xff1a;机密性、完整性和可用性 CIA模型能够帮助建议一些信息安全原则&#xff0c;但该模型并不是一个需要严格遵守的规则 hadoop平台可能设计多个CIA模型组件&#xff0c;也kennel一个也不涉及 机密性&#xff1a; 信息只应该被期望的…

探索AI图像安全,助力可信AI发展

探索AI图像安全&#xff0c;助力可信AI发展 0. 前言1. 人工智能发展与安全挑战1.1 人工智能及其发展1.2 人工智能安全挑战 2. WAIC 2023 多模态基础大模型的可信 AI2.1 WAIC 2023 专题论坛2.2 走进合合信息 3. AI 图像安全3.1 图像篡改检测3.2 生成式图像鉴别3.3 OCR 对抗攻击技…

Vis相关的期刊会议

中国计算机学会推荐国际学术会议和期刊目录 文档&#xff0c; 下载 link&#xff1a;CCF推荐国际学术刊物目录-中国计算机学会 一.可视化方向文章 1.IEEE VIS&#xff0c;是由 IEEE Visualization and Graphics Technical Committee(VGTC) 主办的数据可视化领域的顶级会议&a…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 17 日论文合集)

文章目录 一、检测相关(5篇)1.1 TALL: Thumbnail Layout for Deepfake Video Detection1.2 Cloud Detection in Multispectral Satellite Images Using Support Vector Machines With Quantum Kernels1.3 Multimodal Motion Conditioned Diffusion Model for Skeleton-based Vi…

【Linux】自动化构建工具-make/Makefile详解

前言 大家好吖&#xff0c;欢迎来到 YY 滴 Linux系列 &#xff0c;热烈欢迎&#xff01;本章主要内容面向接触过Linux的老铁&#xff0c;主要内容含 欢迎订阅 YY 滴Linux专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 订阅专栏阅读&#xff1a;YY的《…

深度学习——LSTM解决分类问题

RNN基本介绍 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如文本、语音、时间序列等具有时序关系的数据。 核心思想 RNN的关键思想是引入了循环结构&#xff0c;允许…

什么是剪贴板劫持-剪贴板劫持教程

目录 前言 什么是剪贴板劫持如何避免剪贴板劫持&#xff1f;如何执行剪贴板劫持&#xff1f; 总结 前言 我来写剪贴板劫持教程。 什么是剪贴板劫持 剪贴板劫持是一种危险的攻击技术&#xff0c;借助该攻击者可以控制受害者的剪贴板并将恶意代码粘贴到目标机器中&#xff0c;…

基于单片机的语音识别智能垃圾桶垃圾分类的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前信息和状态&#xff1b;通过语音识别模块对当前垃圾种类进行语音识别&#xff1b; 通过蜂鸣器进行声光报警提醒垃圾桶已满&#xff1b;采用舵机控制垃圾桶打开关闭&#xff1b;超声波检测当前垃圾桶满溢程度&#xff1…

认识spring项目的创建 和 从spring中进行Bean对象的存取

前言 本篇简单介绍如何创建spring项目&#xff0c;如何存储到spring容器中&#xff0c;如何从容器中获取Bean对象&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 创建spring项目2. 将Bean对象存…

RS485/RS232自由转ETHERNET/IP网关rs485和232接口一样吗

你是否曾经遇到过这样的问题&#xff1a;如何将ETHERNET/IP网络和RS485/RS232总线连接起来呢&#xff1f; 远创智控的YC-EIP-RS485/232通讯网关&#xff0c;自主研发的ETHERNET/IP从站功能&#xff0c;完美解决了这个难题。这款网关不仅可以将ETHERNET/IP网络和RS485/RS232总线…