Skip to content

Project-PLATEAU/PLATEAU-Toolkits-Sample-CityRescueMultiPlay

Repository files navigation

City Rescue Multi Play

PLATEAU-SDK-Toolkits-for-Unityを使ったサンプルプロジェクト

cityrescue_kv

更新履歴

更新日時 更新内容
2024/4/5 City Rescue Multi Play チュートリアル公開
2023/12/25 City Rescue Multi Play 初回リリース

目次

1. サンプルプロジェクトの概要

1-1. サンプルプロジェクトで体験できること

複数人向けの災害シミュレータを例に取り、PLATEAUの3D都市モデルとマルチプレイ機能を組み合わせることで複数人で同時参加可能なアプリを構築する方法を紹介します。
このサンプルプロジェクトは、3D都市モデルのメタデータを参照して洪水のシミュレーションを行い、被害状況や避難計画などを複数人でプランニングする体験となっています。
マルチプレイ機能の実装には様々な方法がありますが、このサンプルプロジェクトでは例としてUnity Gaming Servicesを活用しています。
ロビー機能やボイスチャット、テキストチャットなどマルチプレイに必要な機能を簡単に実装することができます。

※このサンプルプロジェクトの主要機能の簡易的な実装例をチュートリアルで紹介しています。実装方法については、こちらのチュートリアルをご参照ください。

1-2. Unityプロジェクト情報

Unity バージョン

  • Unity 2021.3.30

レンダリングパイプライン

  • HDRP

※ Built-in Rendering Pipeline、URPでは動作しません。

1-3. 利用している PLATEAU SDK-Toolkits の機能

このサンプルプロジェクトでは、PLATEAU SDK-Toolkits for Unityの以下の機能を活用しています。

Rendering Toolkit (PLATEAU SDK-Toolkits)

  • 自動テクスチャ生成
  • 環境システム

PLATEAU SDK-Maps-Toolkit

  • Cesium for Unity を使ったPLATEAUモデルの位置合わせ
  • Cesium for Unity を使ったラスターオーバーレイ

2. 利用手順

2-1. 推奨環境

OS環境

以下は本プロジェクトに使用した開発環境です。

  • Windows11
  • macOS Ventura 13.2

その他

  • Unity Cloud アカウント, Unity Gaming Services
    • 本サンプルではUnityが公式に提供している「Unity Gaming Services」を使っています。
    • 本サンプルの利用では一定のデータ量を使用するまで無料で使うことができ、自動的に課金に移行されることはありません。 ※クレジットカードなど決済手段の登録は不要で機能をお試しいただけます。

2-2. Unity Gaming Servicesとは

Unityが提供する、ゲームの機能開発からローンチ、運用に関わる機能を包括的に提供するソリューションです。
詳細は以下のドキュメントをご参照ください。
Unity Gaming Services

このサンプルプロジェクトでは Unity Gaming Services を用いて以下の機能を実装しています。

  • ロビー機能
  • チャット・音声通話機能

2-3. Unity Game Serviceを使うためのプロジェクトセットアップ

本サンプルを利用するためには、Unity Gaming Services をセットアップする必要があります。 以下の手順に沿って、ご自身でUnity Cloudプロジェクトを作成し、プロジェクトIDを入力してください。

※ Unity エディター上で事前にご自身のUnityアカウントでログインしておく必要があります。

  1. Unity Cloudのログインページにアクセスし. "Create account" を選びます。既にアカウントをお持ちの場合は "Sign in"を選択してください。

multiplay_sample_ugs_createaccount

  1. メールアドレス, パスワードなどの必要情報を入れて "Create Unity ID" を押下します。

multiplay_sample_ugs_createaccount_inputinfo

  1. メール確認画面が表示されるので届いたメールの確認リンクをクリックします。

multiplay_sample_ugs_mailconfirm

  1. ダッシュボード画面に遷移するので、"Create Project" ボタンを押下します。

multiplay_sample_ugs_mailconfirm

  1. 任意のプロジェクト名を入力しプロジェクトを作成します。

multiplay_sample_ugs_prpjectname

  1. "Products" メニューを選び、"Vivox Text Chat" の "Launch" ボタンを押下します。

multiplay_sample_vivoxlaunch

  1. プロジェクトに戻り、"Project ID"をコピーします。

multiplay_sample_projectidcopy

サンプルプロジェクトを利用する前の Unity Gaming Services をセットアップする手順は以上です。

2-4. サンプルプロジェクトのビルド方法

ここからはUnity Editorでサンプルプロジェクトのファイルを開いてアプリケーションのビルドを行います。

  1. Unityのサンプルプロジェクトに戻り、Assets/Scenes/Sample01_Lobby.unityを開きます。

multiplay_sample_scene

  1. 最初にHDRPに関してのウィザードが表示されることがありますが、閉じてください。

multiplay_sample_hdrpwizard

  1. メニューより "File" > "Build Settings" を選択します。Build Settings の中から左下にある "Player Settings" を押下してください。

