unity3d显卡要求

2017-03-28 22:18:16 jxw167 阅读数 2607
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

最近给读者分享一下关于Unity3D的优化,这个问题对于开发者来说都是比较头疼的问题,这里先介绍一下关于项目开发通常的做法。开发项目前期由于赶进度,不停的堆积功能和资源,这样项目完成后,包体非常庞大,代码写的也很乱,后期项目进入优化阶段,包括代码的重构,各种BUG的修复,从而导致版本开始变的不可控制,项目研发周期也是不停的延期延期,这种情况在大部分公司都是常见的问题。其实作为老板来说,他肯定要着急看到项目成果,所以就不停的督促开发人员加班加点的搞,站在老板的角度考虑问题,情有可原。

但是,作为开发者来说,我们不能按照老板的节奏走,这样后面不仅坑的是自己,也把公司坑掉了,后期项目由于各种问题很容易夭折,这种局面是不可控制的,因为项目开发完成了,后期还会加入很多功能,如果前期没有规划好,就会出现前一发而动全身的情况,这样也预示着项目即将死掉。如何避免这种情况发生,在这些系列文章中给读者分享一下笔者关于这些问题的解决方案。

用Unity引擎开发,我们就要了解它们的工作机制,这样在项目进行优化时也会有针对性,关于优化方面,笔者也做过一些视频讲座,当然这些系列文章是视频中没有的,Unity首先遇到的问题就是效率问题,很多项目由于效率问题夭折了,所以这个问题的解决非常重要,如何优化效率也就是运行帧率,针对于Unity就是减少Draw Call的数量。

 网上关于Draw Call的介绍非常多,这里再给读者向细的方向讲一下,其实Draw Call的执行就是CPU与GPU之间的通信,这就涉及到渲染流水线的概念,渲染流水线的起点是CPU,主要分三个阶段:

1、CPU把数据加载到显存中

2、设置渲染状态

3、调用Draw Call

根据上面提到的三个步骤,再详细介绍一下,所有游戏中渲染所需要的数据都需要从硬盘中加载到内存中,然后网格和纹理等数据被加载到显卡上的存储空间也就是我们所说的显存。这是因为显卡对于显存的访问速度更快,效果如下:

实际项目开发中,真实渲染中需要加载到显存中的数据比图中显示的更复杂,举例说明一下:顶点的位置信息、法线方向、顶点颜色、纹理坐标等等。

当把数据加载到显存后,在内存中的数据部分可以移除,因为对于一些数据来说,CPU仍然要访问它们,从硬盘加载到内存的过程是十分耗时的,这个也要考虑的。在这之后,开发者还需要通过CPU来设置渲染状态,从而“指导”GPU如何进行渲染工作。

接下来介绍设置渲染状态了,渲染状态定义了场景中的网格是如何被渲染的,如果我们编程没有更改渲染状态,所有的网格都将使用同一种渲染状态。如下图所示效果演示:


以上图片只是表达这个意思,同样的渲染状态,材质是一样的。准备好上述工作后,CPU就需要调用一个渲染命令来告诉GPU:数据准备好了,可以按照我的设置开始渲染,这个渲染命令就是Draw Call,讲了这么多终于回来了。

 实际上,Draw Call就是一个命令,它的发起方是CPU,接收方是GPU。当给定了一个Draw Call时,GPU就会根据渲染状态(比如材质,纹理,着色器等)和所有输入的顶点数据来进行计算,最终输出成屏幕上显示的那些像素,这个过程也会涉及到GPU流水线。如果有读者对此不清楚可以看看笔者以前的博客有详细的介绍。接下来我们继续解释Draw Call ,给开发者造成的误区认为 造成Draw Call问题的主要原因是GPU, 认为GPU上的状态切换是耗时的,其实不是的,真正的罪魁祸手是CPU。

下面我们就介绍CPU和GPU工作原理,大家先想一下,如果没有流水线,那么CPU需要等到GPU完成上一个渲染任务才能再次发送渲染命令。但这种方法显然会造成效率低下。我们需要让CPU和GPU可以并行工作,解决方法是使用一个命令缓冲区(Command Buffer)。命令缓冲区包含了一个命令队列,它是由CPU向其中添加命令,而由GPU从中读取命令,添加和读取的过程是相互独立的。命令缓冲区使得CPU和GPU可以相互独立工作。当CPU需要渲染一些对象时,他可以向命令缓冲区中添加命令,而当GPU完成了上一次的渲染任务后,它就可以从命令队列中再取出一个命令并执行它。

命令缓冲区中的命令有很多种,而Draw Call是其中一种,其它命令还有改变渲染状态等。效果如下图所示:

图中显示的是CPU与GPU通过缓冲区进行交互,Draw Call执行的是图中灰色的显示的,而白色的是改变渲染状态的,这个相对来说比较耗时间。

为什么Draw Call 多了会影响帧率?读者可以做一个实验,比如你复制1000个文本文件到另一个文件夹中,每个文件大小是100K,总计大小是10MB,这个要花费很长时间。我们再来创建一个单独的文件,它的大小是10M,然后也把它从一个文件夹复制到另一个文件夹。这次复制的时间少很多。主要原因在于,每一个复制动作需要很多额外的操作,比如分配内存等,如果复制1000个文件,他要开辟内存1000次,这个开销将会很大。

