はじめに
タイトルにはPONGを作ったとか書いてるけど、記事の内容自体は詰まったところなので、特に制作過程をどうこう書いてるわけではないことをご了承いただきたい
詰まったところ・気になったところ
プレイヤーの自動スポーンをやめたい
GameModeのDefault Pawnに設定したPawnが実行時に自動で生成されるのが気持ち悪かったので、対処法を調べてみた
参考URL: UE4 Default PawnとSpectator Pawnについて
Pawnを継承したオブジェクトのAuto Possess Player
というタブの値をPlayer 0
に設定すればいいらしい
こうすることで、ID0のPlayer Controller
が所有するPawnとなり、自動でDefault Pawnが生成されなくなる
衝突を検知してくれなかった
原因は、なんとなくAddActorWorldOffset
を使用していたのが原因
しっかりと物理挙動に則って移動させようね!という話だった(多分)
なので、今回はphysicsのvelocityを随時更新することによって解決
↑の処理をTickイベントでおこなわなかったために、おかしな共同をしていたのもメモ
Tick関数がどう処理されているかUnrealC++を追ってみよう!
インプットの設定
プロジェクト設定 > インプット > Binding
ここで独自のインプットイベントを定義できるので覚えておくべし
インプットの設定でやらかしたこと
色々試している途中で複数のPawnのAuto Posses Player
を同じ値に設定してしまっていた(Player 0
とか)
すると、最後にコンパイルしたブループリントが設定の対象になるようで、意図しない挙動をすることがあった
ローカルマルチプレイを実現したい
PONGは1画面を2人が共有して操作するゲームなので、とりあえずプレイヤーを2人分作成して別々の操作をできるようにしたい
2人分のプレイヤーを用意する
ブループリントでCreate Player
を呼ぶと勝手にプレイヤーが生成されて、ローカルマルチが実現する。すごい
ちなみに今回はゲームの仕様上使わないと思うけど、一応知見として覚えておいて損はないかなと思う
1画面を2人で共有する
CreatePlayer
を実行すると勝手に画面が分割されるのを止めさせたい
プロジェクト設定のUse SplitScreen
にチェックが入っていると自動で画面が分割されるらしい
参考URL: マルチプレイで画面分割をしないと、1P側カメラが有効になる
落とし穴
その1
レベル内に設置されているAuto Possess Player
を2つとも同じPlayer 0
に設定すると、当然ながらどちらか片方のみが入力をうけつけるようになる。あくまでPlayerController
と所有するPawnの関係は1対1ということなんだと思う
その2
参考URLにも書いてあったことなのだけど、今回PONGを作成するにあたって、キーボード1つで2人分の操作をする予定だったが、↑の方法だと1P側がキーボード入力受付を専有してしまい、2P側にインプットイベントが送信されなくなるという落とし穴がある
なので、1P側で入力を受付、2P側のPawnに対して移動量の値を設定してあげる的なことをしなくてはならない
UE4の闇感あるなと思った
変数について
privateと目のマークの違い
private | 目のマーク |
---|---|
![]() |
![]() |
ブループリント変数 | Unreal Engine ドキュメント
・private
この変数をプライベートにします (派生ブループリントによる修正不可)。
・目のマーク
変数を [Editable (編集可能)] に設定すると、変数が存在するブループリントの外部から変数を修正することができます。
privateは継承うんぬんした時に派生先では見れるか否か、目のマークはエディタ上で値を操作できるようにするかの設定
レベル間の遷移をしてみた
音の再生
SE
BGM
...
多分自分以外が見たら、いまいちよくわからない内容になってるんじゃないかなーとは思ってるのでそのうち内容整理とかもしたいとか思ったり思わなかったり