プラットフォームの変更とクロスプラットフォーム開発【Unityスタートガイド10-4】

Unityのいいところは、ひとつのプロジェクトからパソコン・スマートフォン・Webなど、いろいろなプラットフォーム向けのゲームを作れること!第10章の最後は、プラットフォームの切り替え方と、Build Profilesで複数の設定を使い分ける方法、スマートフォン向けの準備をご紹介します。

目次

この記事で学べること

  • プラットフォームの切り替え方
  • Build Profilesで、プラットフォームごとの設定をいくつも作る方法
  • Android・iOS向けの準備
  • スクリプトでプラットフォームごとに処理を分ける方法
  • いろいろなプラットフォームで操作できるようにするコツ

前提知識

クロスプラットフォーム開発とは?

ひとつのプロジェクトから、Windows・Mac・Android・iOS・Webなど、複数のプラットフォーム向けにビルドすることです。

ただし、プラットフォームごとに違いもあります。

  • 操作:パソコンはキーボードとマウス、スマートフォンはタッチ
  • 画面:横長・縦長、解像度がいろいろ
  • 性能:スマートフォンやWebは、パソコンより重い処理が苦手

プラットフォームを切り替えよう

  • File>Build Profilesを開く(Ctrl+Shift+B)
  • 左のPlatformsの一覧で、切り替えたいプラットフォームを選ぶ
  • Switch Platformを押す

画像などのデータをそのプラットフォーム用に変換し直すので、初めての切り替えは時間がかかります。プロジェクトが大きいほど時間がかかるので、作り始めの早い段階で、メインのプラットフォームに切り替えておくのがオススメです。

Build Profilesで設定を使い分ける

Unity6のBuild Profilesでは、同じプラットフォームでも設定をいくつも作っておけます。

  • 例:「Windows(開発用)」はDevelopment BuildをOn、「Windows(配布用)」はOff
  • 例:「体験版」は最初のステージのシーンだけ、「製品版」は全部のシーン

作り方:

  • Build ProfilesウィンドウのAdd Build Profileを押す
  • プラットフォームを選んで作成し、名前を付ける
  • 作ったプロファイルごとに、Scene ListやDevelopment Buildなどを設定できる
    • Scene Listをプロファイルごとに変えたい場合は、そのプロファイルの設定で、共通のScene Listを使うかどうかを切り替えます
  • 使うときは、そのプロファイルを選んでSwitch Profile(Activeにする)

ビルドに入れるシーンの一覧は、Player SettingsではなくBuild Profiles側(Scene List)で管理します。

スマートフォン向けの準備

Android

  • Unity HubのInstallsで、使っているバージョンのAdd modulesを開く
  • Android Build Supportと、その下のOpenJDK・Android SDK & NDK Toolsにチェックを入れてインストール
    • Androidのビルドに必要なものが、まとめて入ります。Android Studioを別に入れる必要はありません

Player Settings(Edit>Project Settings>Player)は、上にプラットフォームごとのタブが並んでいて、タブごとに設定が分かれています。確認しておく項目:

  • Package Name:アプリの名前の識別子(例:com.あなたの名前.ゲーム名)。世界でひとつだけの名前にします
  • Minimum API Level / Target API Level:対応するAndroidのバージョン
    • Google Playで公開するには、Googleが決めた新しさ以上のTarget APIが必要です。公開するときは、Google Playの最新の条件を確認しましょう

iOS

  • Unity HubでiOS Build Supportのモジュールを追加
  • iOSのアプリの最後の仕上げにはMacとXcodeが必要です(WindowsではXcodeのプロジェクトを出すところまで)
  • 実機で動かす・公開するには、Appleのアカウント(公開にはApple Developer Programへの登録)が必要です

Player Settingsで確認しておく項目:

  • Bundle Identifier:アプリの識別子(Androidと同じ考え方)
  • Version / Build:バージョンとビルド番号

スクリプトでプラットフォームごとに分ける

