雑記
Actor
SpawnActor
時にBeginPlay
が呼ばれるUGameplayStatics::BeginDeferredActorSpawnFromClass
~UGameplayStatics::FinishSpawningActor
はFinishSpawningActor
時に呼ばれる
UProjectileMovementComponent
- オブジェクトプーリング時の注意点
InitializeComponent
は一度しか呼んではいけない、呼ぶとクラッシュする- 移動方向の
Velocity
を直接初期化する
- ホーミングについて
- ターゲット方向に向かって加速する
- ホーミングさせようと数値を大きくすると、ホーミング無しの時と速度差が大きくなるため違和感がでる
- 一定速度のホーミング
- 自前で
Velocity
を計算する
- 自前で
- ターゲット方向に向かって加速する
ラムダ式
キャプチャについて
コーディング規約にある内容で注意すること
ポインタの by-reference キャプチャと by-value キャプチャ (this ポインタを含む) は、lambda がキャプチャーした変数のコンテキスト外で実行されると間違ったダングリング参照の原因になることがあります。
間違ってキャプチャーした UObject ポインタは、ガーベジ コレクターからは見えません。
[=] lambda がすべてに対して独自のコピーがあるような印象を与えますが、メンバ変数が参照されている場合、自動キャプチャは this を暗示的にキャプチャします。
ざっくり考えると「キャプチャされる変数にはUPROPERTY
が付かないので気を付けてね」って感じ。
- ラムダ式をローカルスコープで一時的に使用する分には大丈夫と思われ
- ラムダ式をメンバに保持して使うのは無理
- メンバに保持したいような時はデリゲートを使う
気を付けないとGC時に分からん挙動を誘発すると思うので、使用する際は慎重に。