Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: Cannot modify header information - headers already sent by (output started at /home/squirrel/www/surfrog/web/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/squirrel/www/surfrog/web/wp-includes/feed-rss2.php on line 8
クレーンゲーム | おかしくカエル! http://surfrog.net かえる好きエンジニアによるアプリや真面目~おふざけ文章まで Mon, 10 Apr 2017 04:51:40 +0000 ja hourly 1 https://wordpress.org/?v=6.2.5 http://surfrog.net/web/wp-content/uploads/2016/04/cropped-site_icon-32x32.png クレーンゲーム | おかしくカエル! http://surfrog.net 32 32 UE4ぷちコン作品 クレーンゲーム製作記② クレーンゲームを作る http://surfrog.net/2017/04/10/ue4-create-game/ http://surfrog.net/2017/04/10/ue4-create-game/#respond Mon, 10 Apr 2017 14:00:39 +0000 http://surfrog.net/?p=3547 前回、タイトル画面の製作記についてあれこれ書きました。今回はゲーム本編、クレーンゲームそのものの製作についてです。

 

どういうゲームにするか

ぷちコン応募作品を作るにあたって思いついたクレーンゲームシミュレーター。ただ固定のカメラでクレーンゲームを作って遊ぶよりかは、やはりUnreal Engine4のパワーを使って、クレーンゲームがいっぱい置いてあるゲームセンターみたいなの作って歩き回りたいと思いました。そういうことが簡単に実現できるのがUnreal Engine4というゲームエンジンだとも思ったので。

そんなわけでゲームセンターを歩き回って、クレーンゲームを操作するFPSタイプのゲームに決定しました。

 

後はゲーム性です。現実のクレーンゲームを考えた時、いかにお金を使わずに景品を取れるかということが目標だと思います。そしてクレーンゲームで景品が取れる時というのは、アームが強い時です。全然取れない時もあれば、簡単に取れる時もあるアームの強度を演出できれば、目標というのが生きてきます。ついでに、昨今の全然掴んで取れないクレーンゲーム事情(ずらして取る…みたいなの)を実現できればいいとも思いました。

 

操作に気をつける

FPSというゲームは操作が複雑です。WASDに加えてshiftとctrlとspaceとマウスの操作。

私はSteamのゲームをよくプレイしますが、FPSのゲームにはアクションキーもしくはインタラクトキーと呼ばれるものが多くあり、キャラクターのアクションを1つのキーに集約してしまうといったのがよく見られます。

物を取るボタンはR、奥ボタンはFといった具合に分けるのではなく、HUDで状況を表示することによって、1つのボタンで色々できるインテリジェンスなキーとして集約させることによって、ただでさえややこしいFPSの操作キーの煩雑さを回避するのに一役買っています。

ゲーム操作

Payday 2のインタラクトキーの例。鍵を開ける、カードキーを通す、人質をタイで縛る、現金バックを拾う、現金バックを投げるといったアクションのほとんどを担当するのがFキー。HUDに表示されるために今インタラクトキーで何が行われるかということも理解できる。便利かつ煩わしさが無いのが好きです。

 

というわけで「さプライズ」にもこのインタラクトキーを導入します。クレーンゲーム機に近づいたら状況によって

  • コインを入れる
  • 横移動
  • 奥移動
  • それ以外(クレーン動作中の待ち状態)

を1つのキーで全て行えるようにします。

 

ゲーム操作

これは特に難しいことはなく、インタラクトキーに割り当てたキーが押されたら、状況によって操作を変えるだけです。

 

さプライズの肝。クレーンゲームの物理シミュレーション

このゲームの肝はなんといってもクレーン部分の物理です。そのためクレーンの動作に関してはある程度妥協せずに物理を実現させたい。そのためには物理コンストレイントというのを使います。

物理コンストレイントは物理物体を接続するジョイントで、角度制限や移動制限を付けたり、移動エネルギーを加えることができます。

 

Unreal Engine4の公式ドキュメントに物理コンストレイントについて記載されていますが、
ウィジェットの時と違い、物理コンストレイントの説明はサラッとしていて、自分でトライアンドエラーを繰り返してアームの開閉ができました。なので忘れないように開発記を残しておきます

 

まず、物理コンストレイントには2つのメッシュが必要です。

UFOボディ

アームの接続元となるUFOのパーツ。

 

UFOアーム

アーム本体。

 

この2つを物理コンストレイントで接続していきます。

コンポーネントの追加ボタンを押してPhysicsConstraintを選びます。

物理コンストレイント接続

PhysicsConstraintをクリックして詳細を開き、アーム接続元となるufoをComponent Name 1に、アームをComponent Name 2に設定します。選択タブとかは無く、キーボードでコンポーネント名を打ち込むだけです。

これでビューポートにてufoとアームが青と赤の立方体で囲われていたら物理コンストレイントは動作しています。Disable Collisionにチェックを入れると、物理コンストレイントで接続した物体同士の衝突が無視されます。今回はチェックを入れています。

 

続いてはアームを動作させる角度の設定です。アームの開閉角度は45度で、1方向のみという事を考えつつ数値を設定していきます。

平行移動に関しては移動させないので全てLockedで固定。

Angular Limitsがアームの開閉に適した部分です。Twistのみ有効にして、中心から両側22.5度動作するように設定します。

設定した後がこちら。物理コンストレイントがアームの回転軸になるため、物理コンストレイントの位置もキッチリ合わせておく必要があります。

 

物理コンストレイントの子パーツであるアームメッシュのSimulate Physicsを有効にすると、物理コンストレイントをシミュレーションで確認することができます。なお、物理コンストレイントを使用して動作させるメッシュは、プリミティブなコリジョンでないと警告が出ます。

アームのコリジョンはカプセルなどを使用して設定しています。

 

物理コンストレイントの実行

当然ながらアームに対してエネルギーを加えていないため、実行しても何も起きません。ただし、外から力を加えてもアームの開閉以上の動作はしないようになっています。

 

アームを開閉させる

物理コンストレイントのエネルギー

物理コンストレイントの詳細、Angular Motorのところでエネルギーを加えることができます。大きく2つの方法があり、Target Orientationはその角度へ持っていくためのエネルギーが発生します。Target Velocityはその角度方向のエネルギーが発生します。

アーム開閉方向へのエネルギーを加えてみます。Target VelocityのXを22.5、Twistにチェックを入れて、シミュレーションをスタートさせます。

アーム開閉

アームが開きました。このままでは遅いので、Strengthを10倍の10.0などにすると早くアームを開くことができます。

アームとUFO部分のコンストレイントができたら、他の物理コンストレイントも加えていきます。

クレーンゲームの物理コンストレイント

最終的にはアームの左右開閉、UFO部分の上下移動、横移動、奥移動と5つの物理コンストレイントを使いました。

 

物理コンストレイント微調整ポイント

ここから先は微調整に微調整を重ねることになりますが、微調整のポイントを整理します。

Linear Motor、Angular Motor

物理設定

物理コンストレイントのMotor部分はエネルギーを生み出す設定そのもの。LinearもAngularもあまり変わらず、その場所に持っていく設定がPosition Target、Target Orientationです。エネルギーのベクトルを指定するのがVelocity TargetとTarget Velocityです。

例えばPosition TargetをX 100.0に設定すれば、X 100.0方向に向かうエネルギーが常に発生します。X 0の位置ある場合は+方向のエネルギー、X 200にいたら-方向のエネルギーといった具合です。

Strengthはエネルギーの強度です。

 

Linear Limits、Angular Limitsの詳細設定

物理設定

物理設定

物理コンストレイントに違反(制限値に触れた場合)の動作設定。例えばSoft Constraintにチェックを入れると、スプリングのように反発する動作が得られます。アームを開いた時のように、バシッと止めたい場合はSoft Constraintのチェックを外し、Restitutionを0.0にして反発しないようにすると、アームっぽくなりました。

 

物理コンストレイントの子パーツの物理設定

物理設定

物理コンストレイントで接続したメッシュの物理設定も微調整のポイントとしては重要です。

Linear DampingやAngular Dampingはデフォルトでは低すぎるので、少し上げた方が良い事が多いでしょう。

例えば前述のPosition Targetを使ってエネルギーを発生させる場合、X 100を指定して、X 0にある物理メッシュを動作させるとします。実行するとX 100まで物理メッシュが動作した後、制限が無い場合はX 125などといった数値まで滑ります。そうなるとまたX 100に向かって動作するのでX 80、X 110といった具合に設定した値を行ったり来たりします。Linear Dampingの数値をすこし上げることでこの行ったり来たりを抑える摩擦のようなものが発生します。

 

また、Angular Motorで回転させたりする場合はCenter Of Mass Offset(重心)も重要です。クレーンゲームのアームも、重心が中心にありすぎると簡単に掴んで運べてしまうため、アームの弱さを演出するために重心をアームを開く側に設定しています。

 

ブループリントで制御する

各種物理の設定が固まったら、エネルギーの方はブループリントで制御できるようにします。

アームの開閉

Angular Motorは、SetAngularVelocityTarget、SetAngularDriveMode、SetAngularDriveParamsで設定できます。

 

 

クレーンゲームを完成させる

アームが制御できたら、クレーンゲームを肉付けしていきます。

クレーンゲーム肉付け

メッシュを配置しているぐらいで特にテクニカルな事は無し。Arrowは景品の配置用に追加しています。

getworldtransform

GetWorldTransformでTransformが取得できるので、景品の配置位置の調整に便利です。

 

クレーンゲームの動作を状態を分けて考えて

  1. アイドル状態(コイン投入待ち)
  2. 横移動
  3. 奥移動
  4. クレーン操作(アームの開閉とボディの昇降)
  5. もとの位置(穴の位置)に戻ってアームを開閉
  6. 1に戻る

ステートマシンとしてブループリントを記述していきます。

ステートマシン

スケルタルメッシュのアニメーションの方はステートマシンを使えたのですが、Actorのブループリントで使えないので、昔ながらのSwitchによる処理分けです。ブループリントをたくさん使うだけで、特に難しいことはしていません。

 

最終的なアーム動作はサイズが大きくてgifでは無理そうなので応募作品から確認して見て下さい。

 

長くなってので一旦ここまでにします。次はゲームセンターの店内についてです。

 

ではでは

 

]]>
http://surfrog.net/2017/04/10/ue4-create-game/feed/ 0
UE4ぷちコン作品 クレーンゲーム製作記① タイトル画面を作る http://surfrog.net/2017/04/07/ue4-create-game-2/ http://surfrog.net/2017/04/07/ue4-create-game-2/#respond Thu, 06 Apr 2017 16:00:32 +0000 http://surfrog.net/?p=3522 ぷちコンは動画で応募な上に、サクッ作ってサクッ応募のキャッチコピーな以上、タイトル画面やオプション画面、ヘルプだったりは最悪見せなくても何とかなるレベルであり、間に合わなければ削られる部分ではあると思います。時間も限られていますしね。

