1,蓝图和c++
初次接触游戏引擎是从Unity开始的, 打算开始比较的学习虚幻4,发现同为U字辈的两个主流引擎,同为对象+组合模式的基础游戏框架, 虚幻4却难理解的多, 原因是之前对蓝图和GamePlay一直没有理解,导致虚幻4很难学的样子。
基本概念
要制作游戏, 开始总得把一个物体放入游戏场景
- Unity中, 物体是GameObject, 场景是Sence。
GameObjec可以理解成一个物体,一种最简单的资源, 能被放置, 我们往上挂不同的组件来实现不同的功能,每个组件其实就是C#写的一个脚本, 有官方写好的, 也有我们自己写的,被挂在GameObject上。简单理解就是资源上挂代码, 挂的代码是C#,我们要想写逻辑, 那就挂载一个C#脚本到GameObject上。 - 虚幻中, 物体是AActor, 场景是Level, 也叫关卡, 也叫Map。
这里和Unity有一个很大的区别,虚幻中Actor不是一个简单的物体,它本身就是一个复杂的类,本身就可以在里面写逻辑, 可以继承等, 也可以添加组件,每个组件可以用C++写, 也可以用蓝图脚本写。所以虚幻中是 代码上挂代码, 挂的代码是C++或者蓝图脚本,
什么是蓝图
平常最长混淆的是蓝图, 蓝图Actor(有人叫做蓝图类), 蓝图脚本
蓝图:
虚幻官方开发的一种图形化编程语言
蓝图Actor:
上文说过,Actor能放在场景中,而且本身就是C++代码,所以能继承,我们写一个类继承Actor,我们写的这个类就能放在场景中,而我们写代码方式有两种(C++或者蓝图),如果用蓝图写,那么这个就是蓝图类。其实叫做蓝图Actor更合适,就是因为叫蓝图类,导致我蒙圈了好久才搞清楚,此蓝图类特指用蓝图继承Actor
蓝图脚本:
Actor能挂组件,如果用蓝图来写这个组件, 这个组件就是蓝图脚本
所以可以这么理解, 虚幻开发游戏有两种语言,一种叫c++,一种叫蓝图,继承Actor的就叫xxxActor(有的人叫xxx类),可以被放置,继承其他UObject的就是xxx脚本,专门用来写组件或者写逻辑。
这里说一下,大部分都说蓝图不爽,代码量多了难以维护,写逻辑困难, 写个算法题就满屏飞线等,连连看编程有优势有劣势,讨论蓝图和其他非图形的编程语言没意义。要比也是和其他连连看编程语言比,比如和Unity的图形脚本, 和Godot的图形脚本。
逻辑写在哪
Unity和Godot中理解简单就简单在这, 是比较纯粹的组合架构,写逻辑,就是写脚本组件,Unity挂在GameObject上, Godot挂在节点上。而虚幻写逻辑, 你会发现两个地方,一是像Unity一样,写脚本组件,挂在Actor上,二是直接继承Actor在里面写逻辑。
她是一个半组合半继承的方式,写多了代码的很多人都感觉组合优于继承 能使思路更简单,大部分逻辑都是组合和组件,突然有一部分是继承关系来扩展逻辑,确实挺别扭,但是GamePlay框架即使继承来实现的,没办法,GamePlay框架基于继承所以略显复杂,也导致其很不灵活,不继承就用不了她的功能,继承了就把她所有功能都拿来了,尽管很多功能我并不需要,对喜欢代码干净看起来委实不爽,感觉这也是虚幻引擎成型太早,GamePlay早已固化在引擎里,所以组件化的并没有很彻底。