渲染过程跟这个类似,在每次调用Draw Call之前,CPU需要向GPU发送很多内容,包括数据、状态和命令等。在这一阶段,CPU要完成很多工作。一旦CPU完成了这些准备工作,GPU就可以开始本次的渲染。GPU渲染能力是很强的,渲染200个还是2000个三角网格没啥区别,因此渲染速度往往快于CPU提交命令的速度。如果需要执行的数据很多,也就是说Draw Call 数量很多,CPU就会把大量的时间花费在提交Draw Call上,造成CPU的过载,这个是需要我们避免的。

如何减少Draw Call的数量,这个在Unity开发中常见,减少Draw Call的方法很多,介绍一下批处理的方法。在前面提到过,复制文件的问题,CPU的时间都花费在准备Draw Call的工作上了。优化的想法就是把很多小的DrawCall合并成一个大的Draw Call,这就是批处理思想。

需要注意的是,合并网格是需要CPU在内存中执行的,合并的过程是需要消耗时间的。因此,批处理技术更加适合于哪些静态的物体,当然动态的如果合并的话,也需要在CPU中执行,我在以前的博客中也有介绍。要注意的是不要每一帧都去重新进行合并再发送给GPU,这对空间和时间都会造成一定的影响。

要做到减少Draw Call需要注意以下两点:

1、避免使用大量很小的网格,如果不可避免需要使用很小的网格结构,可以考虑合并,当然,模型的材质也可以考虑通用。

2、避免使用过多的材质,尽量在不同的网格之间共用同一个材质。

3、遇到有相同动作的物体,可以使用合并动态网格的方式进行优化,效果还不错。

在本文最后把动态网格合并的代码给读者展示如下:

public class CombineOpMesh : MonoBehaviour {


    void Start()
    {
        CombineToMesh(this.gameObject);
    }


    public void CombineToMesh(GameObject _go)
    {
        SkinnedMeshRenderer[] smr = _go.GetComponentsInChildren<SkinnedMeshRenderer>();
        List<CombineInstance> lcom = new List<CombineInstance>();


        List<Material> lmat = new List<Material>();
        List<Transform> ltra = new List<Transform>();


        for (int i = 0; i < smr.Length; i++ )
        {
            lmat.AddRange(smr[i].materials);
            ltra.AddRange(smr[i].bones);


            for (int sub = 0; sub < smr[i].sharedMesh.subMeshCount; sub++ )
            {
                CombineInstance ci = new CombineInstance();
                ci.mesh = smr[i].sharedMesh;
                ci.subMeshIndex = sub;
                lcom.Add(ci);
            }
            Destroy(smr[i].gameObject);
        }


        SkinnedMeshRenderer _r = _go.GetComponent<SkinnedMeshRenderer>();
        if (_r == null)
            _r = _go.AddComponent<SkinnedMeshRenderer>();


        _r.sharedMesh = new Mesh();
        _r.bones = ltra.ToArray();
        _r.materials = new Material[] { lmat[0] };
        _r.rootBone = _go.transform;
        _r.sharedMesh.CombineMeshes(lcom.ToArray(), true, false);
    }
}
实现原理是:首先去遍历每个对象的SkinnderMeshRenderer,然后将其所有的动态对象组合成一个大的对象并且将骨骼动画赋值给他,这样,我们就实现了动态对象的优化。

实现效果图对比如下,首先展示的是没有合并的动态动画的Draw Call数量:


然后再挂上文提到的合并脚本后的效果如下所示:


具体操作方式如下所示:





2013-10-14 09:15:56 jbjwpzyl3611421 阅读数 0
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

1.引擎没有说具体的面数限制,按机器性能而定。

2.导入图形或者MESH的方法无非两种,一种是直接拷贝到文件目录下的Assets文件夹下面,Unity3d引擎会自动找到添加的文件,并且能在PROJECT面板中找到它。另一种是我们在PROJECT面板中用右键菜单,导入素材。

当然,我是用MAYA导入的,U3D引擎对于MAYA的支持还是不错的,但是也需要注意,不要用中文的目录结构,最好直接从MAYA的工程文件夹中导入,最好在导入MESH前先吧贴图文件放到相应的文件夹,或者相关文件夹的子文件夹。

在我们导入场景文件的时候,需要在导入设置中勾选创建碰撞,这样导入的场景我们就可以踩在上面了。(这跟我们添加碰撞组件是有些不同)

3. Unity3d引擎支持大多数常用的贴图,比如漫反射贴图,高光贴图,法线贴图。如此一来,它就成了一个名副其实的次时代引擎了。当然与UNREAL引擎的强大材质编辑器不同,U3D引擎主要是编辑材质的方式是使用一种专门的语言,类似于CgFXDirect3D的语法。当然如果不是专门的图形程序员,我们只要掌握相关的SHADER的使用方法就可以了。在我们安装完U3D引擎后,系统自带的SHADER足够我们日常大多数情况下使用了。如果我们还有特殊的要求,可以去官网上下载相关的程序,然后把代码保存为 .shader 的文件,放到相应的目录底下,然后我们就有了这种SHADER

 