ただ、せっかく1つの作品を作るので、ゲームとして必要な部分を揃えたいと思うのもまたクリエイター。タイトル画面~ゲーム中~エンディング画面といった遷移は考えてみます。

ゲーム構想

ゲームの遷移ってこんな感じですよね。そんなわけで今回はタイトル画面についてです。

 

タイトル画面

ウィジェット

タイトル画面を構成するゲームタイトルやスタートボタンはUMGで実現可能。UMGに関しては公式ドキュメントが充実していました。

UMG

ウィジェットを作成してパレットからテキストやイメージ、ボタンといったパーツを配置していくことで作成。

UMG

大体こんな感じになりました。

 

UMG

レベルブループリントにてウィジェットを追加。

 

UMG

このままではFirst Personキャラクターが持つキーの移動が効いてしまうので、入力をUIのみにすることと、ついでにカーソルを表示する処理も加えると完成です。

 

これで起動するとタイトル画面のウィジェットの表示されます。

 

タイトル画面の背景

後はタイトル画面の背景をどうするかということですが、「さプライズ」ではゲーム中の画面を背景として使い、シームレスにゲーム状態に移行させることを考えました。

 

ゲームセンター

色々配置したゲームセンターの建物。これを背景として使います。

 

タイトルカメラ

カメラ(TitleCamera)を設置。カメラを右クリックしてパイロットモードにするといい感じのところに持っていきやすい。

 

