ムラサメ研究ブログ

主にゲームやプログラミングのログ

Unreal4 簡単なゲームを想定して調査する

TL;DR

Unreal習得に最も近道は 大雑把なエンジンの思想を覚えて、1本簡単なゲームを作り そこに肉付けすることだと思う

エンジンの思想

この間調査した内容では、BluePrintというビジュアル言語とC++があり、どちらでもゲームコードをかけるし お互いにCall出来る

ビジュアル言語では、デザイナーや企画がコードを書いたり、微調整したり、意思を伝えたり 普段 Excelやメールでくる仕様書が、実際に動くイメージとして作ってもらえる事が多い

ただし BluePrintでは、複数人で同時でファイルさわれなかったり、コードの再利用性等 プログラマにとってはC++にメリットがある場合も多いので BluePrintとC++をうまく併用するのが良さそう

また、ネットワークでのマルチプレイヤーゲームを想定して作られているため サーバとクライアントでの値のレプリケートや、RPCもある

そして、ネットワークの遅延に対しても、非常によく出来たアルゴリズムを使い 違和感が極力出ないように補完される

そして、レンダリングにはデファードレンダリングを使い、今流行の綺麗なライトマップが表現可能

その他、20年間のノウハウを含んでいるだけあり、とても素晴らしい出来である

実践しようぜ!

ってことで、あまり先を考えずにゲームを作ってみようと思う

プロジェクト作成

プロジェクト新規作成で BluePrintを選び SideScrollerを選ぶ 名前は GlayRunにした。理由はよくわからない

f:id:murasame-labo:20160908034914p:plain

実行すると サイドビューで ジャンプと横移動が可能

しかしジャンプは高くゆるやかで、移動速度も遅いので変更しよう f:id:murasame-labo:20160908035658p:plain

Content/SideScrollerBP/Blueprints/SideScrollerCharacter  を開く 左上のメニューから CharacterMovement というコンポーネントを選ぶ

コンポーネントとは、Actorに対して昨日を追加するモジュールで、この場合はジャンプや移動等の機能を提供する

そこで CharacterMovementの MaxWalkSpeedや、Jumping/Fallingの Jump Z Velocity 等を調整する

これで 思った動作になった

敵を作る

敵は 新規BluePrintで Characterから派生しよう 今のところは C++コード書かないので Character から直接派生させる C++でコード拡張するのは前回やった リフレクションのアレをすればいい

名前は BP_CharaEnemy にした。ダサいのでネーミング規則はそのうち考えたい ついでに SidescloeerCharacterを BP_Charaにした

f:id:murasame-labo:20160908035708p:plain

BluePrintを作った段階では メッシュが設定されていないため、敵は表示されないので とりあえず BluePrintと同じメッシュをつける 左上メニューより Meshを選択し DetailsのSkeltalMeshに SK_Mannequin を設定 このままだと プレイヤーと紛らわしいので Materialsを適当なものにする 私は 水にした。意味不明

f:id:murasame-labo:20160908040154p:plain

その後 敵キャラを小さくしたかったので、メッシュやカプセルのスケールやトランスフォームを調整 f:id:murasame-labo:20160908040335p:plain 

とりあえず 敵キャラっぽいのが出来た

敵と当たり判定をつける

Characterにはカプセルがあるので、とりあえずは それを使ってコリジョン判定を行う事ができる 攻撃コリジョンと 食らいは別にするのが常識だ

今回は プレイヤーが敵に当たった処理を書きたいので BP_Charaの CupsuleComponentを右クリックし AddEventメニューから、OnComponentHitを選ぶ コリジョンでは BeginOverlapやEndOverlapも使えるが、今は敵との判定が Overlap不可能なためHitを選ぶ

f:id:murasame-labo:20160908040513p:plain

すると EventGraphに OnComponentHitイベントノードが出現するので OtherActorから Cast to BP_CharaEnemyを生やす。 確認のためにPrintStringをつなげる

f:id:murasame-labo:20160908041248p:plain

論よりRUNだ

敵をレベル(マップ)に配置する。 とりあえずは BP_CharaEnemyをD&Dでレベルに置けばいい

Playし敵に当たると  PrintStringのメッセージが出る

当たり判定は成功

上記サンプルで適当に流しすぎ機能

攻撃コリジョンを使っていない コリジョンのOverlapも欲しい コリジョンHIT相手が複数種類いる場合 敵のスポーンを動的にしたい *BP_CharaのデフォルトのBluePrintの説明(横移動とジャンプ)

また、非常に足りてないと思う機能 UI GameStart,GameOver そして ゲームの遷移 キャラの死亡演出 得点 ライフ 敵キャラの動き(大げさにいえばAI)

今日はスケジュール管理が忙しく時間取れず 簡単なサンプルしか作れなかったけど ここから少しずつ膨らませて行こうとおもう