UNITY3D 5V5网游开发案例教程

news2024/11/30 2:35:52

文章连载更新中,可以提前领取素材进行预习,自学
素材领取:私信发送 领取RPG网络开发教材

这里写目录标题

    • 游戏玩法
    • 这门课适合哪些人学习
    • 学完了能达到什么效果
    • 项目准备
    • 基础系统
    • 战斗系统
    • 同步设计精讲
    • 社交系统
    • 副本系统
    • 优化
    • 项目准备正文
    • 美术准备:
    • 模型数量对内存的要求
    • 数量和面数对帧数的影响
    • 优化方向
    • 技术准备
    • 基础系统
    • 背包->道具
    • 合成系统
    • 野外地图怪物生成,攻城怪物生成
    • 任务系统
    • 道具掉落,道具拾取
    • **防作弊设计**
    • 战斗系统

点击观看视频版专题

UnityRPG网游开发专题

游戏玩法

游戏目标:5个人联网游戏,保护水晶不被怪物摧毁。共有42波怪物。怪物强度随着波数加强
地图环境:周边有各种怪物,打倒之后都会随机掉落各种宝物,NPC和商店提供道具和装备支援

玩家之间需要把握好发育,防守,探索的时间和人员分配,良好的配合是致胜的关键

课程介绍

这门课适合哪些人学习

想向制作RPG类型游戏的个人或3-10以下的团队
课程是案例复盘讲解,用具体案例讲解整个游戏开发过程
涉及到项目管理,团队协同,编程技术栈等。

在时间安排上。占比最多的是程序设计和实现原理,开发思想。
为开发者指引方向,意识中形成开发版图。
为开发者指引方向,意识中形成开发版图。
为开发者指引方向,意识中形成开发版图。

具体细节和疑问也会开放专用的学习群补充。
没有展开的细节部分,大多都可以通过搜索引擎自行补充。

比如之前的《Unity开发战棋手游》专题
课程只提及了A星寻路的关键字,没有具体展开。
有开发者会疑惑?为什么不把A星的内容补充完整。
因为A星的原理,实现算法都可以在互联上查阅到很详细的文章,视频资料。

所以课程的学习方法是形成知识索引,需要用到时,再去展开细节深入学习。
这样的学习方法更能适应高速发展的游戏行业。

学完了能达到什么效果

课程内容包含了网游中80%常见功能
开发者对内容掌握90%以上
(独立开发者)在基础上打造属于个人的RPG游戏
(小团队)助力团队快速成型,把控项目开发进度。

掌握50%以上,公司初级开发岗(UI模块,基础功能),或者独立游戏开发都游刃有余。

比如:我们收到需求内容:制作背包,装备,合成系统,排行榜。需要多长时间完成?

把开发效率划分成4个阶段
开发效率对比:
没做过<有了解过<实现过类似案例<源码复用

效率差距原因:
没做过<有了解过 (功能设计时间)
有了解<实现过类似案例 (编码熟练度)
实现类似案例<复用源码(节省编码和代码测试时间,因为能够复用的代码一般都是验证测试过的)

课程包含了大量的常见功能设计,
这些案例的能够让开发快速积累经验
学完后开发效率能在2-4的阶段之间

课程目录

项目准备

策划准备,美术准备

基础系统

UI框架,NPC,道具,背包,商店,装备,任务系统
合成系统,角色选择,掉宝系统,
野外地图怪物生成,攻城怪物生成

战斗系统

基础属性,成长
客户端和服务器的技能设计
技能,动作,攻击配表设计
Buff,Debuff系统
怪物AI

同步设计精讲

位置同步,技能同步,特效同步,属性同步

社交系统

聊天,好友

副本系统

副本设计和实现

优化

AOI,美术相关的建议

正文

项目准备正文

视频讲解版
立项,策划准备,美术准备
U3D版本:unity2020.3.31f1c1
IDEA:visual studio 2019

策划准备:
编写策划文档,作用:便于项目管理。进度推动。多人协同开发。
要开发的游戏越大,要准备的文档越多。

