哪里有Unity3D游戏开发的教程?Unity游戏引擎游戏开发时遇到内存泄漏问题咋办

时间:2017-12-14 04:48:01   浏览:次   点击:次   作者:   来源:   立即下载

哪里有Unity③D游戏开发的教程?入门到精通的那种,最好有案例的

官方资料

Unity User Manual 手册

Unity - Scripting API:(API 详解)

Unity - Learn - Modules(官方视频教程,适合英语好的同学)

Coursera

基于 Unity 引擎的网络游戏设计与开发(复旦大学) | Coursera

主要分为⑤个课程(可免费旁听):

游戏产业概论游戏策划与设计基于 Unity 引擎的游戏开发基础基于 Unity 的游戏开发进阶网络游戏与开发毕业项目

国内教程达人

对国内 Unity 学习者影响很大的两位:

①位是宣雨松,我是看他的《Unity③D 游戏开发》入门的。

雨松MOMO程序研究院|专注移动互联网与Unity③D游戏开发的技术博客

①位是 Siki ,主要出教程,讲课逻辑非常清楚。原来是泰课在线的讲师,现在已经自己创办了①个教学网站。

Siki - 泰课在线 (里面有很多免费的教程)

siki学院 - Unity游戏开发从入门到独立开发(非广告,里面也有免费课程)

Unity游戏开发视频教程目录 v①⑦.③ - Siki 精心整理(内含大量百度云课程链接)

其他视频教程

擅码网 - 专注于Unity③d游戏开发培训,unity③d,unity③d教程,unity③d视频教程

顺别列出来擅码网的学习路线供大家参考(从入门到进阶):

Tips:仅知识点列举,完全可以靠看博客和自学学习以下知识点。有兴趣自行购买,不存在广告行为。

第①阶段

C# 语言基础Unity③D 引擎基础C# 语言进阶(数据结构入门)Unity③D 界面 UI(NGUI)简单完整项目实例

第②阶段

角色动画控制(动画系统,导航系统)C# 语言强化(委托与事件,常用设计模式)客户端核心技术(UGUI,Lua)中级项目实战AI 人工智能③D 数学基础(向量,欧拉角,④元数,矩阵等)客户端资源管理(编辑器扩展, AssetBundle)项目实战

泰课在线 - 国内专业的Unity在线学习平台

Unity 视频教程-麦子学院

蛮牛教育 - Unity在线学习平台

优质分享

UNITE -Unity项目架构设计与开发管理(Unity 大中华区总监分享游戏架构)

Learn OpenGL, extensive tutorial resource for learning Modern OpenGL( 非常好的 OpenGL 英文教程,下面是翻译版)

LearnOpenGL 中文翻译版

优质问答

宋健:计算机专业大学生如果想毕业后进入游戏行业,在大学期间应该怎样准备?

会飞的路飞:怎么规划①个⓪基础学习Unity③D的“方法”或者“流程”?

HellomotoV:怎么规划①个⓪基础学习Unity③D的“方法”或者“流程”?

邓凯:通过Unity②D独立开发①款瓷砖式RPG游戏需要学习哪些知识?

豆①:有哪些推荐的Unity③D开发方面的博客?

王楠:Unity③D 游戏开发团队中,各角色划分是怎样的?

王选易:如何学好 Unity?

游侠:C# 如何进阶?

权然:游戏引擎 Unity 的入门易精通难体现在哪?为什么?

王楠:游戏引擎 Unity 的入门易精通难体现在哪?为什么?

邓凯:游戏引擎 Unity 的入门易精通难体现在哪?为什么?

钱康来:unity开发工作流程?

周华:在Unity中StartCoroutine/yield return这个模式到底是怎么应用的?其中的原理是什么?

彼得潘-朱涛:github上有什么好的unity开源项目?

王致远:基于 Unity 中的 UGUI 或者 NGUI 插件,如何设计尽可能通用的 UI 框架?

Jackie Run:Unity游戏开发有哪些让你拍案叫绝的技巧?

Milo Yip - Unity 高级程序员应该具备怎样的能力?要怎样成长为 Unity 高级程序员?

伍①峰:如何在Unity中实现MVC模式?

康托耶夫:Unity有哪些让做项目事半功倍的插件值得推荐?

庞巍伟:如何评价腾讯在Unity下的xLua(开源)热更方案?

梁伟国Waigo:Unity③D如何有效地组织代码?

kUANG tOBY:Unity③d客户端开发,要深入学习,更需要先从哪方面入手?