multiplay_sample_buildsettings

  1. "Services" メニューを選択し、"Services General Settings" の中で "New Link" を選択します。

multiplay_sample_ugs_servicesnewlink

  1. "Create a Unity Project ID" の中にプルダウンメニューが表示されますので、表示される候補の中から、2-3. で作成したプロジェクトを選択してください。
    これで作成された Unity Cloud Project と紐付けがされ、本サンプルプロジェクトでマルチプレイヤー機能を使うことができます。

multiplay_sample_ugs_services_selectprj

  1. Build Settings 画面に戻り、下部にある「Build」ボタンを押下します。
    出力先を選択してビルドを開始します。

multiplay_sample_buildsettings

2-5. サンプルプロジェクトの使い方

ビルドしたアプリケーションの操作方法

マルチプレイのホスト側

  1. ビルドしたアプリケーションを開くと、オープニング画面が表示されます。
    「始めましょう」ボタンを押下してください。

multiplay_sample_start

  1. 入出可能なロビー一覧が表示されます。この時点では何も表示されないので、作成タブを押下してください。

multiplay_sample_enterlobby

  1. ルームの作成画面が表示されますので、任意のロビー名を入力して、作成ボタンを押下してください。

multiplay_sample_make_room

  1. ルームメニューが表示されます。他のユーザーが参加するのを待ってから開始ボタンを押下してください。

multiplay_sample_roomrobby

  1. ローディング画面に遷移した後、メイン画面に遷移します。プレイヤーは飛んでいるドローンに変身します。

multiplay_sample_dialog1

multiplay_sample_dialog2

  1. 地物を右クリックで選択すると周囲の浸水深が表示されます。

multiplay_sample_dialog1_findbuild

  1. テキストチャットやボイスチャットを使って、グループメンバーに情報を共有しましょう。

multiplay_sample_chat

  1. 下記の操作により、プレイヤー(ドローン)を操作できます。
項目 操作方法
前へ進む 矢印上キーもしくは「W」キー
後へ進む 矢印下キーもしくは「Z」キー
左へ進む 矢印左キーもしくは「A」キー
右へ進む 矢印右キーもしくは「S」キー
上昇する 「Q」キー
下降する 「E」キー
向きの変更 向きたい方向へ画面上をドラッグ
右クリック 情報を表示したい地物を選択

マルチプレイのクライアント側

  1. ビルドしたアプリケーションを開くと、オープニング画面が表示されます。
    「始めましょう」ボタンを押下してください。

multiplay_sample_clientstart

  1. 入出可能なロビー一覧が表示されます。既にホストがルームを作成している場合はルームが表示されるので選択し、「参加」を押下してください。

multiplay_sample_memberjoin

  1. 同じルームに参加しているメンバーが表示されます。問題なければ「開始」ボタンを押下してください。

multiplay_sample_athermember_join

  1. ローディング画面に遷移した後、ゲーム画面に遷移します。プレイヤーは飛んでいるドローンに変身します。

multiplay_sample_dialog1

3. サンプルプロジェクトのカスタマイズ方法

3-1. 3D都市モデルを差し替える方法

このサンプルプロジェクトでは、例として沼津市の3D都市モデルを配置しています。
PLATEAU SDKを用いて3D都市モデルを読み込むことで、別の地域向けにサンプルプロジェクトをカスタマイズすることができます。
※ 浸水区域情報があるモデルについては3D都市モデルの差し替えで情報が反映されますが、浸水区域情報がないモデルを選択すると正しく表示されないのでご注意ください。

シーンの構成

このサンプルプロジェクトでは、GitHubのファイル容量の制約上、1シーン当たり100MBを超えないように地物の数を限定しています。
ランタイムで複数のサブシーンを重ねてロードすることで広域のモデル表示を実現しています。シーンファイルの構成は以下の通りです。
multiplay_scene_structure

  1. Sample01_Lobby:マルチプレイの準備、ロビー作成などを行うシーンです。
  2. FloodSimulation :マルチプレイでロードされるゲームレベルです。その中には地形の航空写真と浸水領域モデルが配置されています。
  3. Buildings 1~5:1シーンあたり100MBを超えないように地物の数を限定しています。この5つのシーンをアプリケーション実行時に重ねてロードしています。

サブシーン読み込みの無効化

3D都市モデルを差し替えて利用される際、サブシーンの分割は不要のため、以下の手順でサブシーンの読み込みを無効化してください。
"Assets/Scripts/GameLobby/NGO/PlayerCam.cs" を開き、112~115行目の以下のコードを削除してください。
multiplay_sample_customize_playercam
こちらのコードがサブシーンのロードを行う部分なので、削除するとサブシーンがロードされなくなります。

3D都市モデルの配置

"Assets/FloodSimulation" を開き、PLATEAU SDK for Unityを用いて利用したいエリアの3D都市モデルを読み込みます。 具体的な使い方はPLATEAU SDK for Unityのマニュアルをご参照ください。

なお、読み込みを行う際、浸水区域情報を取得できるよう "災害リスク" の項目を "インポートする" に設定してください。 multiplay_customize_sdkimport_disaster_risk

