2

再会!我是使用虚幻引擎 4的新手,我对蓝图的工作原理有几个疑问。根据我的理解,每个蓝图都像一个 班级一样工作。我的意思是一个蓝图很像OOP 编程语言中的一个类

请教育我 - 如果我的假设是正确的或错误的。如果错了,那么也许你可以帮助我以不同的方法/视角实现我想要的。我愿意学习并接受建议。

如果在某些时候我的理解是正确的——蓝图实际上是单独的类——如果你能()指导去哪里以及如何实现我想要创建的设计,我将不胜感激。这是从程序员的角度来看的(PHP OOP 编程)。原谅这种方法,我只是使用 PHP 来逻辑地表达我希望该类如何工作。另外,它是我在 atm 知道的唯一 OOP 编程。


  1. 我想创建一个名为:Items的类。 class Item {}

  2. 这个类将处理与项目相关的所有内容,因此我们必须给它很多属性/变量。(以下只是一个示例;我再次使用 PHP 作为示例。)

    class Item {

        var $id;
        var $name;
        var $description;
        var $type;
        var $subType;
        var $mesh;
        var $materials; 
    

    }

3.) 我想通过将两个变量作为其构造参数来启动此类。(我们需要itemIDitemType)。这是因为我将使用这两个变量来检索数据表中已经存在的项目数据。我将使用表中的这些数据来填充类属性/变量。(我不确定我说的对不对。我希望你能理解我的意思。)

   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++,我很想学习它,但我现在没有时间自由。

我试图让它发挥作用的几件事:

  • 投射/投射到类(但我无法弄清楚目标对象将是什么以及我将如何将输入参数添加到类中?那里没有我可以使用的任何输入。)
  • Spawn Actor(这个很有前途,我需要深入挖掘)
  • 蓝图宏?蓝图接口?(我只是迷路了。)

对于所有愿意帮助或回答的人。谢谢!

〜克里斯

4

1 回答 1

2

据我所知,的,我们可以假设每个蓝图都可以视为类。(此外,由于 UE 4.12(我认为在 UE 4.11 中该功能被标记为实验性),您可以在Project settings -> Packaging下检查Compile blueprints。这将为每个蓝图创建本机类。)

您可以基于Object( C++ 中的UObject )创建蓝图或 C++ 类。然后您可以指定所有属性(或 UE 编辑器术语中的变量)。在 BP 中,您有一个小优势:您可以在生成时将某些属性标记为可见(它们必须是公共和可见的)。因此,当您创建该类的新实例时,您可以显式地将值传递给该属性。在 BP Construct事件中,该属性已正确填充,因此您可以根据给定的IDType设置另一个属性值。

在 C++ 类中,具有与FObjectInitializer不同的参数是不可能的,因此在执行构造函数时您没有及时获得该值。但是实现相同的功能并不难,您可以在此处找到示例:https ://answers.unrealengine.com/questions/156055/passing-arguments-to-constructors-in-ue4.html 。

关于您尝试过的内容的清单:

  • Spawn actor - 仅当您打算在场景中拥有该 BP 时才从 actor 派生。Actor 是游戏更新和渲染的主体,因此仅将 Actor 作为数据容器是非常错误的。
  • BP与 BP函数相同,除了函数将像函数一样被调用(因此通过函数调用约定执行必要的操作)并且将替换它的实现,您正在调用该宏。更详尽的解释在这里
  • 如果我要实现你的代码,我会像我说的那样做,然后我会将该类作为某个组件中的属性,并且该组件将附加到某个演员,该演员将被放置在场景中。
于 2016-07-03T17:08:38.743 回答