借题《黑神话悟空》,聊聊UE5 游戏开发中基本的 C++ 概念

news2024/11/13 9:30:31

最近火的一塌糊涂的《黑神话悟空》就是用UE5引擎开发的。借题发挥,今天讲讲UE游戏开中的一些C++基本概念;

编写代码与蓝图(可视化脚本)相结合具有独特的功能,您需要利用这些功能来实现两全其美。编程可以帮助创建更复杂的游戏机制,因此成为一名高级 C++ 程序员是任何认真的独立游戏开发人员的必备条件。

wk


何时使用 C++ 编程而不是虚幻的可视化编辑器进行游戏开发?

  • 涉及关键性能需求
    • C++ 通常比蓝图更快。如果游戏中有对性能至关重要的部分,例如复杂的 AI 计算或密集的物理模拟,那么用C++编写它们可以产生更好的性能。
  • 扩展引擎
    • 目前UE是开源的,只要不是开发商业化的游戏,他就是完全免费的,如果您需要修改或扩展虚幻引擎本身的功能,则需要使用 C++
  • 自定义插件
    • 开发自定义插件或集成第三方库通常需要 C++ 编程。
  • 项目结构
    • 如果你是一个大型团队在使用UE开发,那么C++ 更易于管理。它允许更好的源代码控制、代码审查和高级调试。
  • 细粒度控制
    • C++ 提供了对硬件和系统资源的更多控制,这对于优化游戏的某些方面至关重要。

何时使用虚幻引擎 5 可视化脚本(蓝图)?

  • 快速原型制作
    • 蓝图非常适合快速测试想法和机制,而无需深入研究代码。
  • 设计师和非程序员
    • 可视化脚本允许设计师和其他非编程团队成员实现游戏逻辑、创建交互元素并调整游戏玩法,而无需编写代码。
  • 视觉反馈
    • 蓝图提供即时视觉反馈,使调试和理解游戏逻辑流程变得更加容易。
  • 特定的游戏机制
    • 对于许多标准游戏机制,蓝图可能就足够了,不会造成任何明显的性能影响。

总的来说,使用C++和蓝图都各有优点且不冲突,许多成功的游戏在开发中都结合了两种方式,利用C++作为核心和性能的关键部分,使用蓝图实现游戏机制、关卡和交互等。


如何配合蓝图使用C++进行游戏开发呢?

  1. 基础类模型

​ 首先在 C++ 中设置基础类和结构。这些类可以定义核心行为和属性,但为蓝图中的扩展和自定义留出空间。比如你可以在 C++ 中拥有一个具有生命值、速度和伤害等属性的基本敌人类。这个类可以处理基本的AI运动和攻击逻辑。然而,特定的敌人类型(例如,近战敌人、远程敌人、飞行敌人)可以在蓝图中导出,您可以在其中微调他们的行为并引入独特的能力。

  1. 开放函数给蓝图

​ 使用 Unreal 的宏系统向蓝图公开特定的 C++ 函数。这允许非程序员使用和扩展复杂的逻辑,而无需深入研究代码。象一下用 C++ 实现的复杂寻路算法。您可以向蓝图公开FindPathToTarget()等函数。这样,关卡设计师就可以在蓝图脚本中使用此函数使 NPC 移动到目标位置,而无需了解复杂的寻路逻辑。

  1. 性能优化

    对于性能关键部分,将逻辑从蓝图转移到 C++。这对于需要大量计算的力学尤其有价值。基于各种参数计算天气模式的动态天气系统在蓝图中可能太慢。将此系统移至 C++ 可以优化其性能。

  2. 扩展插件

    如果你正在开发一款包含大量基于物理的谜题的游戏,您可以编写一个 C++ 插件,引入新的蓝图节点以进行高级物理计算或交互,从而使设计人员更轻松地实现这些谜题。

  3. 迭代开发

    使用蓝图进行快速原型设计,尤其是游戏机制。一旦机制感觉正确,请考虑将其转移到 C++ 进行优化。开发复杂的战斗系统时,从蓝图开始快速测试不同的能力、组合和交互。一旦战斗感觉引人入胜且平衡,请将一些密集计算或系统转移到 C++ 以获得更好的性能。

  4. C++中的数据处理

​ 复杂的数据结构、文件处理或与外部数据库或服务的交互通常可以在 C++ 中更有效地管理。如果你的游戏有一个制作系统,玩家可以根据配方组合物品,您可以将这些配方存储在外部文件或数据库中。 C++ 可以有效地读取、解析和管理这些数据,而蓝图则处理制作 UI 和玩家交互。