読み込んだ3D都市モデルを図のように "CesiumGeoreference" の子オブジェクトにします。
multiplay_sample_customize_hierarchy

Cesium Globe Anchor コンポーネントを追加します。
multiplay_sample_customize_cga

Maps Toolkitを開き、配置した3D都市モデルを PLATEAUモデル に設定して「PLATEAUモデルの位置を合せる」を選択すると、3D都市モデルの位置が補正されます。
multiplay_sample_customize_alignment

Maps Toolkitの詳しい使い方はMaps Toolkit READMEをご参照ください。

表示する洪水浸水区域モデルの選択

選択するエリアによっては、複数の種類の洪水浸水区域モデルが同時にインポートされることがあります。
デフォルトではインポートされた区域モデルが全て表示されてしまうので、アプリをビルドする前に "fld" と表記のあるモデルから表示対象外のモデルを選択して無効化してください。
multiplay_customize_select_fld

また、エリア選択の際に複数のグリッドを跨いで表示エリアを選択すると、浸水区域情報も複数に分割されてインポートされます。その際には必要なグリッドの情報が全て有効化されていることを確認してください。

水マテリアルの適用

浸水区域に自動的に水のマテリアルが適用されない場合があります。
その場合には "Asset/Shaders/Materials/Water" マテリアルを洪水浸水区域モデル内の子オブジェクトすべてにアタッチしてください。
multiplay_customize_attach_water_mat

3-2. 環境の設定変更

デフォルトでは晴れ・日中の環境に設定されています。
Rendering Toolkit の環境システムを利用することで天候条件や時間帯を変更することが出来ます。
メニューから "PLATEAU" > "PLATEAU Toolkit" > "Rendering Toolkit" を開いてください。
multiplay_customize_renderingmenu

Time of Day の値を変更することで時間帯を変更出来ます。
multiplay_customize_time_dawn multiplay_customize_time_noon

Rain / Snow / Cloudy / Fog Color / FogDistance の値を変更することで天気を調整出来ます。
multiplay_customize_weather_fog

環境システムの各設定項目の内容や、具体的な操作方法はRendering Toolkit READMEをご参照ください。

3-3. 夜間用のテクスチャの設定方法

環境の設定変更で時間帯を夜間に設定すると、デフォルトの3D都市モデルでは建物に光源がないため、建物は真っ暗に表示されてしまいます。
multiplay_customize_time_midnight

そのような場合には、Rendering Toolkit の自動テクスチャ機能を使用することで、夜景を再現することが出来ます。
まず、自動テクスチャを適用したい建物を選択します。
multiplay_customize_select_a_bldg

Rendering Toolkit を開いて「テクスチャ生成」を選択すると夜景用のテクスチャが生成されます。
multiplay_customize_autotexture

ヒエラルキー内の全建物を一括選択して反映したい場合は、検索バーで "bldg t:MeshRenderer p(m_IsActive)=true" と検索すると一括でシーン内の建物を選択出来ます*。
multiplay_customize_select_all_bldgs
multiplay_customize_select_all_bldgs_light

※ この検索にはUnity エディターのカスタム選択機能が必要となります。カスタム選択機能を使用するには "メニュー" > "Edit" > "Preferences" の "Search" タブで "Scene" の項目を "Advanced" に設定してください。
multiplay_customize_custom_search

自動テクスチャ生成後、窓の明かりをOFFにしたい場合は対象となる建物を選択し、Rendering Toolkitを開いて「窓の表示の切り替え」を選択してください。
multiplay_customize_select_a_bldg_dark

設定方法の詳細については Rendering Toolkit README をご参照ください。

5. サンプルプロジェクトの作成チュートリアル

※このサンプルプロジェクトの主要機能の実装例をチュートリアルで紹介しています。実装方法については、こちらのチュートリアルをご参照ください。

ライセンス

  • 本リポジトリはMITライセンスで提供されています。
  • 本システムの開発はユニティ・テクノロジーズ・ジャパン株式会社が行っています。
  • ソースコードおよび関連ドキュメントの著作権は国土交通省に帰属します。

注意事項/利用規約

  • 本ツールはベータバージョンです。バグ、動作不安定、予期せぬ挙動等が発生する可能性があり、動作保証はできかねますのでご了承ください。
  • 本ツールをアンインストールした場合、本ツールの機能で作成されたアセットの動作に不備が発生する可能性があります。
  • 本ツールをアップデートした際は、一度 Unity エディターを再起動することを推奨しています。
  • パフォーマンスの観点から、3km²の範囲に収まる3D都市モデルをダウンロード・インポートすることを推奨しています。
  • インポートする範囲の広さや地物の種類(建物、道路、災害リスクなど)が量に比例して処理負荷が高くなる可能性があります。
  • 本リポジトリの内容は予告なく変更・削除される可能性があります。
  • 本リポジトリの利用により生じた損失及び損害等について、国土交通省はいかなる責任も負わないものとします。