忍者ブログ

非現実的な話

ゲーム、UnrealEngine4などの話題を取り扱います。取り扱う内容は個人の範囲で調べたものなのでご利用は自己責任でお願いします。

【UE4】コンストラクタの件

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

【UE4】コンストラクタの件

年始めということでUE4のC++におけるコンストラクタについて。

[参考ページ]
公式ドキュメント

↑を見れば分かるが、UE4の場合コンストラクタは大体以下のフォーマットで定義をする。

******************************************************************************************************
(1) コンストラクタのフォーマット
******************************************************************************************************
ClassName::ClassName(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
}
******************************************************************************************************

Ver4.6以前では「FPostContructInitializeProperties」と書いていた箇所が、Ver4.6からFObjectInitializer」に変更となっている(FPostContructInitializePropertiesクラスを廃止)。

以上、終了。
で、例えばシューティングゲームを作る場合、「弾クラス(BulletBaseクラス)」なるものを作る必要がある。上記を例に作成するとこうなる。

******************************************************************************************************
(2) 弾クラスのフォーマット
******************************************************************************************************
ABulletBase::ABulletBase(const class FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
Velocity = FVector(1.f, 0.f, 0.f);
Tags.Add(FName("Bullet"));
MovementComp = ObjectInitializer.CreateDefaultSubobject<UProjectileMovementComponent>(this, TEXT("ProjectileComp"));
MovementComp->InitialSpeed = 3000.f;
MovementComp->MaxSpeed = 3000.f;
MovementComp->ProjectileGravityScale = 0.f;
MovementComp->SetVelocityInLocalSpace(Velocity);
}
******************************************************************************************************

上記では速度やら重力やらなんやらを設定しているが、
ここで気になったのが「FObjectInitializer」の存在。
「FObjectInitializer」から「UProjectileMovementComponent」を作成しているが、こいつはいったい何者なのか調べてみたら・・・
「UObjectクラスの後に作成されるクラスで、コンストラクタでUObjectクラスから派生するクラスに対するアクションを行う場合に使用するもの」のようだ。上記の(2)では、コンストラクタ内でオブジェクトに対するアクションとしてProjectileMovementComponentを作成している。

エディタからコードを作成する場合、コンストラクタはデフォルトで定義されていないため、コンストラクタを作成する必要がある場合は、上記のフォーマットに沿って書く必要があるようだ。


・メモ
AActorクラスを継承した独自クラスでTickを作成したが、動作(処理)しなかった。結果、「PrimaryActorTick.bCanEverTick = true;」を定義したところ、動作することが判明。
Blueprintでは「EventTick」と書くだけで良いが、C++では上記の1行を追加する、もう一手間が必要だ。

コメント

プロフィール

UnrealEngine4について調べる。
ゲームはそんなに得意ではない。

ブログ内検索

カレンダー

11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

リンク

  • [PR]
    PR