掌握并且理解了上面我说的三点,你就可以作为一个U3D引擎的美工开始工作了。其中有几个需要我们进行深入探讨的几个方面:一是导入的MESH的要求,如何减面,UV的情况怎样,是否可以重叠UV 二是导入的贴图规范,我们的各种贴图要达到怎样的程度才能导入,并不是直接拍了照片贴上就很有效果的,我们需要在三维软件中烘焙,之后才能导入。还有光照贴图怎么制作。 三是各种材质的应用,比如说我们最常用在皮肤上的3S材质效果,如何在U3D引擎中实现这种效果?

至此,你可以轻松的驾驭U3D引擎的Assets部分了。

然后我们要用引擎构建关卡。好吧现在你要成为一个U3D引擎的关卡设计师,当然这里面也有很多美工要做的事情。我们不用每天对着素材模型,贴图骂娘了。

作为关卡设计师,特别是U3D的,一定要有一个GAME OBJECT的概念,在这个可爱引擎中,我们可以看到各种的元素都是由GAME OBJECT组成的,在GAME OBJECT上我们又可以添加组件在实现特定的功能,比如最简单的位移。我在第一次使用这个引擎的时候,突然兴致大发想要在场景中创建一盏灯,弄了半天都没成,后来才明白,灯光是要附着在GAME OBJECT上的。同理,声音也是要附着在这上面的。

还要有一个PREFABS得概念,就在层级菜单中的蓝色文字所代表的属性,其实就是在游戏中可以无限复制的意思,比如子弹,比如无数的需要出现的小物件儿。

类似于三维软件以及其他引擎,U3D的灯光分为那么普通的几类,电光源、方向光、自然光。了解灯光的属性和使用方法。

还有U3D引擎的物理系统。当我看到这个系统的时候我的心都开花了,一想到各种独立游戏中无敌的物理效果心里就暗爽。比如我们可以用最简单的方法做一个足球游戏。

 

还是做游戏好,这个引擎能做网页游戏,也可以做PC单机游戏,网络游戏,也可以做IPHONE平台的手机游戏。真是万能了!

当然,上面很多都是初学时候的经验,下面是我后来加上的一些内容,是经过学习总结和辛苦翻译的。

让你的游戏能够顺畅的运行是成功的第一个要求。感谢UNTIY,他们通过大量的优化和调整可以让这个引擎发布的游戏运行于各种不同性能的硬件系统。下面是一个通用的优化游戏性能的方法。

 

 

总体来说:合并,合并,合并!

如果你比较关心游戏的速度,请合并模型。最好能够把合并的模型使用同样的材质和贴图。Rendering Statistics(渲染静态网格)窗口时很有用的!

现在的图形显卡可以很好的支持很多的多边形,但是他们他们还是有一些瓶颈的。所以如果你有一个有100个三角形的MESH,它渲染起来所需要花费的运算跟1500个面数的物体是没有多大差别的。因此最佳的渲染设置时每个模型大约1500-4000个三角面。

只有在游戏组件中的属性栏中勾选Mesh Renderer选项显卡才会渲染相应的模型,并且在场景中的空的GameObject组件是不会被渲染的。

      所以再次重复,最好的导入渲染设置时合并Objects直到他们每个模型在1500个三角面面甚至更高一些,并且为整个模型使用一个材质。

如果只是把两个模型合并在一起但是不共同使用同一个材质并不会给你的图形带来一点优化。如果你想有效的合并物体,你需要保证你合并后的模型使用一个材质。(其实就是尽量减少材质球的数量)

在你合并物体的时候需要知道一件事:如果你在你的场景中用到了很多小的灯光,你可以把场景中离得很近的物体合并为一个Object

按照上面的思路,如果一个MESH具有多个材质球,那就说明在计算机渲染的时候是要进行多重运算的。最普遍的你之所以一个MESH用多个材质的原因是因为两个材质不能使用相同的贴图。所以如果你想要优化渲染设置,你最好确定你合并的那些MESH的材质是相同的。

      Unity对于向显卡导出各种多边形是很擅长的,它可以很详尽的把所有的图形导入到显卡,并且优化数据。你需要做的只是确定你的图形显示卡正常工作。而不是要调整很多手动调节的设置。

      The number of Pixel Lights affecting an object heavily affects performance. 相当数量的实时灯光对于游戏速度也是有限制的。

如果你想要有一个不错的展示,并且不关心凹凸贴图和实施灯光(Bumpmapping or Pixel Lighting),可以去Edit->Render Settings...然后设置Pixel Light Coun0.这将会给所有的Object使用顶点灯光。这将会让所有的物件在每一帧都会被渲染一次。这是一个比较极端的LOD设置,所以你的游戏就可以再比较老的图形显卡下运行了。

Pixel lights 像素灯光

如果你使用的是像素灯光,那么每个被这个灯光照射到的GameObject都会在每一帧被渲染一次。如果你合并了两个距离很远的物体,他就会增加物件的大小,然后你就会需要一些灯光来照亮这些物体。如果你的物件是分开的,灯光将不会渲染远处的物体,这将会导致模型得到多次渲染,相比较没有被合并的模型,我们并没有得到多少实惠。因此,如果你的GameObject中有很多独立物件的时候,你可以让他们离得比较远。

