本文主要介绍如何在虚幻引擎4(UE4)中编写c 代码。虚幻引擎中的C 编程十分有趣,入门也很简单!通常人们会认为虚幻C 是"辅助C ",因为虚幻有很多功能可以让所有人都能更简单地使用C 。
在开始之前,你必须已经对C 或另一种编程语言有所认知,我假设你已经有了一些C 经验,但如果您了解C#、Java或JavaScrip,也会发现有许多相似之处。
如果你完全没有编程经验,那就一目十行、囫囵吞枣的看过去就行了,做到不求甚解就ok。
在UE4中,你可以编写标准C 代码,接下来我们将详细介绍。
C 与蓝图UE4提供了两种创建新Gameplay元素的方法:C 和蓝图视觉脚本。程序员利用C 即可添加基础Gameplay系统,然后设计师可基于这些系统进行构建或利用这些系统为某个特定关卡或游戏本身创建自定义Gameplay。在这些情况下,C 程序员在文本编辑器(如Notepad )或IDE(通常是Microsoft Visual Studio或Apple Xcode)中工作,设计师则在UE4的蓝图编辑器中工作。
Gameplay API和框架类在这两个系统中都可以使用,可以单独使用,但组合使用,互补长短才能发挥出它们真正的作用。那么到底有何意义呢?这意味着,当程序员使用C 来创建Gameplay构建块,设计师利用这些块创建有趣的Gameplay时,引擎就能发挥最大作用。
言至于此,我们来看看C 程序员为设计师创建构建块的典型工作流程。在此情况下,我将创建一个类,稍后设计师或程序员可以通过蓝图扩展此类。在该类中,我将创建一些设计师可以设置的属性,并且我将根据这些属性派生新值。整个过程使用我们提供的工具和C 宏就可以完成,非常简单。
类向导首先,使用编辑器中的添加c 类来生成稍后将通过蓝图扩展的基本C 类。下图显示了向导的第一步,即创建新Actor。
选择基类
该流程中的第二步是告诉向导,您已经生成的类的名称。这是使用默认名称的第二步。
设置类名
选择创建类后,向导会生成文件,并打开你的开发环境,便于你开始编辑,下面是为生成的类定义。
头文件
类向导会生成你的类,并提供 BeginPlay 和 Tick 两个重载方法。BeginPlay 事件告诉你Actor以可运行状态进入了游戏。这是启动类Gameplay逻辑的好位置。Tick 每帧调用一次,使用自上次调用传递以来经过的时间。你可以在这里执行任何重复逻辑。但是,如果你不需要该功能,最好将其移除,这样对性能有益。如果将其移除,确保移除构造函数中指示应开始发生tick事件的相应性。下面的构造函数就包含所提及的行。
源文件
让属性出现在编辑器中创建类后,现在让我们创建一些设计师可以在虚幻编辑器中设置的属性。将属性公开给编辑器非常简单,只需要使用说明符 UPROPERTY 即可实现。你只需在属性声明的上一行加入 UPROPERTY(EditAnywhere) 即可,如以下类中所示。
将属性公开给编辑器
只要完成上述操作,即可在编辑器中编辑该值。还有更多方法可以控制编辑该值的方式和位置。方法是将更多信息传递到 UPROPERTY 说明符。例如,如果你想要m_totalDamage属性出现在包含相关属性的某个部分中,可以使用分类功能。具体请参见下面的属性声明
属性分类
当用户想要编辑该属性时,它现在会出现在"伤害(Damage)"标题下面,与你已经标记为此类别名称的任何其他属性在一起。这是将常用设置放在一起以供设计师编辑的好方法。
现在,让我们将同一个属性公开给蓝图。
可读可写标示
如你所见,有一个说明符可以让属性在蓝图图表中可供读写。有一个单独的说明符 BlueprintReadOnly,如果你希望属性在蓝图中被视为 常量,可以使用这个选项。
再继续以下部分前,我们来向该样本类添加几个属性。已经有一个属性可以控制该Actor将释放出的总伤害量,但让我们更进一步,让这个伤害随着时间而逐渐释放出来。下面的代码添加了一个可以由设计师设置的属性,以及一个对设计师可见但不能更改的属性。
只读标示
m_damageTimeInSeconds 是设计师可以修改的属性。m_damagePerSecond 属性的值使用设计师的设置计算得出(请参见下一节)。VisibleAnywhere 说明符将该属性标记为可见,但不可编辑。Transient 说明符意味着,它不会保存或从磁盘加载;它就是一个派生的非持久值,所以没有必要存储它。下图显示作为类默认值一部分的属性。
界面属性
为了按实例支持设计师设置属性,还会从给定对象的实例数据加载值。该数据在构造函数之后应用。你可以根据设计师设置值创建默认值,方法是钩入 PostInitProperties() 调用链中。下面示例展示了 m_totalDamage 和 m_damageTimeInSeconds 为设计师指定值的流程。尽管它们是设计师指定的,但你仍可以为它们提供合理的默认值,就像下述示例一样
设计师指定值之后回调方法
这里是添加了上述 PostInitProperties() 代码后的属性视图。
效果图
到目前为止,我们已经了解了c 对象初始化以及每一帧的接口,还有成员变量如何公开到虚幻编辑器,通过以上学习可以说已经成功入门虚幻c 了,加油!
,