第0039回 / 物を掴めるようにする | HK-87@UEのブログ

HK-87@UEのブログ

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

ゲームで実現したい要素を思いつくまま洗い出し。

その結果、ゲーム冒頭の展開がおおむねイメージ出来たので、
必要な要素を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() 関数の中身を実装。
これは簡単。

それぞれたった2行のコードだ。

 

次。

掴む側の処理を実装。
これはほぼサンプルと同じでいいか。

完成~。
動画。



・・・・・
オブジェクトの原点??が手にくっつく感じで、極めて微妙。

次はその辺を調べて整えるか・・・。