当渲染一个模型的时候,UNTIY如果发现很多灯光在MESH的周围,它将会找出那个是主要影响这个MSEH的灯光,在Edit->Render Settings中的设置就是用来调整有多少个灯光最终作为像素灯光有多少作为顶点灯光。

每一个灯光通过计算离MESH得距离和自己灯光强度来决定自己的重要程度。

在游戏中的某些灯光是很重要的,所以,每一个灯光都会有一个Render Mode设置,这个用来设置哪一个可以被用来设置为Force Pixel 或者 Force Vertex.

想象一下假如我们是一个驾车的游戏,你的角色在夜晚打开车灯,前面的车灯就是游戏中最重要的灯光。因此,前大灯的渲染模式将会被设置为Force Pixel

当然如果你有一个不是很重要的灯光,也是选择使用"Force Vertex"的渲染模式,这个方式也不会对游戏的速度有很大的影响的。

影子

阴影普遍运算量比较大。如果运用得当,可以让游戏画面出色,你也可以乐队相关文档。

角色建模优化

你的角色应该只被用于一个蒙皮模型渲染器。当然有时候可能需要多个蒙皮的模型,但是如果你同时用两个蒙皮来作为一个角色,它就相当于你进行了两个角色的运算量。
你同样需要保持MESH的材质数量尽可能低。一般建议身体的材质数量为2-3个,当然如果你有武器的材质,也是需要单独一个的,因为你需要换武器。
减少骨骼的数量,一般来说游戏中的骨骼数量为15-60个。骨骼越少运行速度越快,一般来说30块骨骼就可以让角色动的很舒服了。如果你不是有特殊的设置,我们强烈建议每个角色30个骨骼。
   
多边形的数量主要是看你对游戏的质量要求,500-6000个三角面是比较推荐的。如果你的游戏场景中将会出现多个角色,那么就要适当的降低一下多边形数量了。如果你想要在比较老的机器上运行,你需要更少的多边形数量。比如,半条命2游戏的角色通常是2500-5000个三角面。达到AAA标准的次时代游戏比如像是PS3或者XBOX360上的游戏角色通常有5000-7000个三角面。


  
IK控制器和FK控制器分离,当动画导入以后,IK的节点将会烘焙到FK上,其实UNITY并不需要IK节点,你可以删除它们。
   
创建一个公共的骨架,这样就可以让你让不同的角色之间共享动作了。
给每一个骨骼正确的命名,方便团队工作,也方便类似于Motionbuilder的动作软件,不然你得每次指定骨骼。

优化综合的图形卡
优化模型参数
使用尽量少的面
   UV
接缝的数量尽可能少
烘焙灯光

烘焙灯光到光照贴图或者到顶点颜色。

MAYA具有不错的制作光照贴图的工具,UNITY可以从MAYA中导入第二个UV贴图或者顶点颜色。

制作环境的光照贴图的流程要比直接在场景中打灯光要繁琐的多,但是运行速度明显增快。
如果你使用全局光并且平滑光照贴图,可以让画面效果明显增强。
甚至次时代游戏比如战争机器始终在很多方面使用光照贴图。通常他们在场景中使用光照贴图,然后在上面放置一个动态灯光。在UNITY中也可以制作相应的光照贴图Shader.

2018-10-17 14:15:14 qq_22521529 阅读数 30040
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D学习路线与学习经验分享//最后一次更新为2019.7.22日,更新了一些废掉的链接

作者:15游02 丁祺

你好,这篇文档是我的导师孙老师(以下简称老孙)指名我 书写给新手、初学者以及技能有些许缺陷的人的一篇经验分享的文档,当然如果你看到了这些文字,代表着你是一个有意愿或期望去学习这款软件的人。因人与人之间有很多的不同,以下我会尽我所能,通过不同切入点与角度,并根据以上人群的不同技术程度,来帮你提升你的技术实力,我会在结尾留下我的联系方式,有兴趣的话可以联系我。那接下来我就分享一下我的学习经验。

写给新手与初学者:

你在准备开始学习这款软件之前,可能经常会听周围的人说,“英语很重要,如果不会英语,程序是学不会的”,“学程序,就又得背单词了”,“C语言都没学好,不可能搞得懂Unity3D的”...等等这一些容易影响心态的话。我认为,学这个,开局最重要的并不是疯狂翻书疯狂看视频直接拿来就学,而是——消除恐惧,消除对程序,对Unity3D“高大上”的感觉。

所以学Unity3D需要英语吗?

那?你觉得什么程度才是会英语呢?我分享两个链接给你,这是英文演讲与纯英文文档的网页链接,如果有兴趣测试一下自己的英语实力的可以打开看一下。

【Unite 2018 柏林大会】完整版录像

https://www.bilibili.com/video/av25266964?from=search&seid=16153052159950265652

Unity3D官方API文档

https://docs.unity3d.com/Manual/index.html?_ga=2.153078527.776856565.1539157046-412574144.1536670294