カメラを設定してもまだ有効にはなりません。この「さプライズ」では、First Personプロジェクトをテンプレートとして使っているので、デフォルトでカメラの設定はキャラクターの持っているカメラになります(FirstPersonCharacterのFirstPersonCamera)。

カメラの制御を移すやり方は色々ありますが、今回は起動時にタイトル用のカメラにターゲットを変更する方法を使います。

タイトルカメラ

レベルブループリントのBeginPlayにて、SetViewTargetwithBlendを使ってカメラを切り替えます。

 

カメラ処理

これで起動時にカメラがTitleCameraになるので、ウィジェットのボタンを押したときにはFirstPersonCameraに戻るように処理を追加します。BlendTimeに少し値を設定することで、カメラの切り替わり中を補間してくれます。

 

ちなみにFirstPersonCharacterの初期位置はココ。扉入ってすぐのところです。

実行するとこんな感じにシュッとカメラが移動します。後はウィジェットを消せばゲーム中への遷移が完成です。

ウィジェット削除処理

ウィジェットのボタンを押した時の処理に、ウィジェットの削除、カーソルの表示処理、入力処理の制限を解除を追加します。

これでタイトル画面からプレイ中へシームレスな移動ができました。

 

実際の完成版では扉を開けて閉める処理やサウンド、カメラの調整を行ったため、Level Sequenceも使っていますがが、遷移部分の処理としては同じです。

 

 