プラットフォームによって処理を変えたいときは、#ifを使います。

using UnityEngine;

public class PlatformCheck : MonoBehaviour
{
    void Start()
    {
#if UNITY_EDITOR
        Debug.Log("Unityエディタで実行中です");
#elif UNITY_ANDROID || UNITY_IOS
        Debug.Log("スマートフォンで実行中です");
#elif UNITY_WEBGL
        Debug.Log("Webブラウザで実行中です");
#else
        Debug.Log("パソコンで実行中です");
#endif
    }
}

主な名前:

  • UNITY_EDITOR:Unityエディタの中
  • UNITY_STANDALONE:Windows / Mac / Linux
  • UNITY_ANDROID:Android
  • UNITY_IOS:iOS
  • UNITY_WEBGL:Web(名前はWebGLのまま)

#ifは、ビルドのときに当てはまらない部分をまるごと取り除く仕組みです。実行中に調べたいときは、Application.platformやApplication.isMobilePlatformも使えます。

いろいろなプラットフォームで操作できるようにする

入力はInput Systemで

6-7の記事で使ったInputSystem_Actionsは、アクションにキーボード・ゲームパッドなどのボタンをまとめて割り当てられます。スクリプトでは「Move」「Jump」を見るだけなので、操作する機械が変わってもスクリプトはそのままです。

// キーボードでも、ゲームパッドでも同じ書き方
Vector2 move = inputActions.Player.Move.ReadValue<Vector2>();
if (inputActions.Player.Jump.WasPressedThisFrame())
{
    Debug.Log("ジャンプ!");
}

スマートフォンのタッチ操作

  • 画面にスティックやボタンを表示して、そこにアクションを割り当てる方法があります(Input SystemのOn-Screen Stick・On-Screen Buttonコンポーネント)
  • UIのボタン(第9章)を押したときに処理を呼ぶ方法も簡単です

注意点やヒント

  • 性能:スマートフォンやWebでは、テクスチャのMax Sizeを下げる、画面に出すものを減らすなど、軽くする工夫をしましょう
  • 画面の大きさ:UIは第9章のCanvas Scalerで、画面の大きさに合わせて広がるようにしておきます
  • こまめに実機で確認:エディタでは動いても、実機では重かったり操作しにくかったりします
スライム

全部のプラットフォームに対応しようとしたら、やることが多すぎて手が止まった・・・

フェアリー

まずはパソコンとWebの2つからで十分!スマートフォンは、ゲームが完成に近づいてからでも間に合うよ

よくあるエラーと対処法

エラー:Androidでビルド出来ない(SDKやJDKが見つからない)

  • 原因:Android Build Supportの下のOpenJDK・Android SDK & NDK Toolsが入っていない
  • 対処法:Unity HubのAdd modulesで、3つともチェックを入れて入れ直す

エラー:iOS向けのビルドが最後まで出来ない

  • 原因:UnityはXcodeのプロジェクトを出力するところまでで、アプリにするにはMacのXcodeが必要
  • 対処法:出力したプロジェクトをMacのXcodeで開いてビルドする

エラー:切り替えに時間がかかりすぎる

  • 原因:プロジェクトのアセットが多く、変換に時間がかかっている
  • 対処法:プラットフォームは作り始めに決めておき、何度も切り替えないようにする。設定の違いはBuild Profilesで管理する

まとめ

  • プラットフォームの切り替えはFile>Build ProfilesでSwitch Platform
  • Build Profilesで、開発用・配布用・体験版など、設定をいくつも作っておける
  • AndroidはHubのモジュール(OpenJDK・SDK & NDK)、iOSはMacとXcodeが必要
  • プラットフォームごとの処理は#if UNITY_ANDROIDなど
  • 入力はInput Systemにしておくと、操作する機械が変わってもスクリプトはそのまま

これで第10章はおしまいです!作ったゲームを、いろいろな人に届けられるようになりました。

次のステップ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次