1.先学C++,再学UE4:
我在学习UE4期间认识了许多毫无编程经验的同学,或者一些只有一丝丝其他编程语言经验的同学。对于他们来说学习C/C++是一件非常不友好的事情,C/C++的变态程度在众多编程语言当中不说数一数二也算鹤立鸡群。那么这样导致一个什么结果呢?学起来很难,甚至面向对象这四个字理解起来就已经要绞尽脑汁了,更不要说金字塔顶端的指针和引用了!然而过段时间当他们吭哧吭哧的学完C/C++的基础知识,学会了使用语法、类、对象、基本数据结构、逻辑控制、大概明白了指针和引用,满心欢喜的打开UE4模板工程的C++代码后,竟然发现:
“这是我学过的C/C++吗?为什么长得完全不一样!”
为什么长得完全不一样?当他们学习C/C++的时候,实际上每次都是从一张白纸开始写,自己定义头文件、自己写.cpp、变量、函数什么都是自己来。相信所有所有编程初学者第一次用代码在控制台打出“Hello World”的时候都是贼兴奋的,原来编程这么神奇,可以让我控制电脑!他们也一样,好不容易通过学习C/C++对编程有了一点兴趣,但在通过UE4创建一个C++类的时候这些兴趣就灰飞烟灭了。归根结底是一个问题:
“虚幻是个用C/C++写出来的游戏引擎”
什么是游戏引擎?老听说这那游戏是由虚幻4引擎打造,效果无敌,画面牛逼。引擎俩字听着挺高大上啊,但翻译成不太准确大白话就是:“虚幻引擎是一大堆代码,里面有一大大大堆的函数,有绘制图案的,有控制逻辑的,还有别的乱七八糟的。反正各种有的没的虚幻引擎都给你写好了,你按照自己的意思随便用一用就能做出个游戏了。”话里话外什么意思呢?虚幻引擎就是一个框架,框架的好处是用着方便,坏处也显而易见,你必须要守规矩。说回到刚才的话题,为什么长得完全不一样?因为虚幻引擎的代码有他自己的规矩!这就是为什么大家都用笔写字,但是王羲之只有一个。
所以最痛苦的阶段竟然不是从零开始学习C/C++,而是C/C++学的一知半解后再转学虚幻C/C++。为了不同平台的兼容性,虚幻引擎已经把C/C++完全魔改了。比如把C/C++里没有的“对象”这个东西整出来了,叫UObject。比如数据结构也不用你纠结用vector还是list了,现在叫TArray。总而言之你是在别人搭好的地基上盖楼,用的还都是别人提供好的材料。实际上学习的过程就是理解把这个引擎写出来的那些人的脑子里到底在想什么的过程,这个当然不简单了!
结论:
如果有比较好的面向对象编程基础,比如Java,比如C#,甚至有其他游戏引擎的经验,那我觉得可以先学C++再学UE4,最起码你可以很快的跳过Hello World这个阶段,并且在第一次看到UE4源码的时候有较大的生存几率。
2. 先学蓝图,学不学C++看心情
程序员肯定是推动科技进步的先锋,其中懒这个特质更是先锋中的先锋。蓝图是什么?要我说就是为了让程序员少写点代码存在的。以前没有可视化编辑器的时候游戏是怎么开发的呢?想象一下我想调整一个物体的位置或朝向我要一遍一遍的去代码里改,害不害怕?现在多脑残啊,编辑器里看一看,鼠标拖一拖,搞定!
实际上蓝图的功能已经足够强大了,如果你有时间去看一看虚幻官方的“内容示例”项目就会和我发出一样的感慨。并且使用蓝图有他的先天优势:非常友好的编辑器界面和五颜六色的节点,至少让你在连来连去的时候不那么枯燥,更重要的是能直观的看到预览效果。甚至有些部分例如材质系统,动画系统用蓝图调试是非常方便的。
当然,使用蓝图也有难以解决的问题,无论是虚幻编辑器本身存在的各式各样的小BUG,还是一些无法用蓝图访问的属性和函数,都是蓝图开发者和程序开发者之间的鸿沟。这个沟并不宽,但是很深,掉下去再爬上来还是挺费劲的。
其实有很多的项目是完全可以用纯蓝图开发的 - 如果你对性能要求没那么高的话,蓝图也能制作出足够惊艳的画面效果了。听起来好像和C++完全没关系了对吧!那么蓝图的正确用法是什么呢?就像刚才讲到的,程序员都很懒,所以实际上蓝图是为设计师提供的,只有蓝图和C++配合使用才能最大化开发效率。有些逻辑用代码写很快,用蓝图连线很麻烦,有些东西用蓝图调很方便,用代码调会要命,同时虚幻引擎为代码和蓝图的通讯提供了非常好的支持,这两样东西是可以无缝结合在一起的。
所以为什么说蓝图能让程序员少写点代码这句话现在就可以理解了,我把核心用代码封装好,暴露给蓝图一个接口,设计师负责在合适的时候调用这个接口,代码负责执行并且返回结果就行了。更形象一点,代码更像是乐高中的各种积木,方的,圆的,长的,短的,蓝图更像是把这些积木组合成一辆车或一艘船。
结论:
如果你对代码一窍不通,或者是初学游戏的新手,可以从学习蓝图开始。虽然蓝图编辑器的界面看起来非常复杂,但是其实用很少的部分就能做出一个比较完整的演示作品。
3. 你还是逃不过C++
非常不幸,你最终还是逃不过C++的魔爪。蓝图再厉害,它也是脚本生成的,最终还是要回归到本质,那就是代码。蓝图有的东西,代码里都有,反过来可就不一定了。而且,想要深入的了解引擎的世界观和工作原理,蓝图可是无法告诉你这些东西的。所以,少年,和我一起努力吧!
不过好消息是,如果你蓝图玩的足够溜,代码还是不那么那么难看懂的。
一个虚幻引擎彩笔的心路历程[0]