【TinyUnity】ProjectTiny0.20を触ってみよう! #1

3Dゲームがブラウザ上で爆速で動くProjectTiny0.20、始めてみたいけど、実際どうやってプロジェクトのセットアップをするの?という人も多いのではないでしょうか。

今回は最初のセットアップビルドセッティングを説明します

たかがセットアップと思いがちですが、0.20になってから結構めんどくさくなりました。

動作環境

Unity 2019.3.0f1 以降をインストールしてください。

それ以前のバージョンでは動作しないので注意です。

さぁ!セットアップ!…の前に

セットアップ面倒くさいな~って思う人は公式が出しているサンプルプロジェクトをコピーして、不要なスクリプトを消して利用すればいいと思います。

公式からも一番簡単な方法として案内されています。

Project Tiny Samples

https://github.com/Unity-Technologies/ProjectTinySamples

今後確実にこの辺りは改善されますし、あまりにも手間なので、私個人としても公式サンプルを流用することをお勧めします。

プロジェクトセットアップ!

今から行う手順は、今後簡略化されることがアナウンスされています。

しかし、その簡略化がいつ行われるかわからないので、一応ゼロから出来るようになっておきましょう。

簡略化されたときはまた再度書き直します。

まずは3Dテンプレートでプロジェクトを作ろう!

とりあえず、3Dテンプレートでいつも通りプロジェクトを作成しましょう。

PackageManagerでPreview機能を表示させよう!

Advanced→Show Preview Packages

でPreviewPackageが一覧に表示されるようになります。

まずは HybridRendererを入れよう!

HybridRenderer

がまずは必要になります。

細かい説明は省きますが、ECSでMeshを描画する際などに使用されます

TinyUnityはECSを使用しているので必要になります。

この時、最新版ではなくPreview.4-0.3.0をインストールしてください

最新の0.3.1等、別のバージョンをインストールするとエラーが出ます。

UniversalRP をインストール!

Project Tinyの3Dレンダラーは、UniversalRPのサブセットに一致するように設計されている都合上

UniversalRP

も必要なので、一覧から検索してインストールしましょう。

インストールが終わったら、次はUniversalRPの設定です。

UniversalRP のPipelineAssetを作成 !

Create→Rendering→Universal Render Pipelilne→
Pipeline Asset(Forward Renderer)

と進み、PipelineAssetを作成しましょう。名前は何でもいいです。

ProjectSettingで作ったPipelineAssetを設定しよう !

File→Build Settings→Player Settings→Graphics

と進んでいき、

Scriptable Render Pipeline Settings

に先ほど作成したPipelineAssetを設定してください。

これで一旦Renderer関係のセッティングは完了です。

一旦Unityを閉じてください。

基本パッケージをセットアップ!

manufest.json

に追加しましょう!

manufest.json

Projectフォルダ→Packages

の中にあります

この、manufest.jsonに、以下の文を書き足しましょう。

"com.unity.dots.runtime": "0.1.0-preview.5", 
"com.unity.tiny": "0.20.0-preview.3",
"com.unity.tiny.desktop": "0.20.0-preview.2", "com.unity.tiny.rendering": "0.20.0-preview.3", "com.unity.tiny.web": "0.20.0-preview.2", 
"com.unity.platforms": "0.1.7-preview.3", "com.unity.platforms.android": "0.1.7-preview.6", "com.unity.platforms.desktop": "0.1.7-preview.2", "com.unity.platforms.ios": "0.1.7-preview.10", "com.unity.platforms.linux": "0.1.7-preview.3", "com.unity.platforms.macos": "0.1.7-preview.3", "com.unity.platforms.web": "0.1.7-preview.6", "com.unity.platforms.windows": "0.1.7-preview.4",
開いてすぐはこんな感じのはず
上記の文を末尾にペースト!
~この工程での余談~

今回は、わかりやすく対応プラットフォームすべてのパッケージをインストールしますが、本来であればビルドしたいプラットフォーム向けのモノだけで構いません。

しかしながら、どのプラットフォーム向けだとしても、

com.unity.platforms.windows が必ず必要なので注意しましょう

HTML5ゲームだけであれば

"com.unity.dots.runtime": "0.1.0-preview.5", 
"com.unity.tiny": "0.20.0-preview.3", 
"com.unity.tiny.desktop": "0.20.0-preview.2", "com.unity.tiny.rendering": "0.20.0-preview.3", "com.unity.tiny.web": "0.20.0-preview.2",
"com.unity.platforms": "0.1.7-preview.3", "com.unity.platforms.web": "0.1.7-preview.6", "com.unity.platforms.windows": "0.1.7-preview.4",

これを書き足すだけで充分だと思います。

書き足したら、保存して、再度Projectを開きましょう!

この時、プロジェクトを開く前に長いインストールが走ると思いますが、先ほど追記したパッケージをインストールしていることになります。気長に待ちましょう。

