Unreal4 簡単なゲームを想定して調査する
TL;DR
Unreal習得に最も近道は 大雑把なエンジンの思想を覚えて、1本簡単なゲームを作り そこに肉付けすることだと思う
エンジンの思想
この間調査した内容では、BluePrintというビジュアル言語とC++があり、どちらでもゲームコードをかけるし お互いにCall出来る
ビジュアル言語では、デザイナーや企画がコードを書いたり、微調整したり、意思を伝えたり 普段 Excelやメールでくる仕様書が、実際に動くイメージとして作ってもらえる事が多い
ただし BluePrintでは、複数人で同時でファイルさわれなかったり、コードの再利用性等 プログラマにとってはC++にメリットがある場合も多いので BluePrintとC++をうまく併用するのが良さそう
また、ネットワークでのマルチプレイヤーゲームを想定して作られているため サーバとクライアントでの値のレプリケートや、RPCもある
そして、ネットワークの遅延に対しても、非常によく出来たアルゴリズムを使い 違和感が極力出ないように補完される
そして、レンダリングにはデファードレンダリングを使い、今流行の綺麗なライトマップが表現可能
その他、20年間のノウハウを含んでいるだけあり、とても素晴らしい出来である
実践しようぜ!
ってことで、あまり先を考えずにゲームを作ってみようと思う
プロジェクト作成
プロジェクト新規作成で BluePrintを選び SideScrollerを選ぶ 名前は GlayRunにした。理由はよくわからない
実行すると サイドビューで ジャンプと横移動が可能
しかしジャンプは高くゆるやかで、移動速度も遅いので変更しよう
Content/SideScrollerBP/Blueprints/SideScrollerCharacter を開く 左上のメニューから CharacterMovement というコンポーネントを選ぶ
コンポーネントとは、Actorに対して昨日を追加するモジュールで、この場合はジャンプや移動等の機能を提供する
そこで CharacterMovementの MaxWalkSpeedや、Jumping/Fallingの Jump Z Velocity 等を調整する
これで 思った動作になった
敵を作る
敵は 新規BluePrintで Characterから派生しよう 今のところは C++コード書かないので Character から直接派生させる C++でコード拡張するのは前回やった リフレクションのアレをすればいい
名前は BP_CharaEnemy にした。ダサいのでネーミング規則はそのうち考えたい ついでに SidescloeerCharacterを BP_Charaにした
BluePrintを作った段階では メッシュが設定されていないため、敵は表示されないので とりあえず BluePrintと同じメッシュをつける 左上メニューより Meshを選択し DetailsのSkeltalMeshに SK_Mannequin を設定 このままだと プレイヤーと紛らわしいので Materialsを適当なものにする 私は 水にした。意味不明
その後 敵キャラを小さくしたかったので、メッシュやカプセルのスケールやトランスフォームを調整
とりあえず 敵キャラっぽいのが出来た
敵と当たり判定をつける
Characterにはカプセルがあるので、とりあえずは それを使ってコリジョン判定を行う事ができる 攻撃コリジョンと 食らいは別にするのが常識だ
今回は プレイヤーが敵に当たった処理を書きたいので BP_Charaの CupsuleComponentを右クリックし AddEventメニューから、OnComponentHitを選ぶ コリジョンでは BeginOverlapやEndOverlapも使えるが、今は敵との判定が Overlap不可能なためHitを選ぶ
すると EventGraphに OnComponentHitイベントノードが出現するので OtherActorから Cast to BP_CharaEnemyを生やす。 確認のためにPrintStringをつなげる
論よりRUNだ
敵をレベル(マップ)に配置する。 とりあえずは BP_CharaEnemyをD&Dでレベルに置けばいい
Playし敵に当たると PrintStringのメッセージが出る
当たり判定は成功
上記サンプルで適当に流しすぎ機能
攻撃コリジョンを使っていない コリジョンのOverlapも欲しい コリジョンHIT相手が複数種類いる場合 敵のスポーンを動的にしたい *BP_CharaのデフォルトのBluePrintの説明(横移動とジャンプ)
また、非常に足りてないと思う機能 UI GameStart,GameOver そして ゲームの遷移 キャラの死亡演出 得点 ライフ 敵キャラの動き(大げさにいえばAI)
今日はスケジュール管理が忙しく時間取れず 簡単なサンプルしか作れなかったけど ここから少しずつ膨らませて行こうとおもう