如何在c++;宏 >我想使用C++宏创建的项目: #define PROPERTIES\ UPROPERTY(blabla)\ variableType varName;\ UPROPERTY(blabla)\ variableType2 varName2; UCLASS(BlueprintType) class UMyProps : public UObject { // TODO define properties in a standard way } // some actor's properties UPROPERTY(BlueprintReadWrite, Category = "My Game | My Subcategory") UMyProps* myProperties;
因此,我可以将属性添加到其他文件中,包括此文件,并对其使用properties宏如何在c++;宏 >我想使用C++宏创建的项目: #define PROPERTIES\ UPROPERTY(blabla)\ variableType varName;\ UPROPERTY(blabla)\ variableType2 varName2; UCLASS(BlueprintType) class UMyProps : public UObject { // TODO define properties in a standard way } // some actor's properties UPROPERTY(BlueprintReadWrite, Category = "My Game | My Subcategory") UMyProps* myProperties;,c++,properties,macros,unreal-engine4,C++,Properties,Macros,Unreal Engine4,因此,我可以将属性添加到其他文件中,包括此文件,并对其使用properties宏 class XYZ... { ... public: PROPERTIES ... UPROPERTY() varibleType3 name3; .... } 此设计来自一个典型的组织,其中这些参数来自另一个类,因为它们与该类相关 因此,我可以包含不同的文件,并包含要在编辑器中显示的所有属性 发生的事情是,不真实的标题工具完全忽略了Upperty
class XYZ...
{
...
public:
PROPERTIES
...
UPROPERTY()
varibleType3 name3;
....
}
此设计来自一个典型的组织,其中这些参数来自另一个类,因为它们与该类相关
因此,我可以包含不同的文件,并包含要在编辑器中显示的所有属性
发生的事情是,不真实的标题工具完全忽略了Upperty,当然,可能是因为它在宏之前被处理,然后被宏。。。令人惊讶的是,这是有效的,但只有变量,而不是连根拔起。。。所以编辑没有显示它
有什么想法吗?您确定您的属性定义正确吗?当向编辑器公开函数或属性时,应该使用类似于
upperty(EditAnywhere,Category=“My Category”)
的内容。带有此宏的属性将公开给实例属性编辑器和类默认值编辑器
我还想指出,这种设计真的很糟糕,我想你可能会有问题。正如您正确指出的,Epic具有自定义反射系统(UHT),它允许您使用GC等自动内存管理。更多关于构建系统的信息
我认为你应该决定如何使用这些财产。由于要将它们分布到多个参与者上,因此可以从以下选项中进行选择:
#define PROPERTIES\
UPROPERTY(blabla)\
variableType varName;\
UPROPERTY(blabla)\
variableType2 varName2;
UCLASS(BlueprintType)
class UMyProps : public UObject
{
// TODO define properties in a standard way
}
// some actor's properties
UPROPERTY(BlueprintReadWrite, Category = "My Game | My Subcategory")
UMyProps* myProperties;
第二个系统的主要优点是,您可以向需要属性集的对象添加属性集,同时具有类型安全环境和完全智能支持(当然还有UE编辑器)
或者您可以使用组件,这或多或少类似于第二种方法,但它可以是完全动态的(您不需要实际引用您的组件,您可以通过调用GetComponent(…)
)来获得它)
这三种方法都是扩展对象属性的良好、可靠和透明的方法。通过使用宏的方法,您可能会很容易地陷入堆积如山的混乱,如果这甚至可以与UE构建系统一起工作的话 谢谢你的相关信息,帕维尔。让我解释一下:使用宏包含变量似乎是一种非常常见的方法。一位经验丰富的程序员告诉我这样做。不过,这在《虚幻》中可能是错误的。我们认为可能在使用PROPERTIES宏之前,Unreal Header工具修改了Upperty宏。这就是为什么我们认为UHT可能破坏了属性宏的代码。我不知道我可以使用“UCLASS”来包含属性。我开始使用struct,因为我把它放在一个已经存在的类中,作为一个补充。我来测试一下it@darkgaze您需要指定
UCLASS
或USTRUCT
,以便UHT可以找到class
或struct
。你需要正确的使用<代码> UTrime<代码> >()同样的MeChanistic也适用于<代码> uStult<代码>(如果你想使用C++引入的委托,你可以只添加代码<代码UnType())/CUT>(继续)@暗视(继续)(参见)。但是,如果您想从Blueprint调用某个函数,则需要像uffunction(BlueprintCallable,Category=“MyCategory”)那样对其进行标记
。一旦你熟悉了这个概念,扩展你的代码并向蓝图展示新事物将变得非常简单。谢谢Pavel。我们不使用蓝图。我们的功能非常低,现在我们不喜欢视觉表现。顺便说一句,与告诉我这样做的人进行了核实。他说你的想法好得多,没有虽然宏的东西很常见,但它不像结构/类解决方案那样干净。:-)欢迎您。我很高兴听到一个有经验的家伙的称赞,因为我自己都学会了游戏编程,我知道有很多好东西和游戏开发实践我都不知道。