文档是全部都写好了再做开发,还是边写策划边开发?

//假设项目组只有3个人,策划,美术,程序
在这里插入图片描述

可以看出项目越大,敏捷开发的效率就越高, 大多数项目都是使用具备快速迭代的敏捷开发思想

所以策划并不是一次性写好的,而是边写边提交给技术和美术。
有需要时还会口头交流作为补充。

这种项目推进方式不仅在游戏行业适用,在其他行业也有类似的思想,比如影视动漫。

踏出游戏开发的第一步:
以本案例举例:整理策划文档“保护水晶不被怪物摧毁。共有42波怪物。怪物强度随着波数跌增”
42个怪物,1个水晶
就需要准备的美术素材怪物和水晶的模型。
我们需要准备多少个模型?
假如42个怪物的样子都不一样,就需要42个模型。
假如怪物都一样,那只需要准备一个模型。

如果等到模型齐全了再施工,明显是不符合敏捷开发思想的。
从设计上我们坚持42个怪物。通过配表设置怪物外观。
美术前期只需提供一个模型即可,表的内容根据美术的产出速度调整即可。

在这里插入图片描述

在这里插入图片描述

有了怪物之后,自然而然的会关联其他需要的材料,比如数值,血量,攻击力->做怪物的数值表
做好了怪物之后
接着往下制作做英雄人物,也是需要模型,数值
这时候就可以照搬/复用之前的方案。
在做着英雄功能的时候,自然会关联到技能系统,装备道具,升级方案等等。

到了这里,我们就打开了局面,剩下的功能模块会跟着经验的积累,越做越清晰。
最后项目如同抽丝剥茧一样。
最后资料里面附带常见的策划表,可以作为参考模板,积累案例经验。

在这里插入图片描述

在这里插入图片描述

美术准备:

美术有什么要求?可以参照文档里的《美术资源规范》。
文档定制了场景,特效,UI,模型(贴图,面数)(适合拥有美术部门团队)
大团队和小团队的管理差异建议

美术准备规范可以划分两种,资源归类管理,资源质量管理

我们会从玩法设计,手机硬件要求,运行效果这三个维度讲清楚美术资源的参考标准
 
  
   
    
     
      
       
 在这里插入图片描述

哪些手机能够玩到我们的游戏?硬件要求

模型数量对内存的要求

32种模型同时存在场景中。
32模型一样的怪,和32个怪模型各不相同的怪,内存占用是有大约内存占用是32倍。(模型越多对内存要求也就越高)
至少需要1.5G以上的运行内存(2016后的机子可以运行)
以下是一个模型的数据
在这里插入图片描述

数量和面数对帧数的影响

在这里插入图片描述

在这里插入图片描述
高端机60-57帧:
在这里插入图片描述

在这里插入图片描述!!
中端机60-55:
在这里插入图片描述

在这里插入图片描述

低端机:10fps
在这里插入图片描述

优化方向

怪物数量60->49帧
在这里插入图片描述
10个55帧
在这里插入图片描述
加载地形->28帧
在这里插入图片描述
地形优化->44帧
在这里插入图片描述
地形优化前的面数
在这里插入图片描述
优化后的面数
在这里插入图片描述
在这里插入图片描述
优化后2w3->4k8
在这里插入图片描述

建议:
到了这里对游戏性能,模型规范,设计玩法,目标用户,优化代价有了一定的!了解。

面向中,高端机型的机型>50帧(无需优化)
面向低端机型的机型<30帧(酌情考虑)
市场常见做法:
1:放弃硬件不达标的用户(不让玩)
2:提示用户得不到预期的体验(可以玩,但体验质量无法保证)
3:分批次扩大用户目标,第一个版本的用户目标(中,高)面向低端机型用户的优化放在以后版本,逐步扩大覆盖群体

在这里插入图片描述

到这里们就讲清楚了玩法设计,性能表现和模型参数的关系。

接下来讲资源归类管理。
模型,特效,装备道具图片
模型管理
在这里插入图片描述