感想:Unreal Engine4はゲームから作るゲームエンジン

Unreal Engine4を触るのは初めてだと製作記の冒頭で書きました。

前はCocos2d-xを使っていましたが、そちらはC++を使うプログラムばりばりのテキストベースのゲームエンジンで、

さぁ作るぞ!

って思ってから、とりあえずゲームにはタイトル画面があってから、ゲーム画面。よし、タイトル画面を一旦先に作っておこうか…いやその前に抽象クラスを…みたいなイメージなわけです(私だけだったらスミマセン)。

 

Unreal Engine4ではプロジェクトを新規作成したら謎の青い男が動いていて、タイトル画面を作ることをスッカリ忘れて遊んでいました。いくぶんテキストベースよりもゲームを作りやすい気がします。とはいえ、Unreal Engine4でもゲームとして完成させることを考えた場合にはタイトル画面や独自のデータを取り扱う必要が出て来きます。データの取り扱いに関してはブループリント上では構造体とか列挙型の扱いがちょっと面倒くさいと感じてたりします。

 

次はゲーム本編、クレーンゲームの製作記です。

 

ではでは。

 

]]>
http://surfrog.net/2017/04/07/ue4-create-game-2/feed/ 0
第7回ぷちコン応募作品、製作記 http://surfrog.net/2017/04/04/puti-contest/ http://surfrog.net/2017/04/04/puti-contest/#respond Tue, 04 Apr 2017 14:30:41 +0000 http://surfrog.net/?p=3512 先日行われたぷちコンにて、Unreal Engine4で作ったゲームを提出しました。
備忘録を兼ねて、制作記を書いていこうと思います。

 

ざっくり最初から書いてたら結構な量になってしまい、今回は応募作品の紹介とさわりのさわりの話だけです。

 

応募作品「さプライズ」

クレーンゲームシミュレーション。