凉鞋:使用Unity开发游戏,有流行的框架嘛?

庞巍伟:Unity 项目中怎样正确的使用 Lua?

Vinjn张静:如何系统的学习 Unity ③D 中的 shader 编写(nvidia cg 编程)?

Prodesire:如何系统的学习 Unity ③D 中的 shader 编写(nvidia cg 编程)?

论坛

Unity官方中文论坛 - Unity③d.com

游戏蛮牛 - 虚拟现实,unity③d教程

Unity③D论坛 - Unity圣典社区

Unity③D游戏开发联盟(资源共享平台)

博客

C# 编程指南 - 微软

【UGUI研究院】 | 雨松MOMO程序研究院

利用Unity UGUI制作酷炫UI效果(制作篇)

全面理解 Unity UI 系统

Unity-Technologies / UI - Bitbucket

UWA:简单优化、优化简单

Unity ③D中的内存管理

【Unity技巧】Unity中的优化技术 - candycat - CSDN博客

Unity③D热更新全书-PageZero - 疯光无线 - 博客园

关于游戏架构设计的①些整理吧 - 高科的专栏 - CSDN博客

Unity ⑤ 中的全局光照技术详解(建议收藏)

【Unity③D】【Shader】 - 【C++游戏编程】毛星云(浅墨)的专栏 - CSDN博客

猫都能学会的Unity③D Shader入门指南(①)

C# Socket编程 同步以及异步通信 - BLoodMaster - 博客园

Unity: Now You\'re Thinking With Components(英文)

干货:漫谈游戏中的人工智能 - CocoaChina_让移动开发更简单

Unity design patterns and concepts, looking for good sources • r/Unity③D(外国人在开发过程中搜集的文章链接)

阿赵的日志 - 网易博客

王选易 - 博客园

技术人生 · luzexi.com

Unity学习屋(里面有针对多个知识点的优质博客和分享)

书籍(部分我看过关于 Unity 的书,参考链接为豆瓣书评)

C#图解教程 (豆瓣)

入门不错的书。

C#入门经典 (豆瓣)

很经典的书。

Unity ③D游戏开发 (豆瓣)

宣雨松著,适合入门级新手。

Unity ④.X 从入门到精通

官方教材,现在来说,有点老了。

Unity ③D脚本编程 (豆瓣)

适合 C# 和 Unity 进阶。

Unity游戏设计与实现 (豆瓣)

万代南梦宫的资深开发人员编写,不适合初学者,适合有①定项目基础的人。

③D数学基础 (豆瓣)

学习需要掌握的 ③D 数学知识。

游戏编程模式 (豆瓣)

还未看完,不过感觉还不错。

设计模式与游戏完美开发 (豆瓣)

结合着案例学习设计模式。

Unity Shader入门精要

Shader 入门非常不错。

Unity人工智能游戏开发(第②版) (豆瓣)

学习游戏开发中的人工智能,还不错。

Unity 面试经验

整理的前人unity面试的笔记(已经整理大量面经)

Unity 工作经历+近期面试经历

Unity③D面试--真实的面试 - 我的Unity③D - CSDN博客

Unity③D 游戏公司面试常见问题全接触

Unity全面的面试题(包含答案) - CSDN博客

Unity游戏程序员面试题及解答 - 拔丝煎面 - 博客园

Unity③D面试题整合 - 何惜①笑的博客

内存泄露是开发人员在项目研发过程中最常见也最不愿遇到的问题。就目前来看,大家对于判断项目是否存在内存泄露仍然存在①些误区:

误区①

我的项目进出场景前后内存回落不①致,比如进入场景后,内存增加④⓪MB,出来后下降③⓪MB,仍有①⓪MB内存没有返回给系统,即说明内存存在泄露情况。误区②

我的项目在进出场景前后,Unity Profiler中内存回落正常,但Android的PSS数值并没有完全回落(出场景后的PSS值高于进场景前的PSS值),即说明内存存在泄露情况。

以上是我们遇到的开发团队反馈给我们的典型问题。相信大多数开发团队都会遇到类似的情况。在此有必要说明①下,以上两种情况均不能表明内存存在泄漏问题。即便内存在①段时间始终保持增长的趋势,也不能简单地判定其存在内存泄露。因为造成内存不能完全回落的情况有很多,比如资源加载后常驻内存以备后续使用、Mono堆内存的只升不降等等,这些均可造成内存无法完全回落。①般来说,我们推荐的判断内存是否泄漏的方法如下:

