大家好!我是使用虚幻引擎4的新手,我有一些关于蓝图如何工作的问题。从我的理解来看,每个蓝图都像一个类。我的意思是,一个蓝图很像OOP编程语言中的一个类。
请告诉我,我的假设是对的还是错的。如果错了,那么也许你可以用不同的方法/角度帮助我实现我想要的。我愿意学习和接受建议。如果在某种程度上我的理解是正确的- 蓝图实际上是单独的类 -我真的很感激,如果你能(请)指导去哪里,如何实现我想要创建的设计。这是从程序员的角度来看的(PHP OOP Programming)。请原谅这种方法,我只是使用PHP来逻辑地表达我希望类如何工作。另外,它是目前我所知道的唯一的面向对象编程。
我想创建一个类:Items。
class Item {}
这个类将处理所有相关的项目,因此我们将不得不给它很多属性/变量。(下面只是一个例子;我还是以PHP为例。)
class Item {
var $id; var $name; var $description; var $type; var $subType; var $mesh; var $materials;
}
3)。我想通过使用两个变量作为其构造参数来启动这个类。(我们需要itemID和itemType)。这是因为我将使用这两个变量来检索项目的数据,这些数据已经在数据表中可用。我将使用表中的这些数据填充类属性/变量。我不确定我说的对不对。我希望你明白我的意思。
class Item {
var $id;
var $name;
var $description;
var $type;
var $subType;
var $mesh;
var $materials;
function _construct($cons_itemID, $cons_itemType) {
/*-- Start getting the item Data here based on what item and type provided. Then, push that data into the class properties/variables. We will use individual methods/functions to fill other properties/variables later. --*/
}
}
4)。基本上,通过这种设计,我可以轻松地将项目ID传递给类,然后使用指针获得项目的名称,描述,网格,材料等。
的例子:
$weapon = new Item('10001','Weapon');
$weaponMesh = $weapon->getMesh();
$armor = new Item('12345','Armor');
$armorName = $armor->getName();
我只是在使用蓝图和实现这种方法甚至类似的方法时遇到了很多麻烦。我并不是想回避c++,我很想学习它,只是我现在没有时间。
我试着做了几件事:
- 转换/转换到类(但我无法弄清楚目标对象将是什么和我如何将输入参数添加到类中?这里没有任何我可以使用的输入)
- 刷出演员(这是非常有前途的,我需要深入挖掘这个)
- 蓝图宏?蓝图接口?(我只是迷路了。)
对于那些将帮助或回答。谢谢你!
克里斯~
据我所知,是,我们可以假设每个蓝图都可以被视为一个类。(此外,由于UE 4.12(在UE 4.11中,该功能被标记为实验性),您可以在项目设置 -> 包装下检查编译蓝图。它将为每个蓝图创建原生类。)
可以基于Object (c++中的UObject)创建Blueprint或c++类。然后,您可以指定所有属性(或UE编辑器术语中的变量)。在BP你有一个小的优势:你可以标记一些属性为可见在刷出(他们必须是公共和可见的)。当你创建那个类的新实例时,你可以显式地将值传递给那个属性。在BP Construct事件中,该属性被正确填充,因此您可以根据给定的ID和类型设置其他属性值。
在c++类中,与具有不同参数的FObjectInitializer是不可能的,因此当构造函数执行时,您无法及时获得这些值。但是实现相同的功能并不难,您可以在这里找到示例:https://answers.unrealengine.com/questions/156055/passing-arguments-to-constructors-in-ue4.html.
关于你尝试过的东西的列表:
- 生成actor -只有当你打算在场景中有BP时才从actor中派生。演员是游戏更新和渲染的对象,所以将演员仅作为数据容器是非常错误的。
- BP Macro与BP Function相同,除了 Function将像函数一样被调用(因此通过函数调用约定执行必要的操作),而 Macro将在调用该宏的地方替换它的实现。
- 如果我要实现你的代码,我会像我说的那样做,然后我将这个类作为属性在一些组件中,该组件将附加到一些演员,这将被放置在场景中。