一个简单的示例:C++ 创建一个类,然后初始化一个对象并运行一个方法

  • 类定义

    首先,我们将定义一个名为Car简单类。这个类将有一个私有成员变量来存储汽车的颜色和一个公共方法来驾驶汽车。

    class Car {
    private:
        std::string color;
    
    public:
        // Constructor to initialize the car's color
        Car(std::string carColor) {
            color = carColor;
        }
    
        // Method to drive the car
        void drive() {
            std::cout << "The " << color << " car is driving!" << std::endl;
        }
    };
    
    • 创建类对象

    接下来,创建Car类的对象(或实例)。制造一辆红色汽车。

    Car myCar("red")
    
    • 调用对象方法

    现在,调用myCar对象的drive方法。

    myCar.drive();
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevEcoStudio启动模拟器提示未开启Hyper-V

处理方式&#xff1a;&#xff08;win11专业版系统&#xff09; 勾选Hyper-V。 如果提示无法安装Hyper-v&#xff1a;该固件中的虚拟化支持被禁用。如下图&#xff1a; 需要进入BIOS启用虚拟化技术。 这个根据电脑主板不一样&#xff0c;操作方法不同&#xff0c;请自行搜索处…

LCD模组驱动开发

Linux 5.15 内核适配 驱动勾选 由于使用的是 SPI0&#xff0c;所以 TinyVision 的 LCD 模块并不支持使用MIPI-DBI进行驱动&#xff0c;这里我们使用普通的SPI模拟时序。 勾选 SPI 驱动 这里我们使用 SPI-NG 驱动&#xff0c;勾选 <*> SPI NG Driver Support for Allw…

Apifox测试SOAP接口教程

文章目录 I 请求webservice接口使用Apifox测试工具来测试soap接口配合Charles测试soap接口(前提:允许使用系统代理)使用hutool的SoapClient调用soap接口II 扩展知识webService三要素SOAP消息组成(SOAP请求消息的格式)浏览器访问暴露出的soap接口需求: AIS数据对接给其他平…

画板555

p41 这两个地 都是 板框这里按 Q可以改单位放置在原点p42 布局 和原理图一样都是 模块化 布局 (一样的放一起)原理图中选中 PCB里也会选中位号 布局时 一般放在中间因为在别的地可能会影响布局全选后 布局里的属性位置不用全选也行点击查找全部 就选上了 能看到就行板框确定好…

leetcode47. 全排列 II有重复元素的全排列,深度优先搜索

leetcode47. 全排列 II/有重复元素的全排列 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff1a; 输入&#xff1a;…

【数据结构4】树的实例-模拟文件系统、二叉树的遍历(先序遍历、中序遍历、后序遍历、层次遍历)

1 树和二叉树 2 树的实例-模拟文件系统 3 二叉树 3.1 二叉树的遍历 二叉树的先序遍历 二叉树的中序遍历 二叉树的后序遍历 二叉树的层次遍历 1 树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构树是由n个节点组成的集合:如果n0&#xff0c;那这是一棵空树;如…

测试用例(还需要输入1个字)

近期机缘巧合&#xff0c;连续写2个项目的测试用例。第一个项目&#xff0c;纯属没有办法&#xff0c;参与该项目的现在就只剩我一个人了&#xff0c;只能自己写了&#xff0c;这不&#xff0c;我专门跑到客户那啥都不干&#xff0c;写文档写了2天&#xff1b;第二个项目&#…

如何使用gewe开发微信机器人

本文介绍了如何利用GeWe框架开发一个功能丰富的微信智能机器人。GeWe是一个开发协议&#xff0c;为微信机器人提供了强大的功能支持&#xff0c;包括关键字回复、自动通过好友和自动发朋友圈等特性。我们将通过一个简单的示例演示如何在GeWe框架下实现这些功能&#xff0c;并附…

模型 空雨伞

列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。观察现状&#xff0c;分析原因&#xff0c;制定行动。 1 空雨伞模型的应用 1.1 空雨伞模型应用之API对接的决策 某公司产品经理A君接到了与合作方对接API的任务。合作方对公司的中台API有特定的需求&…

有什么办法能恢复郎科u盘的数据?常用方法分享