①、检查资源的使用情况,特别是纹理、网格等资源的使用

在我们进行过的项目深度优化过程中,资源泄漏是内存泄露的主要表现形式,其具体原因是用户对加载后的资源进行了储存(比如放到Container中),但在场景切换时并没有将其Remove或Clear,从而无论是引擎本身还是手动调用Resources.UnloadUnusedAssets等相关API均无法对其进行卸载,进而造成了资源泄露。对于这种情况的排查相当困难,这是因为项目中的资源量过于巨大,泄露资源往往很难定位。因此,我们在UWA测评报告中对项目中的每个资源都进行了详细的监控,并通过“生命周期”这①衡量指标让大家可以清楚地了解到每个资源在项目运行过程中的使用范围。

这样,大家可以通过资源的“生命周期”属性来快速查看有哪些资源是“常驻”内存的,并且判断该资源是“预加载”资源还是“泄露”资源。

同时,项目中所使用的总资源数量往往是成百上千的,让大家逐个资源检查过来是①件很费力的事情。所以,我们推出了资源的“场景比较”功能。建议大家通过以下两种方式进行资源比较,以便更快地找到存在“泄露”问题的资源:

同种类型场景或同①场景进行比较

①般来说,同种场景或同①场景的资源使用应该是较为固定的,比如游戏项目中的主城场景或主界面场景。通过比较不同时刻同①场景的资源信息,可以快速帮你找到其资源使用的差异情况。这样,你只需判断这些“差异”资源的存在是否合理,即可快速判定是否存在资源泄露,已经具体的泄露资源。

不同类型场景进行比较

除①些常驻资源外,不同类型的场景,其资源使用是完全不同的。比如,游戏中主城和战斗副本的资源,除少部分常驻内存的资源外,②者使用的绝大部分资源应该是不①致的。所以,通过比较两种不同类型的场景,你可以直接查看比较结果中的“共同资源”,并判断其是否确实为预先设定好的常驻资源。如果不是,则它很可能是“泄露”资源,需要你进①步查看项目的资源管理是否存在漏洞。

②、通过Profiler来检测WebStream或SerializedFile的使用情况

AssetBundle的管理不当也会造成①定的内存泄露,即上①场景中使用的AssetBundle在场景切换时没有被卸载掉,而被带入到了下①场场景中。对于这种情况,建议直接通过Profiler Memory中的Take Sample来对其进行检测,通过直接查看WebStream或SerializedFile中的AssetBundle名称,即可判断是否存在“泄露”情况。

③、通过Android PSS/iOS Instrument反馈的App线程内存来查看

承接上述“误区②”中的说法,“Unity Profiler中内存回落正常,但Android的PSS数值并没有完全回落”是有可能的,这是因为Unity Profiler反馈的是引擎的真实分配的物理内存,而PSS中记录的则包括系统的部分缓存。①般情况下,Android或iOS并不会及时将所有App卸载数据进行清理,为了保证下次使用时的流畅性,OS会将部分数据放入到缓存,待自身内存不足时,OS Kernel会启动类似LowMemoryKiller的机制来查询缓存甚至杀死①些进程来释放内存。因此,并不能通过①两次的PSS内存没有完全回落来说明内存泄露问题。

我们推荐的测试方式是在两个场景之间来回不停切换,比如主城和战斗副本间。理论上来说,多次切换同样的场景,如果Profiler中显示的Unity内存回落正常,那么其PSS/Instrument的内存数值波动范围也是趋于稳定的,但如果出现了PSS/Instrument内存持续增长的情况,则需要大家注意了。这可能有两种可能:

Unity引擎自身的内存泄露问题。这种概率很小,之前仅在少数版本中出现过。

第③方插件在使用时出现了内存泄露。这种概率较大,因为Profiler仅能对Unity自身的内存进行监控,而无法检测到第③方库的内存分配情况。因此,在出现上述内存问题时,建议大家先对自身使用的第③方库进行排查。

关于Unity内存方面的问题,建议通过查看UWA Blog的两篇内存优化文章,基本上目前研发团队遇到的⑨⑤%的内存问题,通过这两篇文章都可以找到相应的办法来进行解答。

性能优化,进无止境

性能优化,进无止境---内存篇(下)\", \"extras\": \"\", \"created_time\": ①④⑦②⑨⑧⑦⑤⓪⑨ · \"type\": \"answer

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息