HK-87@UEのブログ -16ページ目

HK-87@UEのブログ

UE4で理想のVRゲームを作るまでの軌跡

次。
そろそろ冒険に出発したい。

冒険に必要なアイテム諸々を用意する。

全て Houdini でざっくりとモデルを作成。
クオリティを上げるのはゲーム要素がすべてそろってからだ。

・バックパック
空いてる状態/閉じてる状態/寝袋装着状態、等用意したけれど
今のところ空いている状態しか出番がない。


・地図
開いたり、折りたたんだりできるように


・たいまつ


・調理用具


・油ビン
・寝袋
・おにぎり
 :

----
背中からバックパックを手に取り、
アイテムを中に突っ込んで話すと、インベントリに追加されるようにする。

他の操作と相性悪い気もするけれど、
その辺りの調整も全部そろってからだな。



動画

 


----
今回独自にC++でコンポーネント(SceneComponentの継承クラス)を作る必要があり
以下はその際にコンポーネントの初期化フローについて調べたメモ。

まず初期化時に呼ばれそうな関数をヘッダーファイルから抽出。
・・・たくさんありすぎ。

一つづつタイミングを調べよう。

・コンストラクタ
    -> 生成時
・PostInitProperties()
    -> コンストラクタの後、プロパティの値設定後
・PostLoad()
    -> LoadMap() -> EndLoad() の中
・OnComponentCreated()
    -> LoadMap() -> UpdateWorldComponents() の中
・OnRegister()
    -> LoadMap() -> UpdateWorldComponents() -> OnComponentCreated() の直後。ほぼ同じタイミング
・BeginPlay()
    -> LoadMap() -> プレイヤースポーン後

同じようなタイミングで呼ばれる初期化処理が複数あって、使い分けがわからない。

さらに、以下2つは呼ばれている気配がない。
これはどんな使い方をするべきなんだろうか?

・Activate()
・InitializeComponent()


-----
次にシンプルなクラスを作って、ブレークポイントを張り、呼ばれる順番とタイミングを調べてみる。

モジュール初期化時に生成されるクラスデフォルトオブジェクトは別にしても

マップをロードしてからもB,C,Dの 3つのオブジェクトが作られている様子。
無駄じゃないのだろうか?

↓呼ばれる順
▼ モジュール初期化時 / クラスデフォルトオブジェクトの生成
A: コンストラクタ
A: PostInitProperties()

▼ マップロード時
B: コンストラクタ
B: PostInitProperties()

C: コンストラクタ
C: PostInitProperties()

B: PostLoad()

C: PostLoad()
C: OnRegister()
C: DestroyComponent()
C: OnUnregister()
C: OnComponentDestroyed()

D: コンストラクタ
D: PostInitProperties()
D: PostLoad()
D: OnComponentCreated()
D: OnRegister()
D: BeginPlay()

▼ 終了時
D: EndPlay()
D: OnUnregister()

B: BeginDestroy()
C: BeginDestroy()
D: BeginDestroy()
D: OnComponentDestroyed()
A: BeginDestroy()