妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

レトロゲームプロジェクトの研究①PongGame編

f:id:una_unagi:20160306220322p:plain

「昨日のプロジェクトの中身を見ていくわけだけど、まずは見た感じ簡単そうだったPongGameから。Pong(ポン)というのはゲーム史の本を開くと最初のあたりに書いてある有名なゲームだから、多分妹も知ってるんじゃないかと思うんだけど」

妹「知ってるんじゃないかな……やったことはないけど」

「今回の22のプロジェクトのうちの2つがこのPongで、PongGameの方はポリゴンゲームで、Pongの方はPaper2Dという違いがある。今日はは3DのPongGameプロジェクトの
方。こっちの方が構造が簡単そうだった」

操作方法

 カーソルキーの上下で右側のパドルを操作して、ボールが右端に行かないようにする。Pキーで一時停止。
 ゲームウィンドウを閉じるまでエンドレス。

表示

 3D(長方形メッシュ)で壁とパドルを形成。ボールはSphereメッシュ。得点と中央の線はウィジェット

ブループリントの構造

レベルブループリント
  • カメラの設定
  • 両端のトリガーに接触した場合の処理(ボールの削除・得点の加算呼び出し・ボールの向きを負けた側へ・ボール生成呼び出し)
  • ポーズ処理呼び出し
Ball_BP(ボール)
  • 効果音の発生
  • ボールの動きはProjectileMovementのバウンス機能で処理
Paddle_BP(上下に動かせるパドル)
  • PlayerかCPUかをIsPlayer変数をで判定して分岐(ただしCPU処理の都合上、右側をAIにしても正しく動作しない)
  • プレイヤー側の場合、上下の移動量に合わせて移動
  • CPU側の場合、ボールが右側に向かってる場合だけ、縦軸(Z)をボールに合わせようとして動く
Pong_GameMode_BP(レベルのゲームモード)
  • 初期化処理(左右どちらにボールが行くかランダムで決定・生成イベント呼び出し・ウィジェットの表示)
  • ボール生成イベント(速度、発射角度はランダム)
  • 得点の加算
  • ポーズ処理

「というような構造になっている。重要な部分はだいたいゲームモードにあって、必要に応じて呼び出すだけ、ブループリントアクターの数も少なくて、わかりやすい仕組みになってる」

妹「……これCPU強すぎじゃない? 全然勝てそうな気がしないんだけど」

「CPUのパドルはプレイヤーより遅いけど、ミスなく動くから、間に合うボールには絶対間に合う仕組みになってるんだよ。間に合わない速度や角度で打てばいいけど、ボールの発射角度を普通に打ち合ってても変化しないから、人間がミスをすると負けるし、ミスをしなければ終わらない」

妹「ひどすぎる」

「パドルの正面じゃなくて側面、細い部分でボールをつっつけばいい。そうすると急角度がつくからCPUでは届かない。ただしミスの確率も増えるけど」

妹「たしかにこうすると結構勝てる。一度得点すると相手がボールを拾えなくて連続得点出来たりする」

「こういうミスしなければ負けないタイプのゲームのAIは難しい。普通にやるとCPUが圧勝してしまうから、手を抜いて貰わないといけないんだけど、弱すぎても駄目だし。このプロジェクトでは、プレイヤーより移動速度が遅いのと、軌道予測をせず常にボールを追いかけることで調整してる」

妹「仕組みは簡単だけど、面白くするのは難しそう」

「対処法としては、動かしながらパッドに当てると角度が付くとか、打ち続けるとCPUの反応速度がだんだん落ちるとかが考えられる。障害物やアイテムを入れて複雑にしてもいいかも」