读取策划表,为模型资源分配资源标签,用于程序读取
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

特效命名规则:
在这里插入图片描述在这里插入图片描述

道具图片:出图尺寸-资源名规则->策划表的道具id=图片名
图片大小(512x512,如果超过了内存瓶颈(6g运存下降至4g),可以使用UNITY3D引擎压缩图片大小降低内存占用率)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过上面的配置表,我们就制定好了怪物的属性,掉落信息等。

文章出现的代码图片,右下角有UNITYLOG的为客户端代码,否则是服务端代码
加载怪物属性
在这里插入图片描述

对于没有美术部门的团队,更多的是从unity资源商店获取素材资源,根据项目要求选择适合的资源。
比如:手游项目建议选择为手机平台制作的资源。
在这里插入图片描述
在这里插入图片描述
对小团队的建议
资源归类规范建议。
由于资源的制作者不同,所以资源的规范和目录结构也不尽相同。
如果非要按照制定的规范去管理资源,是需要花费大量时间整理资源的。(生般硬套)
建议能够整理的尽量整理。

案例的方案是:捉大放小。
我们的案例会把所有的模型素材都整理到模型目录下,但是具体材质,图片的命名不作处理。

技术准备

具备UNITY基础,C#编程基础,多人开发管理工具的使用(SVN,Git)
客户端的理解=>框架设计,资源热更和管理,场景管理,UI管理(可回顾战棋专题)
服务端的理解=>框架设计,网络消息收发,网络协议设计,生成。(专题讲解链接)
最起码要能编写聊天室功能
在这里插入图片描述
也可以先跟着视频先跑一遍,学习课程的设计思想,回头再查漏补缺
比如资源热更管理,课程花了1个多小时讲了从热更的诞生到实现,
但在使用层面只有2步:资源打标签,调用资源加载的API
所以要根据自身需求灵活分配学习时间
建议:
1:想快速做出一款独立游戏,只需要知道怎么用(套方案)。
2:在职U3D开发,一直都是做基础模块,UI模块,想要在技术上查漏补缺,
则可以展开细节系统的学习。

基础系统

角色选择,NPC,道具,背包,商店,装备,UI框架,合成系统
任务系统,
野外地图怪物生成,攻城怪物生成
道具掉落,道具拾取

创建角色->加载场景->找到商店NPC->购买装备->打开背包->穿戴装备。
(登录->大厅->创建房间 查看以往专题)->角色选择->加载场景,NPC,道具,背包,商店,装备,UI框架

c=客户端
s=服务器
创建角色逻辑(c显示可选择的人物->c选择人物->s广播->c锁定选择->s广播-> s判断选人结束->s广播开始游戏->c加载地图场景)

1:读策划表,显示可选英雄图标(根据英雄ID加载图片资源)
在这里插入图片描述

通过xls2Json生成数据和模型便于程序读取
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过AB工具给资源打了标签才能加载资源在这里插入图片描述
2:玩家点击英雄图标->定制协议->发送选角消息在这里插入图片描述
在这里插入图片描述

服务器处理过程->存储玩家的选择数据,广播消息,所有客户端更新选角UI

在这里插入图片描述
为什么服务器要存储玩家的选定信息?玩家断线重连需要同步选定结果
在这里插入图片描述

客户端收到选角消息
在这里插入图片描述
当所有人都选择好角色后,服务器初始化数据,通知客户端
在这里插入图片描述
客户端收到开始游戏消息->显示加载UI并加载场景
在这里插入图片描述
在这里插入图片描述

同样的场景资源也打了资源标签
在这里插入图片描述
(资源管理)创建角色->加载场景->找到商店NPC->购买装备->打开背包->穿戴装备。

点击商店NPC,显示商店UI->选择购买装备->打开背包->穿戴装备->创建角色.
NPC功能->NPC怎么加载显示?怎么交互?->交互的内容是什么?
商店NPC->点击屏幕交互->打开商店UI
模板方法:XXNPC->点击屏幕交互->点击后打开XX功能…