对于我来说,如果你能听懂英文技术演讲录像,能看懂英语技术文档才能被称之为会英语,反之则不会,我觉得不能为你解决实际问题的技能根本不能称之为会,只是在浪费时间而已。简单说,如果你想靠Unity3d这个东西吃饭,并不需要英语水平,你不需要刻意 去记忆英文语句,按照我的话讲,纯英语界面的Unity3d,抄它的界面就好了,界面没有的,去网上找对应的功能,并抄在笔记上,下次用的时候直接去翻就足够了(如果你想尽快提升能力的话,我建议千万不要去记,用的时候直接去翻看笔记就好了,在大量的练习中,你的大脑就会自然而然的记住这些代码,我就是这样的)。

当然了,如果你想成为界内大牛,你就必须会英语了,毕竟这是老外的东西,学会英语可以帮你打开一扇新的窗户。不过你现在的英语实力绝对绝对足够去学习这款软件了。

C语言学的差,会不会差很多啊?

会C语言与不会C语言的人,同时学Unity3D中的C#的学习速度,是有区别的,毕竟他们两种语言之间还是有一些共同的部分的,但达不到很多,这种程度。但与其你自己纠结 这个问题,不如问问自己愿意付出多少学习能力在这个上面。每个人都拥有清华北大学生的学习力,只是愿意付出的量不同而已,想学就一定不会差

“我感觉Unity3D就是一个小学生引擎,画质贼差,感觉学起来没什么意义,还不如去学虚幻呢。”

相同场景下 虚幻4 VS Unity 5

https://www.bilibili.com/video/av17956467/?spm_id_from=333.338.recommend_report.2

如果你有这种感觉的话,推荐试一下《崩坏3》手机游戏与腾讯的《逆战》电脑游戏;

 

总之Unity3d只是个工具,做出来的东西的好坏,取决于用的人,就像你打游戏,如果你技术不好,再版本强势的英雄,你也没法单人打上最强王者。

 

 

如何开始学习Unity3d?

我要变学霸_如何写笔记?How I Take Notes

https://www.bilibili.com/video/av10395257

在开始学习之前,你需要一个笔记本,推荐活页的,就是那种可以拿下来单页的那种,他就是你以后学习时,你大脑的硬盘,笔记法同时适用于世界上的全部科目。具体怎么写笔记我就不说了,只需要记住两点:

  1. 千万别自以为是的认为自己的脑子很好使,你不是机器,写笔记,必须且一定要写,不然,重复查找自己找过的知识点的时候,你的心态会受到影响,且会浪费大量的无用时间,而且千万别用电子版,记录电子笔记的时候会勾起你ctrlC+V的欲望,表面看,你节约了半分钟打字时间,可你没有经过你大脑思考的这一步骤,会严重影响你的记忆,而且电子版无法像纸质笔记本那样粘书签,翻看会非常麻烦,相信我,多动手写几个字而已,不会要人命的。
  2. 写知识点的时候千万千万别抄别人教给你的话,(1)一定要尽可能的精简,(2)并尽一切可能用自己的语言表达,然后把自己的话记录到笔记本上,否则你就是白写,没有任何意义。

 

开始学习Unity的几种方向(热手用的入门期,熟悉者可以跳过)

以下我会给你列举几个我个人推荐的开始学习Unity的几个入口,当然你在学习这些东西的时候,不要忘了听课(课上尽量不要跟着敲代码,敲代码会一定程度的影响你的注意力,而是听出老师讲课的核心,并把核心知识转换成自己的话,写在笔记本上);你可以根据自己的兴趣,与自己大脑的记忆习惯来选择,从哪个位置进入。这几个入口是没有优劣的。不用觉得哪个入口高大上,重要的是,这个入口是否适合你自己,如果发现听不懂,认真再听一遍,如果还是不会,直接跳过。不过在学习期间,你是没精力玩游戏的,记得删掉你手机与你电脑里的游戏,等你自己的Unity技术足够养活自己了以后,再用Unity给你赚来的钱,充到游戏里做个天选之人吧。

以下全部视频我都看过,你大可不必担心视频的质量(我个人在看视频学习的时候,会同时播放一些没有人声的轻音乐,来降低困意)

1、暂时比较厌恶或者恐惧代码,以及零基础的人

傅老师的Unity3D教学 //这里傅老师的原视频被收购,所以他近期刚刚新出了一套新鲜的视频,供大家使用

https://www.bilibili.com/video/av57479723

这个系列是通过插件的方式,来尽量绕开代码这个大难题的(当然不代表完全没有),让你在不太了解代码的情况下就可以基本操作Unity,并且可以做一点东西出来,他还在这个系列里教学了插件画面美化,通过点击的方式就可完成3A画面的特效处理。

 

2、传统的教学方式:

这个入口主要是以不断完成微型小游戏的一种路线,有一点点难度,推荐了解一些些C语言或其他编程语言的人进入

Unity零基础入门 - 打砖块 http://www.sikiedu.com/course/77

零基础入门Unity - 古迹探险 http://www.sikiedu.com/course/84

Unity5.2入门课程 - 进入Unity开发的奇幻世界 http://pan.baidu.com/s/1mhDZO7m

