ゲームで実現したい要素を思いつくまま洗い出し。
その結果、ゲーム冒頭の展開がおおむねイメージ出来たので、
必要な要素を1つづつ揃えていくことにする。
■物を掴めるようにする
これはサンプルを参考にすればすぐにできるだろう。きっと。
VRテンプレートの構造を確認。
----
まず、左右の手は BeginPlay 時に、
"BP Motion Controller" という Actor が Spawn され
VROrigin に Attach されている。
掴む処理は BP_MotionController > Grab Actor
手の近くのActorを探して、Pickup インターフェースを呼んでいるようだ。
手の近くのActorを探す処理は、BP_MotionController > Get Actor Near Hand
Sphere形状でGetOverlappingActorsして、
PickupActorInterfaceを継承しているActorのうち、
一番近いものを取得している。
PickupActorInterfaceはBPで実装されていて、関数は Pickup と Drop の2つだけ。
BP_PickupCube などの実装を見ると、物理を OFF にして、Attach しているだけだ。
OK~。理解完了。
----
掴む処理とかは C++ で実装したいので、C++でインターフェースを用意する。
掴まれる側の処理は共通化しておきたいのだが、
PickableObject的な基底クラスを用意する感じだろうか?
それともActorComponentとかで実装した方がいい?
ソースを調査。
どうもActorComponentはCPU負荷がいろいろかかりそうに見える。
ヤメヤメ。
とりあえずActor継承でPickableObjectクラスを作ろう。
基底クラスというより、これをそのまま配置して
モデルの差し替えでいろいろ実現する感じで。
沢山出したいしどうせプロシージャルに配置するので本当はActorも継承したくないのだけれど。
まだそこまでUE4を理解していないので、まずはシンプルに。
----
結局 StaticMeshComponent を持つので、
AActorではなく、むしろ AStaticMeshActor を継承した方がいいのだろうか?
試してみる。
あれ? StaticMesh がエディタで変更できない。
こんなエラーが表示されていて、すべてグレーアウトしている。
Native components are editable when declared as a UProperty in C++
UPropertyを付けたくても、基底クラスのメンバだしなぁ。。。
AStaticMeshActorの継承はやめとこう。
AActorを継承して、コンストラクタで自前でStaticMeshComponentを生成する形で。
できたー。
----
次。
Pickup() と Drop() 関数の中身を実装。
これは簡単。
次。
掴む側の処理を実装。
これはほぼサンプルと同じでいいか。
完成~。
動画。
第0039回 / 物を掴めるようにする #UE4 #VR #GameDev https://t.co/YdAaO7nNiT pic.twitter.com/uumM8zbNZn
— ue4-master (@ue4master80) October 15, 2019
・・・・・
オブジェクトの原点??が手にくっつく感じで、極めて微妙。
次はその辺を調べて整えるか・・・。