客户端NPC怎么加载显示?根据地图的NPC配表,加载模型

在这里插入图片描述
在这里插入图片描述
点击交互
在这里插入图片描述
点击NPC后的处理逻辑,打开商店
在这里插入图片描述

商店功能和UI框架
加载商店UI。
在这里插入图片描述

商店UI展示逻辑
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击购买按钮,发送消息给服务器
在这里插入图片描述
服务器处理过程->处理玩家金钱是否足够,背包是否已满,如果条件满足则把道具放到玩家背包里。
在这里插入图片描述
从商店购买道具之后,在背包中查看已有道具。

UI框架,控件初始化(Start),关闭(Close),差异化是控件的显示规则,按钮点击业务处理
比如商店显示道具的购买按钮,而背包不显示。
商店图片点击时,可以发送购买请求。
背包图片点击时,可以发送丢弃请求
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
每个功能都有各自的预制体和脚本
每有一个新的功能增加时,就添加一个预制和脚本,便于拓展
在这里插入图片描述

每个UI负责自己的显示内容,在此基础上可以拓展出N个面板,比如HelloWorldPanel

c点击购买->s判断金币数量,物品添加到玩家背包,返回购买结果->

背包->道具

在这里插入图片描述

C打开背包->根据配表ID,显示背包道具
购买的道具数据存放到角色的背包服务器的数据里
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

服务器收到请求
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
道具包含很多信息,信息传输的数据包的大小越小越好
考虑(并发,宽带流量,数据包反序列化消耗等)。
服务器只传物品ID,是为了减少通信数据包的大小
客户端可以对照物品表ID自取所需数据。
也因为如此,很多数功能都有ID索引取对应信息的设计

客户端拿到数据刷新UI组件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击显示道具详细信息
在这里插入图片描述

点击显示道具按钮属性
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
道具数据变更->更新背包数据
在这里插入图片描述

客户端
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

道具逻辑
在这里插入图片描述
背包-道具完。

C点击穿戴->S计算穿戴装备属性->S通知属性,装备栏发生了变更->C根据数据刷新UI

商店->交互设计->道具数据设计

道具设计配表->穿戴装备

到这里讲解了基础功能的开发流程的核心,只要掌握了这些思想,很多功能都可以无限复用这套思想去迭代更多的功能。
合成系统,掉宝系统(快速带一带,给开发者积累案例经验)

合成系统

讲解配表,思想,客户端只需要发送合成ID,合成材料读表

野外地图怪物生成,攻城怪物生成

读表配属性,生成规则代码片段

任务系统

递交材料任务,击杀怪物任务,2种

道具掉落,道具拾取

xxxxxxxxxxx

防作弊设计

道具数据由服务器持有,防止用户作弊修改道具数量->数据安全的角度

为什么有些网游会存在外挂呢?
比如《冒险岛》(Maplestory)的全屏攻击,全屏捡取物品,锁血等。
steam上的PC的《绝地求生》,早期有道具透视外挂。
绝地求生
游戏的本身设计是场景里有各种补给道具,在设计上需要玩家地图探索获取。
后来出了作弊工具,玩家可以通过作弊手段查看游戏里每个道具的位置。
显然用了作弊工具的能更快获取更强大的道具,破坏了游戏平衡。

主要因为道具的数据和分布数据由客户端持有和计算,服务器不参与校验。
如何要防止这种作弊手段,就需要把道具的拾取逻辑由交给服务器计算,并且根据玩家的位置通知区域的道具信息。

那为什么会出现这样的设计呢?
开发时间因素:服务器校验数据需要更多的时间设计和编码。
改成防作弊的方案,则需要根据玩家的位置,告知道具信息。
玩家数量太多,则需要做优化处理(AOI)。

对比下来:数据安全的代价,花费更多开发时间,加大了服务器计算压力。加大了运营成本。
当时这款游戏玩法比较创新,制作组更在意玩法是否得到青睐。
制作组结合自身环境,选择了对于他们来说最优解的方案

在这里插入图片描述

《冒险岛》(Maplestory)的全屏打怪,捡物,主要是优先考虑承载人数,所以把大量的计算交给客户端
由客户端负责对消息传输和内存进的加密。即便用了很多加密手段,但始终很难杜绝外挂的出现。

但是即便如此:至今这两款游戏都还在运营。
数据安全要根据游戏的内容和开发时间去做考虑。
比如玩家的金币,钻石,需要付费获得的数值就一定要放在服务器。
其他的数值则需要结合实际情况去考虑。

战斗系统

基础属性,成长
人物属性配表
客户端和服务器的技能设计
技能,动作,攻击配表设计
Buff,Debuff系统
怪物AI
讲解行为树,各种怪物的AI差异

讲解:。。。。。。。。。。。。。。

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

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

相关文章

服务(第二十三篇)mysql-mha

1、什么是 MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

UnityWebSocket | 双端通信支持Text/Binary

跳转官方仓库地址 有多个项目使用该库&#xff0c;平台有PC、WebGL。 一、说明 1&#xff09;原理 WebSocket是H5提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。数据通常在两个站&#xff08;点对点&#xff09;之间进行传输&#xff0c;按照…

动态规划:01背包理论基础 二维dp

1.确定dp数组以及下标的含义 对于背包问题&#xff0c;有一种写法&#xff0c; 是使用二维数组&#xff0c;即dp[i][j] 表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。[0-i]物品任取放到容量为j的背包中得到的最大价值为dp[i…

想要上手playwright?看这篇文章就够了!(文章有点长,建议收藏)

本文系统地介绍了playwright的基础概念&#xff0c;架构&#xff0c;安装过程&#xff0c;编码demo&#xff08;python实例&#xff09;&#xff0c;常用API&#xff0c;录制脚本的方法以及playwright在无头模式的应用和其与selenium的对比。相信大家认真阅读本文后一定会对pla…

2023年5月广州/西安/成都/深圳产品经理认证NPDP报名

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

【数据结构】从头到尾全解析双向链表

在之前我们已经讲过< 单链表 >了,单链表查找上一个结点的时间复杂度为O&#xff08;n&#xff09;&#xff0c;尾插时也要遍历一次链表也是O&#xff08;n&#xff09;&#xff0c;因为我们每次都要从头开始遍历找,为了克服这单向性的缺点&#xff0c;我们就有了双向链表…

软件测试专业应届生应如何提高职场竞争力

一&#xff1a;巩固专业知识 背景&#xff1a;笔者已经做了几年的打工人&#xff0c;以个人经验给软件测试专业应届生一些建议。 推荐需要掌握的知识&#xff1a; 1、软件测试基础知识&#xff08;软件生命周期每个阶段工作需了解&#xff09; 2、熟悉SQL/MySQL/Oracle数据库&…

D8加密狗使用教程

D8 加密锁 1.VsCode 安装中文扩展包(1) 打开 VsCode&#xff0c;点击左侧扩展.(2) 输入Chinese&#xff0c;会自动搜索&#xff0c;点击第一个中文简体扩展&#xff0c;点击安装(3) 重启VsCode 2. D8调试服务程序 - 只运行3. 自动安装 yttool&#xff08;1&#xff09;VsCode 打…

杭钢集团:以用友iuap为数智底座的数智化转型之路

近日&#xff0c;一年一度的用友BIP技术大会圆满召开。来自行业领先企业的CIO/CDO、生态伙伴、开发者、分析师、媒体等共聚北京用友产业园&#xff0c;了解最新技术发展趋势、探讨行业热点话题。会上&#xff0c;杭钢集团总经理助理施永益分享了杭钢集团基于用友BIP-iuap平台推…

three.js学习 11 - threejs常用几何体,与几何体材质如何自定义

1.缓冲几何体&#xff08;立方体&#xff09; 官网API地址&#xff1a;https://www.three3d.cn/docs/index.html?qgeometry#api/zh/geometries/BoxGeometry 2.圆缓冲几何体 官网地址&#xff1a;https://www.three3d.cn/docs/index.html?qgeometry#api/zh/geometries/Cir…