Unity中的C#编程 - 零基础(Unity 2017) http://www.sikiedu.com/course/83

第一季 C#编程初级教程 链接:https://pan.baidu.com/s/1nwGyGDN 密码:memt

UGUI - Unity 5.1超强UI案例学习 http://pan.baidu.com/s/1qYENTW4

这个系列使用比较传统的教学顺序,来熟悉Unity操作的。

 

3、相比视频更喜欢看书:

《Unity游戏设计与实现 南宫梦一线程序员的开发实例》(绿色的书)   第0章

 

《Unity 5.X从入门到精通》  Unity官方制作,精品中的精品(这本书包含了入门期开始到精通这款引擎的几乎全部内容,如果你打算看这本书,坚持从头看到尾吧。

 

要尽早结束入门期,毕竟入门期只是用于热手。

 

正式学习期

入门期结束后,就要正式开始学习Unity了,以下为必学项,每个视频后我都会写上我认为必学的理由,我会尽量解释清楚推荐的理由,不会让你带着“我擦学这有啥用啊”之类的想法去看的。

以下视频我会分成块,你看的时候,各模块之间看的顺序可以随你兴趣,但所有的视频内容都必须认认真真看完。(此清单的部分内容来自于SIKI的A计划学习路线的加工整理版本)

 

代码部分(代码,与外语一样,都是一门语言,都是用于交流的工具,只不过外语是跟人交流,而代码是跟机器交流的,学会了代码你才能真正开始控制电脑,让他帮你工作;放心,代码是世界上最简单的外语,比学英语相比不知道简单了多少倍。)

第一季 C#编程初级教程(基础代码部分,这其中大部分都跟C语言,Java相同,已经学过的可以快进着看) https://pan.baidu.com/s/1nwGyGDN 密码:memt

第二季 C#编程中级教程(略微提升了点难度,但其中的内容都很常用。学这个的时候会有一种完全不知道这破玩意有什么用的感觉,没事这是正常现象,不用太担心,做好笔记,当你完全理解了面向对象以后就明白了) https://pan.baidu.com/s/1htLYalI 密码:78zv

Unity API常用方法和类详细讲解(API是Unity这个引擎提供给你的“工具”,这部视频干货特别特别多,不要用脑子记,但千万记住,一定要在做好笔记的同时,理解每一条API的大致意思。这是Unity最最最核心的部分,你以后的学习和工作中会天天用到这部分的内容。) http://www.sikiedu.com/course/59

 

物理系统(因为现实中的真正真实的物理,实在是太难模拟了(想象一下摩擦力),所以程序员使用了“碰撞器”,来大致模拟现实中的物理效果(如你去台球厅打球,人用球杆用力击打白色球,这个球撞到其他球时,可以打飞其他球。这种“打飞”其他球的效果使用了碰撞器来实现。))

Unity官方教程-3D物理系统-中文版 (这段视频中的难度是逐渐上升的,先看懂前4 课,可以不用强迫自己一口气看完) https://space.bilibili.com/28562838/#/channel/detail?cid=30384

 

UI部分

UI是我认为的Unity中最简单最容易上手的一部分了,基本不需要写任何代码,拖拖拽拽很容易就OK了。(可能有人听过NGUI,我简单解释一下,NGUI是过去人们用的非Unity官方制作的UI系统,现在已经不像过去那么流行了,个人不建议学习,当然,有兴趣者可以看看,不过UGUI一定要会)

UGUI - Unity 5.1超强UI案例学习 http://pan.baidu.com/s/1qYENTW4

 

动画系统(如果你不希望你做出来的游戏都是一堆不会动的“僵尸”,就好好学这的内容。这里放上的视频链接为3D模型的动画系统)

需要学习的量有点大,有一定难度。不过我还是那句话,不要用脑子记,抄笔记。

 

Unity中的动画系统和Timeline(Unity2017) http://www.sikiedu.com/course/82

 

光照系统 (不过多解释)

[傅老師/Unity教學] 30 - 3種烘焙光照模式(Baked Lighting)

https://space.bilibili.com/211153830/#/video?tid=0&page=5&keyword=&order=pubdate

[傅老師/Unity教學] 渲染相關知識 - 01 基礎渲染步驟

https://www.bilibili.com/video/av17250027

[傅老師/Unity教學] 渲染相關知識 - 02 室內光影基礎實驗

https://www.bilibili.com/video/av18330502

[傅老師/Unity教學] 渲染相關知識 - 03 用一顆石頭架場景!! 室外光影基礎實驗

https://www.bilibili.com/video/av18442018

 

粒子系统(这里我就不多解释什么是粒子系统了,打开视频链接,自己看吧)

 

Unity官方最新粒子特效素材包视频 https://www.bilibili.com/video/av31104362?from=search&seid=10690239211286766965

 

顺便在此推荐一下上传这个视频的B站UP主Shallot夏洛特,他的个人空间经常会上传一些关于Unity新奇功能的教程。想长期学习Unity的话,推荐关注一下他的动态。

 

Unity中的Shuriken粒子系统(Unity2017)入门级教程(想深入学习粒子的就去网上查吧)

http://www.sikiedu.com/course/79

 

 

DOTween动画插件

这个插件是所有插件中,唯一的一个我建议你必学的插件。这个插件是用来制作物体的移动(从一个位置移动到另一个位置的动画),UI的移动(从 一个位置移动到另一个位置的动画)从一个颜色渐变到另一个颜色(从一个颜色变换到另一种颜色的动画)的一种便利性的插件。嗯?没听懂?

DOTween

链接:https://pan.baidu.com/s/1i6Ud2XB 密码:6amf

 

项目制作教程(知识学累了吗?想实际做做项目练练手?我这里精选了几个我做过,并且感觉收获颇丰的视频教程给你,推荐你感觉脑子爆炸的时候食用。)写代码的时候,如果你有能力,尽量不要抄袭他的代码,使用自己的习惯去写,只要做出来的东西和他一样就行,这种自己思考代码的方式将会极大的培养你的代码写作能力。

初级案例:

Unity初级案例 - 坦克大战(Unity2017.1) (就是小时候我们玩的插卡游戏机里的坦克大战)

http://www.sikiedu.com/course/90

Unity初级案例 - 愤怒的小鸟(其中使用了2d的物理系统,使用方法和3d的基本相同)

http://www.sikiedu.com/course/134

有一定基础后的案例:

Tanks第三人称双人坦克大战视频教程

链接:https://pan.baidu.com/s/1eTbuUxO 密码:qi4b

Stealth秘密行动 (Unity最经典官方项目之一) 链接:http://pan.baidu.com/s/1miMWSas 密码:bl83

从零开始三小时速撸一款雷姆小游戏Unity3D全过程(如果你喜欢二次元的孩子推荐这部和下面那部。会稍微有点理解上的难度。)

https://www.bilibili.com/video/av5814699

从零开始的两小时速撸:使用血小板制作脑血栓游戏(跳一跳)

https://www.bilibili.com/video/av27387729

MMD功能 写实版场景配Unity娘 极乐净土(喜欢二次元的同时,又好奇MMD到底是怎么制作出来的人推荐玩一下这个视频)P1为介绍视频。P2为教学视频

https://www.bilibili.com/video/av7700841?from=search&seid=13542732114945459430

https://www.bilibili.com/video/av7715582

(在这个作者刚出雷姆小游戏的时候我还是个代码都不会的孩子,但当他出血小板的时候,我已经可以用我自己的Unity知识工作了;假如你真的想好,要走Unity这条路的话,狠下心来好好学,努力是不会辜负你的。)

 

在此推荐一下这三部视频的作者 新鲜的女尸,就跟这名字一样,这小子真跟尸体一样突发性诈尸一次,然后又进入了长期的休息期,喜欢做二次元Unity项目的人推荐关注他一下,没准哪个动漫突然火了以后又出来诈尸一次。

 

 

最后的高级提升期

因这里的内容都比较难,如果你没有上面的知识积累,看这里的视频会让你困懵逼的。这部分内容推荐已经学了新手期与大部分入门期的人再深入学习

 

高级代码部分

第三季 C#编程高级教程 这部视频可以说,已经把代码的全部内容讲完了,难度很高,可能你看完了初级和中级以后依旧看不懂,如果真的用心去看,并且反复看了好几遍依旧看不懂的话,先放下学学别的,然后再回来看。推荐有至少一年代码经验的人食用

链接:https://pan.baidu.com/s/1slBP7mH 密码:eob1

 

数据结构 数据结构是一门分析如何存储数据与数据之间逻辑关系的一门学科,这部视频里的老师讲的真的很好,你认真看能看懂的。数据结构的知识面试很容易考,你一定要认真学里面的知识点。(千万不要看上海交通大学的和清华大学的数据结构公开课,虽然这两部视频中的老师讲课很有牌面,但是全是说的书面语言,没有习惯听书面语言的人是不太可能听懂的,最好不要去看,不然会严重打击你的自信心。)

【考研】赵海英 数据结构 (这部视频就不像C#高级篇那么难了,认真听就能会)原链接的视频被取消了,如果需要查看,请在B站或者百度搜索赵海英 数据结构

【郝斌】-数据结构入门 (学历不高,但讲课极其精辟的一位老师,喜欢听白话讲课的人非常推荐,  推荐上下两位老师一起结合着看,你会有非常高的收获)

https://www.bilibili.com/video/av6159200?from=search&seid=10153396348143638381

这里我再推荐一本书 《大话数据结构》

这本书用很通俗易懂的语言写了数据结构的内容(虽然有的例子贼牵强,哈哈哈),推荐不喜欢看视频,或者看完视频后查缺补漏使用。

Unity编辑器扩展 编辑器扩展是一种提升在Unity中的脚本美观性的一种技术,学起来还是很好玩的。

编辑器扩展

在线观看: http://www.sikiedu.com/course/47

链接: http://pan.baidu.com/s/1gfHURYF

【水鸡游戏课堂】Unity编辑器扩展1至7

https://www.bilibili.com/video/av23671632?from=search&seid=4358948779151612714

算法 算法是一门研究如何利用数据存储的数据,求出计算结果,以及讨论最优计算方法的一门学科,有些地方也把算法也一并算作是数据结构。(这里的这一部视频,并未收集全部算法领域的知识,你需要在以后的工作中继续学习补充你缺失的部分)

编程内功修炼-算法 链接: https://pan.baidu.com/s/1eSgkCpk 密码:xcz2

 

设计模式 设计模式是前人写代码时,透过需求发现的一些常见的结构上的问题,并把这些问题的常见的解法,用UML图与简单的文字归纳出来的一种代码结构思想。在学习这里的知识点的时候,如果突然有一种,“卧槽,在我学设计模式之前我就用过这模式”的感觉,说明你在之前的练习中,真的用心去思考问题了,是一种非常很好的现象;在学习设计模式的时候需要注意几点。

  1. 这不是考验记忆力的学科。设计模式不要死记,重要的是学会他构建代码时候的书写模式。
  2. 不要任何地方都想用设计模式。学会设计模式后,宁可不用也不要滥用设计模式,不然会让你觉得束手束脚,无从下手,当你有了大量的代码练习基础后,你就会明白模式的好处,与应应用的场合了。
  3. 不要觉得设计模式中的例子就是绝对正确的。有时候设计模式中举的例子,并不一定是你的项目中真正需要使用的书写方式,千万不要被他的例子束缚住。
  4. 以上三点虽然我说的很轻松,但是想真正做到这些,没有大量的实验与使用基础是不太可能做到的,不要有太大压力,慢慢来别放弃。

因我自己学习时使用的是SIKI A计划课程中的视频(收费),所以不敢给你瞎推荐好的免费视频,如果你没有A计划的账号,推荐去B站搜索“设计模式”,手动搜索适合自己的视频。A计划收费视频   游戏开发中的设计模式 http://www.sikiedu.com/course/54

 

框架:MVC 这是我认为最有用的东西之一了,他可以说属于设计模式的范畴。我认为他与其说是知识,不如说是一种规划代码的一种整理方案,让你不再觉得代码乱,也会杜绝总会出现一些在奇奇怪怪位置调用的变量。

同为A计划收费课程 基于MVC架构的俄罗斯方块开发(基于Unity2017)

http://www.sikiedu.com/course/80

 

数据库 数据库的重要性不用我多说吧。

MySQL数据库从零到精通 链接:http://pan.baidu.com/s/1mh6FR5Y 密码:qlf7

http://www.sikiedu.com/course/48

 

Shader Shader是一种显卡语言,当然了,如果你真的能学到这,我想也不需要我解释什么是Shader了。

简单易懂的Unity5 Shader着色器入门教程

https://pan.baidu.com/s/1pLCwaKj 密码:7wqu

 

以上可以说就是Unity需要的基本知识了,还剩下一些零碎的知识,需要你自行查找并学习。

1、3D数学

  1. Json 数据持久化 想将数据保存在硬盘里?学这个吧。
  2. uLua热更新 链接: https://pan.baidu.com/s/1kUIZMcB 密码:x12i
  3. 网络链接Unet  或者 PhotonServer

 

结束语:

如果你真的按照我说的做,并且认认真真按照我说的路线与方法学了下来,谢谢你愿意相信我,也愿意相信你自己。带着你努力的成果与这股学习力,去找工作吧,社会不会辜负愿意努力的人。

作者:丁祺

QQ:1968548010

版本:v1.1;

2017-07-12 22:43:43 Kaitiren 阅读数 18207
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

背景

  在重度手游的研发过程当中,游戏中的车辆模拟,场景互动,特效展示等功能很多时候需要物理引擎的介入,以提供丰富的交互体验。目前3D手游的开发主要工具是使用Unity3D引擎,于是,如何在Unity3D的开发过程中结合入物理功能变一个需要仔细考虑的问题。

  我们考察的2种物理效果实现方案:Unity3D物理引擎和Havok物理引擎。

  Unity3d物理引擎介绍

  Unity3d在内部集成了PhysX物理引擎,为其提供了物理模拟能力。

  Physx是目前使用最为广泛的物理引擎,PhysX目前由Nvidia公司开发并维护,特点是免费且带N卡的GPU物理计算加速功能(1)。

  PhysX被很多游戏大作所采用,使用PhysX制作的游戏:


                                  

4.X版本的Unity3D集成的是2.8.3的PhysX,该版本较为老旧。在Unity5中将集成PhysX3.3,较2.8.3版本在功能和性能上有较大幅的提升,但是目前unity5并不是非常稳定。

  Havok物理引擎介绍

  Havok物理引擎是由Havok公司开发的老牌物理引擎,与PhysX不同,Havok专注于CPU端+多线程模拟方案,并且与PhysX的强大市场推广以及免费策略不同,Havok授权很严格,而且基本不提供试用版本下载(2)。

  使用Havok引擎的游戏大作在数量上与使用PhysX的不相上下,而且很多令人印象深刻:

  Unity3D物理与Havok物理的功能对比

  Unity3D集成的PhysX物理功能:

  Unity3D通过其提供的各种Component访问PhysX的物理功能,打开菜单栏中的Component->Physics便可以看到各种组件: