当前位置:   article > 正文

如何优雅地备份Unity工程_unity 备份

unity 备份

前言

不开玩笑的说,我在Reddit上看到过一个帖子,楼主问大家备份Unity工程的频率。

2cad664e250041febf7a676630104293.jpg  

我猜你看到这就已经开始笑了,别笑,当年你我都是这么过来的。我不以偏概全哈,我只说我的情况,当年我也是玩游戏玩的沉迷,老爸学的数据库,他治疗游戏沉迷的方法就是引导我去分析游戏的原理。我也就这么入坑了。

初中时候做unity的时候,那时候还没接触到版本控制这个事,那时候家里限制我每周末能碰电脑,所以只能周六日写点,周日晚上备份。那时候还真的是右键工程目录,WinRAR分卷压缩,传到百度网盘。

(一说做unity都做了十年,还好实习还和unity相关,也算满足自己的一个小心愿)

好了,言归正传。

文件夹结构

无论你是用版本控制还是像小时候意气风发的我用WinRAR压缩备份,你都避不开选择性忽略文件夹。因为,如果你完整备份,最后的结果就是压缩文件离奇的大,这肯定是能做优化的。

虽说现在硬盘白菜价,但不能这么造。

我们先看一下文件夹结构,以我在Github上托管的UniGPT项目为例:

  1. Mode LastWriteTime Length Name
  2. ---- ------------- ------ ----
  3. d----- 2023/10/1 18:08 .vscode
  4. d----- 2023/10/1 18:08 Assets
  5. d----- 2023/10/1 18:08 Build
  6. d----- 2023/10/1 18:11 Library
  7. d----- 2023/10/1 18:11 Logs
  8. d----- 2023/10/1 18:11 obj
  9. d----- 2023/10/1 18:11 Packages
  10. d----- 2023/10/1 18:11 ProjectSettings
  11. d----- 2023/10/1 18:11 Temp
  12. d----- 2023/10/1 18:11 UserSettings
  13. -a---- 2023/8/18 18:04 118 .gitattributes
  14. -a---- 2023/8/11 11:00 1371 .gitignore
  15. -a---- 2023/7/23 2:33 99 .vsconfig
  16. -a---- 2023/7/20 19:12 69883 Assembly-CSharp-Editor-firstpass.csproj
  17. -a---- 2023/7/20 19:32 76292 Assembly-CSharp-firstpass.csproj
  18. -a---- 2023/9/18 23:46 70892 Assembly-CSharp.csproj
  19. -a---- 2023/9/8 13:58 61465 Assembly-CSharp.Player.csproj
  20. -a---- 2023/10/2 0:02 0 dir.txt
  21. -a---- 2023/7/20 19:32 70883 EasySave3.csproj
  22. -a---- 2023/9/11 16:44 58000 IngameDebugConsole.Editor.csproj
  23. -a---- 2023/9/11 16:44 56675 IngameDebugConsole.Runtime.csproj
  24. -a---- 2023/9/8 13:53 51086 IngameDebugConsole.Runtime.Player.csproj
  25. -a---- 2023/9/11 16:44 57174 kcp2k.csproj
  26. -a---- 2023/9/8 13:53 51592 kcp2k.Player.csproj
  27. -a---- 2023/8/30 20:42 58701 LeTai.TranslucentImage.csproj
  28. -a---- 2023/8/30 20:42 57143 LeTai.TranslucentImage.Demo.csproj
  29. -a---- 2023/8/30 20:42 52486 LeTai.TranslucentImage.Demo.Player.csproj
  30. -a---- 2023/8/30 20:42 58453 LeTai.TranslucentImage.Editor.csproj
  31. -a---- 2023/8/30 20:42 54030 LeTai.TranslucentImage.Player.csproj
  32. -a---- 2023/8/30 20:42 56765 LeTai.TranslucentImage.UniversalRP.csproj
  33. -a---- 2023/8/30 20:42 57955 LeTai.TranslucentImage.UniversalRP.Editor.csproj
  34. -a---- 2023/8/30 20:42 52108 LeTai.TranslucentImage.UniversalRP.Player.csproj
  35. -a---- 2023/7/2 23:24 1523 LICENSE
  36. -a---- 2023/9/11 16:44 55416 Mirror.Authenticators.csproj
  37. -a---- 2023/9/8 13:53 49856 Mirror.Authenticators.Player.csproj
  38. -a---- 2023/9/11 16:44 57764 Mirror.CompilerSymbols.csproj
  39. -a---- 2023/9/11 16:44 58494 Mirror.Components.csproj
  40. -a---- 2023/9/8 13:53 52899 Mirror.Components.Player.csproj
  41. -a---- 2023/9/11 16:44 63345 Mirror.csproj
  42. -a---- 2023/9/11 16:44 59453 Mirror.Editor.csproj
  43. -a---- 2023/9/11 16:44 62697 Mirror.Examples.csproj
  44. -a---- 2023/9/8 13:53 57060 Mirror.Examples.Player.csproj
  45. -a---- 2023/9/8 13:53 57463 Mirror.Player.csproj
  46. -a---- 2023/9/11 16:44 56183 Mirror.Transports.csproj
  47. -a---- 2023/9/8 13:53 50661 Mirror.Transports.Player.csproj
  48. -a---- 2023/9/11 16:44 57772 NativeGallery.Editor.csproj
  49. -a---- 2023/9/11 16:44 55606 NativeGallery.Runtime.csproj
  50. -a---- 2023/9/8 13:53 50028 NativeGallery.Runtime.Player.csproj
  51. -a---- 2023/9/11 16:44 57764 NativeShare.Editor.csproj
  52. -a---- 2023/9/11 16:44 55403 NativeShare.Runtime.csproj
  53. -a---- 2023/9/8 13:53 49827 NativeShare.Runtime.Player.csproj
  54. -a---- 2023/8/24 12:47 373 README.md
  55. -a---- 2023/9/11 16:44 56038 SFB.csproj
  56. -a---- 2023/9/8 13:53 50620 SFB.Player.csproj
  57. -a---- 2023/9/11 16:44 57538 SimpleWebTransport.csproj
  58. -a---- 2023/9/8 13:53 51941 SimpleWebTransport.Player.csproj
  59. -a---- 2023/9/11 16:44 56430 Telepathy.csproj
  60. -a---- 2023/9/8 13:53 50843 Telepathy.Player.csproj
  61. -a---- 2023/9/11 16:44 58657 UniGPT.csproj
  62. -a---- 2023/9/11 16:44 59755 UniGPT.Editor.csproj
  63. -a---- 2023/9/8 13:53 52720 UniGPT.Player.csproj
  64. -a---- 2023/9/16 23:11 6691 UniGPT.sln
  65. -a---- 2023/9/11 16:44 56564 Unity.Mirror.CodeGen.csproj

Assets文件夹是资产文件夹,模型、脚本都在里面。

Build文件夹是打包存放的文件夹,比如Android的APK,Windows的EXE等。(这个看个人习惯,毕竟打包路径是可以自定义的,一般规范是Build),可以从备份中忽略。

Library文件夹,这非常的重点,这个文件夹是存放本机一些缓存的地方,比如你的Package缓存、场景缓存什么的。你说你备份要它何用?这玩意一个机器一个样,换到别的机器,这Library文件夹里有相当一部分要重新import。哪怕就是本机用,不涉及到协作,脚本啥的搞砸了,直接把Assets文件夹里的对应内容替换不香吗?所以请从备份中忽略,我保证,你这原本备份的大小至少减了一半。

Logs文件夹就不用说了,存放日志的地方,忽略掉。

obj是调试文件夹,也忽略。

Packages就是存放工程用到的Package的列表(指Unity Package Manager)。

ProjectSettings就不用说了,工程配置文件。

Temp,顾名思义,直接忽略。

UserSettings,一般都是编辑器布局那些玩意,这个你随意。

其他留着就可以啦。

版本控制

我估计看到这的朋友一定是受够了上文中的笨拙备份方式,毕竟每次备份就相当于全量备份。

既然想避免全量备份,肯定少不了版本控制系统

目前有两大版本控制系统,Git和SVN。

SVN是传统的CVS,也是很多前辈入坑版本控制的首选(也是美术人员的首选),毕竟你只要操心两件事,checkout和commit就完了。目前最好用的客户端是小乌龟TortoiseSVN。它嵌入到你的Windows资源管理器,高度契合用户的Windows使用习惯。但是缺点也很明显,笨拙。

一个是第一次checkout时间会很漫长(包括第一次传工程,毕竟它不压缩),另一个是切分支麻烦。

什么时候你会用到分支?比如你要开发一个新功能,一般一个新功能就是一个分支,主分支是目前的稳定版本(或者你理解成大版本、小版本的关系)。SVN说白了就是开一个分支相当于完整地checkout一个工程副本出来,可想而知。

那么有没有软件改善呢?有,那就是Git。

Git这个东西从Linux过来的,发明人我想大家都知道是谁,那个暴躁老哥Linus。Git这个名字如果你看过百科的话,它的寓意是愚蠢的人。这也和它的分布式理念有关,Linus认为所有人不可能按照规则走,所以一定要自己有个人的版本,这样避免一个人搞砸连累其他人。(这也说明SVN是中心式)

Git的传输也是压缩过的,所以很快,而且不太占地方。

Git另一大特点就是指针,你工程里的每个文件以及改动都有指针对应,所以切分支这个事对于Git来说就是把指针改一下的事情,所以非常快。

当然缺点就在于上手比较难,我实习第一天就干出来了force push(切分支pull的时候出冲突了,然而不知道怎么解决冲突),把其他人的改动都干没了。其次就是它的习惯和Linux密不可分,如果你不熟悉Linux,那么上手也有点困难,毕竟它涉及到SSH这个东西,包括搭建起来一个服务器也是。(如果你用Github、Gitee托管,那当我没说,我也推荐新手先用这些公共的源代码托管平台入门,但日后还得学自己怎么搭建。

但目前主流都是git,所以建议是早日投入git怀抱,其实也不难,只要你能想明白树和树干的关系就好了。然后就是耐心点,多沟通,解决冲突。

git的客户端就很多了,GitExtension、Fork、SourceTree等等,找一个你看着顺眼的即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/141701?site
推荐阅读
相关标签
  

闽ICP备14008679号