Unity ロックマン風2Dアクションの作り方15 スマートフォン対応・広告設置・演出追加・データ保存システムの実装 | Unity入門の森 ゲームの作り方

Unity ロックマン風2Dアクションの作り方15 スマートフォン対応・広告設置・演出追加・データ保存システムの実装

Unity 2Dアクションの作り方 ロックマン風横スクロールアクションゲームを作る


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

この記事はロックマン風2Dアクションゲームの作り方講座の第15回です。

前回まででゲームに必要な機能を一通り実装しました。

前回の記事:

Unity 2Dアクションの作り方14 ステージセレクト・タイトル・データの受け渡し・効果音・HP回復アイテムの実装
この記事はロックマン風2D横スクロールアクションゲームの作り方講座の第14回です。 前回はプレイヤーキャラの特殊武器の実装を行いました。個性豊かな7種類の追加武器を実装できました。 前回の記事: 今回はステージセレクトやボス撃破後の特殊武器...

今回は最後の解説として、スマートフォン(Android)対応および広告設置、そして特殊武器獲得時の演出強化やデータ保存の実装を行っていきます。

広告実装に関してはステージ選択画面でのインタースティシャル広告とゲームオーバーからの復活を報酬としたリワード広告を実装します。スマホゲームをマネタイズする際によく採用される形式での実装になります。


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

スマートフォン(Android)対応

このゲームをスマートフォンからでも遊べるようにしてみましょう。

まず現状の設定ではビルドした時にWindows用のexeファイルとして出力されるので、ビルド対象プラットフォームの設定を変更します。

Build Settings画面を開き、左下の欄からAndroidを選んで[Switch Platform]ボタンを押下して切り替えます。(切り替えには少し時間が掛かります。)

 

スマートフォン用仮想ボタン作成

この状態でビルドを行えば(環境設定が済んでいるなら)すぐに手持ちのスマートフォンでテストプレイすることが出来るのですが、プレイヤーキャラの操作はキー入力にしか対応していないので普通の端末ではステージを遊ぶことが出来ません。

スマートフォンで起動した時はステージ攻略時の画面上に左右移動やジャンプ、射撃および武器切り替えのボタンを表示してそこから操作が行えるようにしていきます。

 

各種ボタンはCanvas上にUIとして作成しますが、今回はButtonコンポーネントでもEventTriggerでもなくスクリプトから画像へのタップを検出する形で実装してみましょう。

 

VirtualButton.cs (新規)

画像UIオブジェクトにアタッチするとボタンとして扱えるクラスを作成します。さらに押した瞬間だけではなく、「押しっぱなし」や「指を離した」状態も取得できるようにしていきます。

UIに対するタップ開始時などのタイミングを取得するためにOnPointerDownOnPointerUpの2つのメソッドを定義しています。

OnPointerDownはそのUIに対してタップ開始したタイミングで呼び出され、OnPointerUpは指が離れたタイミングで1回呼び出されます。

Buttonコンポーネント等を必要とせずこのスクリプトをアタッチするだけでOKですが、IPointerDownHandlerIPointerUpHandlerの2つを継承のためクラス右側に書くことが必要です(インターフェースと呼ばれる機能です)。

関連記事:Unity C# インターフェースの使い方・ポリモーフィズムの考え方

public変数のinput・down・upを他クラスから参照することで、そのボタンが今押されたばかりなのか、継続して入力中なのかといった情報を取得できます。ボタンが押されっぱなしの間はinputがtrueになります。これによりGetKeyDownメソッド等と近い運用が可能です。

 

down変数とup変数は毎フレームfalseに初期化する必要がありますが、通常のUpdateでそれをやってしまうと、他クラスからdownやupの情報を取得したいタイミングで既に初期化されてしまっている可能性が発生するのでLateUpdateを用いて通常のUpdate後に初期化が行われるようにしています。

 

仮想ボタンプレハブの設置

StageManagerプレハブの編集画面に入り、まずはCanvas以下に画像UIとしてVirtualButtonオブジェクトを作成します。

Source Imageはプレハブ化後にインスタンスでそれぞれ設定するのでここでは未設定で大丈夫です。

先ほどのVirtual Buttonクラスをアタッチします。この状態でプレハブ化しましょう。

 

仮想ボタンインスタンス作成・配置

プレハブからインスタンスを作成していき、全ての仮想ボタンをCanvas上に配置しましょう。

必要になる仮想ボタンは以下の6つです。

使用する画像は全てTextures/VirtualButtons以下にあります。

オブジェクト名 対応ボタン 画像ファイル名 PosX PosY
VirtualButton_Left 左移動 VirtualButton_Left.png -450 -170
VirtualButton_Right 右移動 VirtualButton_Right.png -330 -170
VirtualButton_Jump ジャンプ VirtualButton_Jump.png 440 -120
VirtualButton_Fire 攻撃 VirtualButton_Fire.png 310 -170
VirtualButton_ChangeWeaponCW 武器切り替え(時計周り) VirtualButton_ChangeWeaponCW.png -335 190
VirtualButton_ChangeWeaponCCW 武器切り替え(反時計周り) VirtualButton_ChangeWeaponCCW.png -505 190

VirtualButton_ChangeWeaponCWとVirtualButton_ChangeWeaponCCWは画像のサイズを70×70くらいにすると良い

 

注意点として、OnPointerDown等の機能を使用する場合はシーン内にEventSystemオブジェクトが存在している必要があります。

StageManagerプレハブ内に無い場合は、新規オブジェクト作成で[UI]→[Event System]の順にクリックして追加しておきましょう。

 

ここからはスクリプト内でキー入力を取っていた箇所について、上記の仮想ボタンからの入力にも対応できるようにしていきます。

(ちなみにButtonUIやEventTriggerはスマートフォンのタップでも動作するので、それらしか使っていないStageSelectシーンに対しては作業不要です。)

 

StageManager.cs 変数宣言部

各仮想ボタンへの参照を他クラスから使用できるようにしました。

早速Inspectorから変数名に対応するボタンへの参照をセットしておきます。

 

ActorController.cs

上記の仮想ボタン情報を使用して、キー入力とあわせて仮想ボタンからの入力にも対応できるよう各if文を変更していきます。

続きを読む

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

StageManagerオブジェクトの設定

Sceneの編集に戻り、WeaponGetAnimationクラスを動作できるよう設定していきましょう。

 

StageManagerオブジェクト(インスタンス)を選択し、まずはデフォルトで持っているStageManagerコンポーネントを削除(Remove Component)します。

通常のステージではないのでステージ進行処理を行うこのクラスは不要になるためです。

なお、Inspector上では削除操作を行ってもRemovedの表示になるだけで姿が残っているように見えますが、きちんと削除はなされているので安心してください。(このオブジェクトがプレハブのインスタンスであるためこのような表示になっています。)

 

また、Audio Sourceコンポーネントで再生するBGMのClipも適当な音源に設定しておきます。

 

最後にこのオブジェクトにWeaponGetAnimationクラスをアタッチします。

 

シーン内UIの設定

現在は通常ステージシーン用のHPゲージ等のUIが表示されたままですので、Canvasオブジェクト以下にあるUIオブジェクトを一旦全て非表示(非アクティブ)にしておきます。

 

そして「新しい武器を入手!」という文字を表示するためのTextUIオブジェクトを追加します。オブジェクト名はWeaponGetLogoとしました。

表示位置・表示内容は任意としますが、下図のように画面上部の邪魔にならない位置に置くと良いでしょう。

 

文字が背景と被って見づらい!という場合は文字の後ろに別のImageUIオブジェクトを用意するか、Textを縁取りしてしましょう。縁取りの方法はこのTextUIオブジェクトに対してOutlineコンポーネントを追加でアタッチするだけです。

Outlineコンポーネントによって任意の色・太さで輪郭線を引けるので覚えておきましょう。

 

Text表示の注意点として、標準のArialフォントを使用すると日本語の表示の際に文字化けする可能性があります。それを完全に防ぎたい場合は別途日本語対応したフォントをインポートし、TextコンポーネントのFont設定を変更する必要があります。

 

これで新しい武器の試し撃ち演出が出来上がりました。デバッグ時はステージセレクト画面からステージを選択し、そのままクリアすれば正しい演出を確認できます。

 

PlayerPrefsによるデータ保存

現在のゲームは一度アプリを終了すると、次に起動した時に全てのデータが初期化されています。スマートフォン端末内にデータを保存する仕組みがないためです。

今回はデータを保存する方法の1つであるPlayerPrefsを使用してみましょう。

 

PlayerPrefsを使用すると任意の数値や文字列(Value)を、対応するキー(Key)に紐づけて保存・ロードできます。キーはそれぞれ重複しない文字列を指定します。

Unity標準の機能であり、特にセットアップの手続きは不要です。早速スクリプトを編集しましょう。

 

Data.cs

PlayerPrefsの機能を用いてデータの保存・ロード機能を実装します。

データのロードはInitialProcess内でそのまま行います。

PlayerPrefsの各メソッドを使用することでデータの読み書きが可能になります。以下が使用するメソッドの一覧です。

機能 使用するメソッド 解説
変数データ保存(書き出し) SetFloat (Key, Value)
SetInt (Key, Value)
SetString (Key, Value)
Key:他のキーと重複なしのstring型
Value:保存したい数値・文章データ
保存の適用 Save () Set〇〇系で保存した数値データをファイルに反映させる
変数データ取得(読み込み) GetFloat (Key, Value)
GetInt (Key, Value)
GetString (Key, Value)
Key:他のキーと重複なしのstring型
Value:キーに対応する値がセーブデータに存在しなかった場合、代わりに読み取られる数値・文章
全データ消去 DeleteAll () 1キー分のデータを消去するDeleteKeyメソッドも存在する

SetBoolやGetBoolがあれば良かったのですが、無いので今回はSetIntとGetIntで代用しています。

また、SetIntで値を保存した後はSaveメソッドも呼ばないと保存が適用されないので注意してください。

 

StageManager.cs内 StageClearメソッド

Dataクラス内に用意したSaveDatasメソッドを呼び出すように、ステージクリア時の処理を追加しておきます。

これでテストプレイを行うと、いずれかのステージをクリアした後に再起動した時にそのデータが受け継がれていることが確認できます。

 

まとめ

これでスマートフォン対応および広告の表示、データの保存等まで含め全ての工程を完了しました。大変お疲れ様でした!

本講座ではロックマン風2Dアクションゲームを作るまでに必要な流れを解説・実装してきました。

まだステージの作り等シンプルな状態ではあります。キャラクターを変更したり、ギミックを追加したりしてこのゲームにあなたのオリジナリティを足していくのも良いですし、復習も含めて1から作り直してみたり、Unity入門の森の他の講座の要素を追加してみるのも良いでしょう。

あなたの作ったゲームがリリースされることを楽しみにしています!

Unity 2Dアクションゲームの作り方講座に戻る>>

 

 

 



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

コメント

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