我是虚幻引擎的新手,正在研究游戏领域的 C++ 开发。现在我读了一个教程,我应该创建一个 AMyPawn 和 UPawnMovementComponent 来附加它。
这是从 APawn 派生的类的定义,我想为它添加一些属性,就像我们在 UE 中通常做的那样
UCLASS()
class V4_FYRSTI_API AMyPawn : public APawn
{
GENERATED_BODY()
public:
// Sets default values for this pawn's properties
AMyPawn();
UPROPERTY(EditAnyWhere)
class UCustomMovementComponent* Movement; // class KeyWord + Type + varName
UPROPERTY()
class UParticleSystemComponent* ParticleComp; // class KeyWord + Type + varName
UPROPERTY()
UStaticMeshComponent* VisualMesh; // Just Type + varName
virtual UPawnMovementComponent* GetMovementComponent() const override;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
我发现很有趣的是,我应该通过类型词和变量名来声明 StaticMesh 实例,但是粒子或运动组件的另一个字段我必须在开头添加“class”关键字,为什么?
我认为它可能与“类引用变量”有关,因为我们有“对象引用变量”,但是当我尝试将“class”关键字添加到另一个字段时,它根本不会带来任何变化或使项目崩溃。
在 99.999% 的情况下,不需要
class
关键字。但是 C++ 继承了 C 的一个“功能”,其中类和结构标记名称放置在它们自己的命名空间中(这与 C++ namespace
不同),因此您可以拥有一个名为 Foo
的类,但也可以拥有一个变量名为Foo
。然后你需要区分类和变量,这是通过在声明中添加 class
关键字来完成的。
举个例子:
class Foo { ... };
int main()
{
int Foo = 5; // Declare a variable of type int, named Foo
class Foo bar; // Declare a variable of type class Foo, named bar
}