昨今のゲームセンターのアーム事情を再現したかったので、わりとアームが弱くて掴めません。ずらして落とすゲームになっています。もうそれはクレーンゲームじゃない気もするんですけどね(笑)。

ゲーム性を出したかったので、筐体によってアームの強弱を設定し、それを推測できるように周りの客がつぶやくという形になっています。そして最終的にはどれだけお金を使わずに景品を取れるかというリアルな目標になっています。

 

製作記

テーマ「サプライズ」について

今回のぷちコンのテーマは「サプライズ」

いくつか思い立ったのですが、その中には軍艦の「サプライズ」というものがありました。結果的にはそっち側で応募したら被ることになる上に、3Dモデルの作り方がいまいちよくわかっていない私としては恥をかくところでした。

しかも私自信、ミリタリーにあまり詳しくないですしね。

 

そんな私が採用したのは「さ」プライズ。

プライズ=景品

よって「さ」を景品としたクレーンゲームという駄洒落。

Cocos2d-xを使ってた私としては、Unreal Engine4の物理についてはちょっと気になっていたのでこの際物理シミュレーションも試してみようとも思ったわけです。

 

Unreal Engine4は凄い

実は3Dのゲームエンジンを初めて触ることになります。といってもぷちコンが始まってからではなく、その前から興味があってちょこちょこ触っていました。

Unreal Engineといえばゲーム好きはまず知っているゲームエンジン。Unreal Tournamentも遊んだ経験あります。採用ゲームで遊んだことのあるゲームを列挙すると大変なので、中でも好きなものといえばGears of WarとかBorderlandsでしょうか。最高ですね。

 

Unreal Engine4の準備は簡単、インストールするだけです。説明不要。

Unreal Engine4新規プロジェクト作成画面

インストールできたらUnreal Engine4の世界に飛び込めるようになります。

新規プロジェクト作成で、名前をHelloWorldと打ち込んだ後の凄い大きな世界へ放り出された感は半端ない。どこから何を知ったらいいかもわからない。

Unreal Engine4画面

何をしたらいいのか……開発環境というのはどうしてこうややこしいのでしょう(笑)。

ただ、そんなに悲観することはありません。Unreal Engineは日本語のドキュメントが充実している上、プレイを押すだけで綺麗な3D世界に突入可能です。ここまでのを作るのにOpenGLやDirectXだけだったら大変ですよねぇ。いい時代になったものです。

 

そんなこんなでビュー操作やオブジェクトの配置など、基本的な操作については操作しながら何となく理解できました。

 

ブループリント

ゲームに欠かせないスクリプト・プログラムを担うのがこのブループリントと呼ばれるフロー図のようなもの。ブループリントというのは日本語で設計図という意味です。

 

プログラムをちょっとでも触ったことのある方は、次の画像だけでどういうものか理解できると思います。

ブループリント

何となくBeginPlayからスタートして、条件分岐やループを使いつつPrint。理解可能ですね。

 

ブループリント実行結果

実行結果はもちろんテキストがprintされます。画面上ですがログ上にも出ます(出せます)。

 

このブループリントはテキストベースのプログラムだと下記のような感じですね。

void BeginPlay() {
    PrintString("Hello");
    
    if( Now.GetHour() > 12 ) {
        PrintString("午後");
    } else {
        PrintString("午前");
    }
    
    for(int i=0;i<10;i++) {
        PrintString(toString(i));
    }
    PrintString("GoodBye");
}

いかかでしょう、ブループリント。

私はどちらかというとプログラム畑の人間なので、ブループリントはプログラムと親和性が高いところが好みです。ついでにUnreal Engineではその気になればC++で打てるところもいい所です。基本はブループリントで記述して、できないことがあればC++を使っていく感じだと思います。でも大体の事はブループリントで事足りるでしょう。

 

 

Unreal Engine4を触った感想しか書いていませんが、長くなってきたのでとりあえず今回の製作記はここまでにします。

 

ではでは

]]>
http://surfrog.net/2017/04/04/puti-contest/feed/ 0