在数字化时代&#xff0c;数据已成为我们生活与工作中不可或缺的一部分。郎科U盘&#xff0c;以其便携、稳定的特性&#xff0c;成为了许多人存储重要文件的首选。然而&#xff0c;面对突如其来的数据丢失&#xff0c;无论是误删、格式化还是病毒侵袭等&#xff0c;都足以让人心…

【Qt】常见控件 —— QWidget(上)

文章目录 QWidget 的基本介绍QWidget 的 enable 属性QWidget 的 geometry属性QWidget 的 windowTitle属性 QWidget 的基本介绍 Qt 中 的 各种控件 都继承自 QWidget类 在 Qt designer 右侧 就显示出 QWidget的各种属性 并且也可以直接进行编辑 QWidget 的 enable 属性 enable…

ETAS工具链自动化实战指南<二>

----自动化不仅是一种技术&#xff0c;更是一种思维方式&#xff0c;它将帮助我们在快节奏的工作环境中保持领先&#xff01; 目录 往期推荐 RTA-A2L工具概览 RTA-A2L的输出文件 常用命令行参数 场景1&#xff1a;通过 MCSD 文件来生成 .a2l 文件并更新地址 命令用法 命…

getchar(),putchar(),EOF的详细解释

文章目录 getchar(),putchar(),EOF的意义和作用一、相关函数putchar( )getchar&#xff08;&#xff09; 二、EOF 的值三、总结 getchar(),putchar(),EOF的意义和作用 在 C 语言中&#xff0c;EOF 是 End Of File 的缩写&#xff0c;即文件结束标志。 在读取文件时&#xff0…

趣味算法------饮料换购

目录 题目描述&#xff1a; 解题思路&#xff1a; 具体代码&#xff1a; C语言版本&#xff1a; python版本&#xff1a; 题目描述&#xff1a; 乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料&#xff0c;凭3个瓶盖可以再换一瓶C型饮料&#xff0c;并且可以…

SCI论文系统各阶段状态含义,一文带你全面掌握!告别投稿小白!

知识小站 SCI&#xff08;Science Citation Index&#xff0c;科学引文索引&#xff09;是由美国科学信息研究所&#xff08;Institute for Scientific Information, ISI&#xff09;创建的一个引文数据库。它收录了全球各学科领域中最具影响力的学术期刊&#xff0c;涵盖自然…

尝试给OpenHarmony4.0增加可以在动态库中使用的日志模块

尝试给OpenHarmony4.0增加可以在动态库中使用的日志模块 前言一、资源来源二、实践步骤1.修改OH内核并编译2.动态库增加welog打印3.设备验证打完收工 总结参考 前言 最近在搞OpenHarmony4.0蓝牙模块的适配&#xff0c;最主要的工作就是在libbt_vendor.z.so这个库的编写修改&am…

文件找回用哪个数据恢复软件好?最佳文件恢复软件值得拥有!

在如今数字化的时代&#xff0c;文件已经成为我们工作和生活中不可或缺的重要组成部分。然而&#xff0c;由于各种意外情况&#xff0c;如误删除、系统故障、病毒攻击或存储设备损坏等&#xff0c;文件丢失的情况时有发生。当这种情况发生时&#xff0c;一款出色的数据恢复软件…

解锁SQL的无限可能 | 且看如何秒解墨天轮SQL挑战赛第二期题目

目 录 墨天轮SQL挑战赛第二期 比赛题目 数据准备 解题过程 方法1: 优雅的解法 | last_value分析函数忽略NULL值特性实现 方法2: 通用的解法 | 断点分组思想 小结 Sql进阶技巧&#xff1a; 如何分析商品入库采购成本数据缺失问题&#xff1f;| 近距离有效的数据缺失值…

jvm 调优篇

一 jvm调优篇 1.1 查看新生代和老年代的比例 输入命令&#xff1a; jinfo -flag NewRatio 17480 1.2 查看新生代&#xff0c;survivor和Eden区比例 1.3 查看jvm调优参数 二 调优参数 2.1 oom异常 通过visual vm查看 2.java dump 大对象 2.2 mat工具进行分析 栈的信息

生物信息学数据分析服务

常见个性化分析列表 GEO相关服务 1&#xff0c;芯片数据挖掘。根据芯片类型&#xff0c;计算表达谱&#xff0c;差异基因等 2&#xff0c;高通量测序数据挖掘。根据测序类型&#xff0c;计算表达谱&#xff0c;差异或者peak calling等 3&#xff0c;多组学数据联合分析 4&…