虚幻引擎:是否可以主要使用C++/脚本而不是蓝图来完成?
Unreal Engine: Can it be done primarily with C++/scripting instead of Blueprints?
我正在考虑游戏引擎的选择。我做了双摇杆射击教程。最让我沮丧的是,大多数编程都是在蓝图中完成的,这是丑陋的(这里很主观,但不会持续很长时间)图形编程。游戏的整个逻辑都是用盒子完成的......我觉得这太可怕了!我甚至逃离了Qt Designer,用纯粹的编码和布局来设计我的GUI。
回到客观上,问题是"双摇杆射击游戏"是一款非常简单的游戏。然而,最后的图表非常复杂和大。如果没有问题,我发现这很难维护,例如使用 git 或任何其他版本控制工具跟踪随时间推移的变化。与C++不同,维护大型代码是一个非常古老的问题,可以通过多种方式解决,版本控制系统可以很好地使用它。
我的问题是:教程中的同一游戏(或任何一般游戏)是否可以使用部署在C++中的所有逻辑(或可能少于 5% 的蓝图)来完成,而不是将其全部部署在蓝图图中(如双摇杆射击游戏)?鉴于我不是虚幻引擎方面的专家,我认为专家对这个问题有一个很好的回答,他可以解释纯粹用C++可以做什么和不能做什么,以及为什么这样做是好是坏。
根据我对UE4的经验,我会回答:是的。
主蓝图节点和对象是使用C++创建的,通常可通过C++引擎 API 访问。事实上C++版本的BP节点通常使用起来更复杂(即具有更多可能的参数)。
我个人发现,游戏的任何重要方面,如网络、UI、游戏逻辑和关卡过渡都可以在C++完成。
(...)以及为什么这样做是好是坏。
UE4的创建者表示,蓝图系统的开发是为了帮助美术师和非开发者使用引擎。蓝图系统在游戏逻辑原型制作中也非常有用。
由于蓝图的弹性和创建时间,许多开发人员(包括我自己)决定使用混合方法,当你在C++中创建低级、复杂或昂贵的代码并将其API公开给蓝图系统时。它有助于将核心代码与高级函数分开,高级函数是许多更改和调整的主题(优点:BP更容易调试,编译时间要快得多)。
我发现混合 BP 和 C++ 的一个困难是在C++此处讨论更详细的代码中使用 BP 类的问题。
如果没有问题,我发现这很难维护,例如使用 git 或任何其他版本控制工具跟踪随时间推移的变化。
UE4有蓝图合并工具,但我从未使用过它。
从一个拥有 20 年C++经验但只有几个月 UE4 实践的程序员的角度来看......我会说是的,但不要。
我同意你关于蓝图的看法 - 需要一两行代码的简单操作需要五到六个蓝图节点,而作为程序员,它更难阅读。 你可以用虚幻引擎做任何C++的事情。但是你必须学习和使用现有的引擎代码语料库,而虚幻是一个复杂而强大的野兽。即使有多年的C++经验,我发现做简单的事情真的很困难,因为引擎要求以某种方式完成它们。
老实说,对于像双摇杆射击游戏这样的东西,我完全推荐Unity。
我不知道你提到的游戏,但一个主要在蓝图中开发的项目是一场噩梦,除非我们谈论的是非常简单的东西。如果你C++足够流利,就没有理由不选择这种方式。
但是,大多数时候,您都想在蓝图中执行一些操作,例如UMG控件,Ai(行为树和黑板)等。
- 如何通过cpp程序运行shell脚本
- 在程序中编写脚本来编写和编译代码
- 如何在c++中使用system()来运行包含空格的python脚本
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 在原子中使用犰狳与脚本
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- CANoe - 无法在 CAPL 脚本中打开.dll
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 将数组/向量发送到 c++ 脚本的 cython 示例
- 脚本的多重定义::LState
- 从C++应用获取PowerShell脚本输出
- 用户控制从 c++ 到 java 脚本的 Webassembly 访问调用
- 使用 Main() 返回值作为 python 脚本的参数
- 如何从测试脚本中运行WAF编译C++程序?
- bash脚本在使用popen()时不返回代码以调用C ++程序
- 如何注册枚举类型到QJSEngine,以便在脚本环境中使用?
- FindPOCO CMAKE 脚本无法找到 MYSQL::client