
初心者ゲームつくる:自らボールを跳ね返せ!バーを動かす仕組み【考察編】
さて、前回までで基礎となるボールの動きと、壁にあたったら跳ね返るとことはできたので、プレイヤーが動かすバーを考えて行きます。※バーでよいよね。
アクタはつくり、レベルに配置するのは簡単だが、
そのアクタをプレイヤーとして動かすのってどうやってつくるのかな?
カメラ視点はどうするか・?
今回は、プレイヤーは動くが、視点は固定ということで考えてみる。
いくつも手段があるので話をややこしくする。
色々な設定の概要
プレイヤーを動かそうと思った際に、まずツールががあるかというと、次のようなものがある。
ゲームモード、コントローラー、Player Start、キャラクターとPawn
まずは、基礎であるこれらの特徴をざっくりでも理解するとこから始める。
■ゲームルールを設定しトラック:Game ModeとGameStateとPlayerState
ゲームのルール セットを定義します。このルールには、プレイヤーがどのようにゲームに参加するか、ゲームの一時停止、レベルの移行、および勝利条件などのゲーム固有の動作が含まれます。ゲーム モードは、各レベルに対して設定され、複数レベルで再利用できます。
UE4.14からGame Mode Baseという新しいクラスが追加されていますので、こちらを使用する。理由はこちら。
UE4 Game ModeとGame Mode Baseの違いについて
GameModeの特徴とは?
「ゲーム」のコンセプトは 2 つのクラスに分割されます。Game Mode と Game State は、ゲーム ルールや勝敗条件など含めたゲームの定義です。サーバー上にのみ存在します。通常はプレイ中に変更されるデータがあまりあってはならず、クライアントが知る必要のある一時的なデータは絶対にあってはいけません
GameStateの特徴は?
ゲームのステートを含みます。接続されたプレイヤーのリスト、スコア、チェス ゲームの駒の位置、オープンなワールドゲームで完了したミッションのリストなどが含まれます。GameState はサーバーとすべてのクライアント上に存在し、自由にレプリケートして全てのマシンを最新の状態に保つことができます。
PlayerStateとは?
PlayerState は、人プレーヤーやプレイヤーをシミュレートしているボットなどの、ゲームの参加者のステートです。ゲームの一部として存在する非プレイヤーの AI は PlayerState を持ちません。PlayerState として適切なデータの例には、プレイヤー名、スコア、MOBA などの場合のインマッチ レベル、CTF ゲームでプレイヤーが今フラグを持っているかどうか、などがあります。すべてのマシン上ですべてのプレイヤーに対して PlayerStates が存在し (PlayerControllers とは異なります) 、自由にレプリケートして同期することができます
上記のようにみていくと、多くはオンラインによる複数のプレイヤーなどを意識しなければならないときに使用するように思える。
■プレイヤーコントロール:PlayerController と AIController
ポーンと、ポーンを操作する人プレーヤー間のインターフェースです。PlayerController は、基本的に人プレイヤーの意思を表します
Player ControllerはPawnを所持するといような作りになっており、Pawnの所持を破棄するとPawnに対する操作は行えなくなります。
■キャラクター:CharacterとPawn
UE4ではプレーヤーが操作するオブジェクトをPawn(駒)と考え、それをコントロールするものとしてPlayer Controllerというものが存在します。
人間の形をしているか?していないかの違い。
あとは、プレイヤーが操作して制御するか?AIなどで動かすか?
前回作ったボールのように動く仕組みをつくるか。
全体がどのような関係図になっているかは、下記の図がわかりやすい。
大事な点は?
Pawnを操作するということであれば、Player Controllerを介さずに、
レベルや、アクタのブループリントに直接記述することで、
Pawnを操作することはできます。なんとw?
この点については、Player Controllerを介してアクタを
動かすことにどんなメリットがあるか?を理解する必要があります。
また、動かく対象がPawnかCharacterによっても
実装の仕方が異なります。
今回は、実装ではなく考察編なので、調べた際にわかった大事な点は、
【疑問1】どこにノードを記述するのか?
【疑問2】動かすノードは何を使うか?
【疑問3】対象とするアクアをどう指定するか?
【大事】オリジナルの名前がつけれるのは?どれ?変数名は?
次回はこれらを1つ1つ考えていきましょう!