ppt怎么压缩文件大小?试试这几种方法

ppt怎么压缩文件大小&#xff1f; PPT&#xff0c;也就是Microsoft PowerPoint演示文稿&#xff0c;是一种用于创建和展示演示文稿的软件工具。PPT的作用非常广泛。它可以用于各种场景中&#xff0c;以呈现信息、表达观点和传递思想。PPT可以将文字、图片、图表、动画等多种媒体…

程序员之间拉开差距最大的因素

本文为小红花技术领袖俱乐部创始人赖勇浩为《编程卓越之道》&#xff08;卷1&#xff09;所作序言。 拿到新一版《编程卓越之道》的第一卷《深入理解计算机》的稿子&#xff0c;心里非常感慨&#xff1a;上次读这本书&#xff0c;已经是16年前&#xff0c;还留下了幼稚的读后感…

1072. 按列翻转得到最大值等行数(leetcode,哈希)-------------------c++实现

1072. 按列翻转得到最大值等行数&#xff08;leetcode,哈希&#xff09;-------------------c实现 题目表述 给定 m x n 矩阵 matrix 。 你可以从中选出任意数量的列并翻转其上的 每个 单元格。&#xff08;即翻转后&#xff0c;单元格的值从 0 变成 1&#xff0c;或者从 1 …

排序算法之基数排序

一、基数排序&#xff08;RadixSort&#xff09; 基数排序&#xff08;Radix sort&#xff09;是一种非比较型整数排序算法。 1. 基本思想 原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。基数排序的方式可以采用LSD&#xff08;Least significant…

超详细:阿里云服务器安装宝塔面板教程(需要开端口)

使用阿里云服务器安装宝塔面板教程&#xff0c;阿里云服务器网以CentOS操作系统为例&#xff0c;安装宝塔Linux面板&#xff0c;先远程连接到云服务器&#xff0c;然后执行宝塔面板安装命令&#xff0c;系统会自动安装宝塔面板&#xff0c;安装完成后会返回面板地址、账号和密码…

理论力学专题----拉普拉斯一龙格一楞次矢量

质量 m平方反比的有心力场 对应势能 V-k/r牛顿定律&#xff1a;\dot{\vec{p}}-k\frac{\vec{r}}{r^3} 空间旋转对称群 略 下学期学完了补上 LRL矢量 LRL矢量\vec{A}: define: \vec{A} \eqv \vec{p} \times \vec{L} - mk\frac{\vec{r}}{r} LRL守恒 \frac{d}{dt}(\vec{p} \…

图神经网络:(节点分类)在Cora数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 代码实操1&#xff1a;GCN的复杂实现代码实操2&#xff1a;GCN的简单实现…

从零开始Vue3+Element Plus的后台管理系统(二)——Layout页面布局的实现

项目搭建好之后&#xff0c;开始写基本的布局。后台管理系统的布局3大元素&#xff1a;头部、侧栏、主要内容&#xff0c;各种布局结构相差不大&#xff0c;我选择了下图所示的布局&#xff0c;其中头部、侧栏、页签在页面中是固定的&#xff0c;只有主要内容容器会跟随页面滚动…

如何从计算机或 SD 卡中恢复已删除的音乐文件?

与我们中的许多人一样&#xff0c;您可能已经从喜爱的专辑中下载并保存了多个音乐文件以供离线收听&#xff0c;但如果您不小心或意外删除了这些音乐文件怎么办&#xff1f;不用担心&#xff0c;我们在这里列出了几种从计算机或 SD 卡中恢复已删除或丢失的音乐文件的方法。 您…

001+limou+Git的安装与入门

0.前言 您好&#xff0c;这里是limou3434的一篇个人博文&#xff0c;感兴趣的话您也可以看看我的其他文章。本系列主要深入讲解有关Git的基础知识和基础使用&#xff0c;在文章中会结合部分Git网站上推荐的电子书《Pro Git》来对Git进行解读&#xff0c;意在补充书中对您“不友…