Assembly Definitionファイルを作ろう!

今回から、TinyUnity時専用のモードであるDOTSModeが廃止されたこともあり、Assembly Definitionファイルを作成し、TinyUnityで使用する Assembly の参照を定義してあげる必要があります。

CreateAssembly Definition

で作成することができます

名前に関しては何でもいいです

判りやすい名前にはしておいてください

今回は「TinyUnity」というストレートな名前で設定しました

Assembly Definitionファイルを設定しよう!

先ほど作成したAssemblyDefinitionファイルをクリックし、Inspectorに情報を表示します

Auto ReferencedとUse GUIDsのチェックを外します

Assembly Definition Referencesを以下の画像と同様に設定します

一個一個検索して入れていくしかないので、正直メンドクサイ。

これで、一旦TinyUnityのセットアップが完了しました!

SubSceneを作ろう!

TinyUnityでは、DOTS変換ワークフローを採用しています。

その影響により、Sceneは通常のSceneではなく、SubSceneというDOTS用のScene形式を用います

まずは普通に新しいSceneを作成しましょう

Sceneの名前は「Main」にしてください

次に、MainScene上に

「Tiny3DTestSubScene」という名前のEmptyGameObjectを作成します。

正直、名前は何でもいいのですが、この時の名前がSubSceneの名前になるので、気を付けましょう。

先ほど作成した「Tiny3DTestSubScene」を右クリックし、New SubScene From Selection をクリックしましょう

これでSubSceneが完成しました。

この時、SubScene側にもDirectionLightとMainCameraをコピーしておきましょう

なぜ両方にカメラとライトが必要かというと、

現状は DOTSランタイム上、DOTSハイブリッド上で二つの見え方が存在するのですが、現在、その二つは互換性がありません。

SubScene内のカメラとライトは、Project Tinyビルドで使用されることになります。

最上位のメインシーンにあるものは、エディター内のプレビュー用です。これは実際にProjectTinyとしてビルドした際には含まれないことになります。

なお、この仕様は今後改善される予定です。

ここまでくれば、後はSubSceneにオブジェクトを足せば、Cube等の標準プリミティブであれば自動的にEntityとして変換されます。

大体のComponentは標準で変換されず、独自で各ユーザーが定義する必要があります。定義の方法についてはまた別の記事で紹介します

とりあえず今回はただのCubeを追加しました

ビルドしよう!

さて、次はビルドの方法を説明します。

TinyUnityでは通常のUnityと同様の方法でビルド、プレイできません。

ビルドには

Build Settings for DOTS Runtime

という独自のアセットを使用します

Build Settings for DOTS Runtime を作ろう!

CreateBuildBuild Settings for DOTS Runtime

で作ることができます

そうしたら、作成した「DotsRTBuildSettings」をクリックしてください、Inspectorが以下のような表示になると思います。

ここから、ビルド時のセッティングおよびビルドを行うことができます。

今回はとりあえずビルドして、実行されるかを確かめたいので、最低限の設定だけ行います

Scene ListのSizeを1にして表示するシーンをセットして、スロットに先ほど作成した「Main」Sceneをセット

RootAssemblyに以前作成した、Assembly Definition(私はTinyUnityと命名していました)をセット

右下の大きな「+」マークをクリックして、「Conversion System Filter Settings」を追加する

Conversion System Filter Settings のSizeを1にして、スロットに「Unity.Rendernig.Hybrid」をセット

Targetの欄を変更すれば、Webビルドも勿論可能です。

今回から、 セキュリティ上の観点からWebビルドの場合は自分でHTMLサーバーを建て、サーバーに一度配置しないと確認できなくなりました。

そのため、デバッグ等は基本的にWindows.NET等のクライアントのみで動作確認が可能なプラットフォームで行うことをお勧めします。

設定が終われば、Applyを押しましょう!

いざビルド!

右上にあるBuildAndRunをクリックしましょう!ビルドが始まり、自動的に起動します!

実行結果:さすがに味気ないね。

なお、実行物ですが、

⁨Projectフォルダ⁩→Builds⁩→DotsRTBuildSettings

に保存されています。フォルダ分け等はされておらず、そのまま直下にデータ群がばら撒かれています。

こんな感じでばら撒かれている。正直勘弁してほしい….

お疲れさまでした。

まとめ

正直、1からセットアップするのはめちゃめちゃめんどくさいです。

サンプルプロジェクトをそのままコピーして、要らないAsset消して使いまわす方が良いと思います。

毎回この作業を行うのはあまりにも非効率的であることは確かです。

次回は入力受付、実際にオブジェクトを移動させてみます。

参考ページ

DOTS Runtime & Project Tiny: Getting Started [Public]

https://docs.google.com/document/d/1A8hen2hLFY5FLkC5gd3JP2Z-IpHfnAX-CpYLK3aOdwA/edit#heading=h.uqjyrv3tnvt8