FPSゲームの作り方14 Unityマルチタップ対応スマホ操作を実現 完成版プロジェクトファイル付き

Unity FPSゲームの作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
8種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

本講座では、UnityとC#を用いて3DFPSゲームを作成していきます。

前回は、スマホ用の設定、そしてスマホ用のUIを配置、移動スティックやジャンプボタンのガワの作成まで行いました。

前回の記事:

FPSゲームの作り方13 UIや移動スティックを開発 スマホ対応に改造しよう
本講座は3DFPSゲームをフルスクラッチで開発しています。今回の記事はその13回目です。  前回までで、PCで遊べる一人称視点のFPSゲームとして一通りの作成が完了しました。 前回の記事 :  今回はこのFPSゲームをスマホ対...

ここまでだとまだ実際にスティック移動したりジャンプボタン押下によるジャンプを実装していない状態です。

そこで、スマホ用UIを使って移動、ジャンプ、攻撃などができるように処理を作成していきます。

またマルチタップにも対応させ、移動しながら攻撃したり、移動しながらカメラを動かしたりする処理を実装します。

今回の講座でスマホ対応を完了したFPSゲームができあがります。講座の最後に完成版プロジェクトファイルもお渡しします。


【Line登録者限定のプレゼントもあるよ!】

スマホボタンを押したときにFPS主観カメラでジャンプさせる処理を実装

ではまずは簡単なジャンプができるようにしていきましょう。 

AppPlayerController.csにコードを追加します。

「Update()」関数の追加はありませんが、元々のジャンプ処理も併せて確認しておきましょう。

追加する関数は「OnMobileUiJumpButtonClicked()」関数です。

まずは元のジャンプ処理の「if( Input.GetKeyDown( KeyCode.Space ) == true && isJumping == false )」の処理を丸々コピーします。

そして条件の「Input.GetKeyDown( KeyCode.Space ) == true」を削除して、「isJumping==false」のみにします。これでOKです。

Unityに戻って、「MobileUI/JumpButton」の「Button」コンポーネントの「OnClick」イベントに、「Player」をドラック&ドロップして、「OnMobileUiJumpButtonClicked()」関数を登録しましょう。

これでジャンプは完成です。再生して、ジャンプボタンを押してみましょう。

 

移動スティック押下による移動処理の実装

次に移動処理です。移動処理は「AppPlayerController」の「FixedUpdate()」で実装しているので、そこでプラットフォームによる分岐を行います。

まずは最初に「if( gameController != null && gameController.CurrentGameParam.State != AppGameController.GameState.Play ) return;」を追加しておきます。

一つ目の条件「gameContorller != null」はNullチェックです。「gameController.CurrentGameParam.State != AppGameController.GameState.Play」はステイトが「Play」つまりゲーム中のみ実行できるようにします。

これはPC、スマホ関係なく「ゲーム中のみ処理を行う」というあっていい処理なので最初に実行しておきます。

続いて、移動処理の前に「if ( Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.OSXEditor )」を加えて全ての処理をエディター用にします。PC用にビルドしたい場合はここの条件にPCも加えてください。

そしてこのif文の「else」の括弧内に一旦丸々PC用の処理をコピーしましょう。そこから変更部分を解説していきます。

まず最初の「horizontal」「vertical」はPC入力なので削除します。そしていずれかの入力があった時「if( horizontal != 0 || vertical!= 0 )」の条件を「mobileUi.StickPosition.x != 0 || mobileUi.StickPosition.y != 0」に変更します。この「mobileUi.StickPosition」は「AppMobileUiController」でスティックの入力を「0〜1」にして保管している値です。

括弧内の力を算出する「var forceX = horizontal * moveSpeed」、「var forceZ = vertical * moveSpeed」をそれぞれスティック入力に変更し「var forceX = mobileUi.StickPosition.x * moveSpeed」、「var forceZ = mobileUi.StickPosition.y * moveSpeed」に変更します。

ざっくりいえば、キーボード入力値をスティック入力値に変更しているだけです。書き方を工夫すればもっと短く書けますが、今回はわかりやすいように丸々条件分岐しています。

では、Unityエディタに戻って再生してスティックで移動できるか確かめてみましょう。

スマホタップによるFPSゲームの攻撃・カメラ回転の処理の作り方

お気づきの方もいるかもしれませんが、攻撃・カメラ回転、つまりボタン以外のところをスマホ操作でタップした場合、特に処理を変えなくてもちゃんと回転、攻撃できていると思います。

カメラの回転・攻撃は「Input.GetMouseButtonDown()」や「Input.mousePosition」などマウスの値を使っていますが、実はこれらはスマホタッチの場合も有効です。

しかし、両手で操作したり何本か指を使って操作しても複数の指の同時操作に対応していないので1本の指の値しか取得できません。

ここからは複数の指を使ってタップした場合にも対応できるようにスマホ用に処理を変更します。

スマホ版対応に向けて処理の整理・リファクタリング

では、まずはそれを追加するにあたり、ちょっと見にくくなってきているのでPC用のカメラ、攻撃処理を一つの関数にまとめましょう。  

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.stores.jp/)で講座閲覧権を取得してね。

最後に スマホ版FPSゲームが完成!次回はVR化に挑戦!

ここまででスマホ対応の完了です。

こんな感じの動きが実現できているでしょうか?(この動画では調整のため2体敵を倒したらクリアになってます笑)

ここまでで、一旦弓を使ったFPS(一人称シューティング)の講座の区切りとなります。

操作性の向上や、デバイスによるUIの調整などまだまだ各々で改良できるところはたくさんあるはず!

細かい調整をご自身でやってみるとより良いゲームができるのではないかと思います。ぜひオリジナルFPSゲームに昇華させてみてください!

 

次回はちょっと特殊ですが、VRへの対応をしていきます。これはVRのHMD(ヘッドマウントディスプレイ)を持っていないと試せないのですが、お持ちの方は是非挑戦してみてください。

次回の記事:

FPSゲームの作り方15 VR版FPSゲームを開発しよう! ジャンプ・移動・UIの調整
ここまででUnityとC#を用いて3DFPSゲームを作成してきました。 前回まででスマホ対応をして一区切りの解説が終わったのですが、今回からVRヘッドマウントディスプレイ(HMD)でゲームができるように改造していきたいと思います。 前回...


Unity入門の森オリジナル本格ゲーム制作講座はこちら
8種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました