Search Unity

Unityエディタ上のシーンをアプリケーション上のシーンと同期させる「UnityPlayerSync」の解説

はじめに

(本記事で紹介するツールは、ユニティ・テクノロジーズ・ジャパンの社員が個人的に開発・利用していたもので、この度Unityユーザーの皆さんにも自由にご利用いただけるよう無償公開したものです。ツールの使用許諾などはリポジトリのREADME、LICENSEテキストをお読みください。原則として公式サポートはございません)

UnityPlayerSyncはUnityエディタ上のシーンをアプリケーション上のシーンと同期させるツールです。同様のツールとして、UnityChoseKunというツールも有りますがそちらは以下の様な違いがあるそうです。

UnityChoseKunはアプリケーション上のHierarchyの情報及び必要最低限のComponentの情報を取得し、その情報をアプリケーションへダイレクトに反映し、UnityPlayerSyncはアプリケーションのHierarchyをUnityEditor上にそのまま再現し、変更された内容をアプリケーションに反映します。 その為、UnityPlayerSyncはUnityChoseKunよりも得られる情報量が多い一方、アプリケーションとUnityEditorの同期にかかる時間はUnityChoseKunの方が短くなっています。

例えば、アプリケーションのパラメーターを調整してパフォーマンスチューニングや見た目の調整を行うような用途であればUnityChoseKunが適しています。 一方、UnityPlayerSyncは通常のUnityEditorのワークフローと殆ど変わらないGUIで操作することが出来る為、エンジニア以外のクリエーターでも直観的に操作が出来るというメリットがあります。

なお、正確には同期ではなく、限られた情報からの復元である為に復元出来ないケースも多々あるとの事です。

インストール

RemoteConnectをインストールする

このツールではRemoteConnectも使用しています。まずはこちらをインストールします。

UnityエディタのメニューからWindow-> PackageManagerと選択し、Package Managerウィンドウを開きます。

ウィンドウの左上にある+のアイコンをクリックし、「Add package from git URL...」を選択します。

入力欄にhttps://github.com/katsumasa/RemoteConnect.gitと入力し、「Add」ボタンを押すとインストールが行われます。

UnityPlayerSyncをインストールする

RemoteConnectをインストールした時と同じ手順で最後の入力はhttps://github.com/katsumasa/UnityPlayerSync.gitと入力し、「Add」ボタンを押すとUnityPlayerSyncのインストールが行われます。

実際に使ってみる

アプリへビルドした時に同期処理を行いたいシーンにUnityPlayerSync.prefabを追加します。

後で編集を行うオブジェクトとしてCubeCapsuleなどのオブジェクトを追加しておきます。

この状態でアプリをビルドします。Build SettingsではDevelopment BuildAutoConnect Profilerにチェックを付けておいて下さい。なお、WindowsやMacアプリとしてビルドする場合にはフルスクリーンではなく、ウィンドウモードで起動するアプリとしてビルドしておくと後の操作がし易いのでオススメです。

アプリのビルドが終わり、起動したのを確認したらUnityエディタで作業をします。

まず、新規にシーンを作成します。既に開き済みのシーンで作業をして良いのですが同期処理が行われたタイミングでシーンの内容が編集されますので新規にシーンで作業をするのを推奨します。

シーンの作成が終わったらHierarchyビューの余白部分で右クリックし、メニューの中からSyncを選択します。

すると以下の様なウィンドウが表示されるので、SYNCボタンをクリックします。これによりUnityエディタ上のシーンが実行中のアプリへ転送されます。Gameビューの表示がアプリの画面と同じになったら成功です。

これでデータをUnityエディタ側と同期できたので次は変更をして、その変更をアプリ側に同期してみましょう。

Sceneビュー上でCubeの大きさや位置を変更して下さい。

次にCubeの変更内容をアプリ側に同期します。今回、変更したのはTransformですので、InspectorTransform上で右クリックし、メニューの中からSyncを選択し、同期処理を実行させます。これで現在のUnityエディタ上でのCubeのTransform情報がアプリ側に同期されます。

Scene全体を同期した場合はUnityChoseKunの方が速いのですが、UnityPlayerSyncは部分的に同期する機能がある為、今回の様に変更箇所が少ない場合にはUnityPlayerSyncの方が処理が速く終わります。

注意点

UnityPlayerSyncで同期出来るものは以下のものに限られます。

  • Hierarchy内のGameObject
  • GameObjectにAddされているComponent
  • Component内でpublicなプロパティ及びSerializeアトリビュートを持つフィールドの値(Inspector上で表示されているものと同義)

その為、例えばMaterialを変更したい場合には直接Materialを編集して同期する事は出来ません。変更したいMaterialもシーン上に読み込んでおいた状態でMesh Rendererで設定されているMaterialを変更した後にSyncを実行するという手順を行う必要があります。

おわりに

簡単にシーンの同期をする事ができる「UnityPlayerSync」、よろしければ使ってみて下さい。

この記事はいかがでしたか?