テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】小さく、軽く、早い、Tiny Mode(Project Tiny)についてのアレコレ

f:id:tsubaki_t1:20181207211531j:plain

コンパクトなUnityゲームを出力するTiny Modeのプレビュー版が公開されました。
ということで、早速触ってみます。

この記事はTiny Mode 0.13.2 previewで作成されています。

モバイルブラウザ向けUnity

Tiny Modeは、モバイルブラウザやインスタントゲーム、アプリ内広告(ゲーム)向けゲームを出力する機能みたいです。

小さく、軽く、早いUnityです。

WebGLのように「モバイル”でも”動く」ではなく、完全にモバイルブラウザのようなコンパクトな環境向けにチューンされる物で、現行のUnityと比較して使用出来る機能が大きく異なります。

どんな物かは、実際にプレイしてもらうと理解が早いです。
かなりサクっと起動します。

f:id:tsubaki_t1:20181207211341p:plain

https://tiny-match3.storage.googleapis.com/index.html

現状使える機能群

Tiny Modeが使用する機能は、完全に1から新しく作成したものを利用しています。だからUnityとは比べ物にならないくらい軽量・軽快に動作するんですが、現状利用できる機能がかなり限定されます。

  • UI
    • UILayout(RectTransform)
    • UI( Image, Button, Toggle )
    • Text & Text HTML
  • Assets
    • Audio
    • 2D( Sprite, Tilemap, Particles )
    • Video(HTML5のフルスクリーン)
  • Physics
    • Box2D, Rigidbody2D
  • Animation
    • Tween
    • Animation
  • Ad

Compatibility Cheat Sheet | Package Manager UI website

また、多くの部分で使い勝手が若干異なります。
例えばTransformからRotationScaleを取り外したり出来ます。

f:id:tsubaki_t1:20181207230141j:plain

必要ない機能は削る事を想定しています。通常のUnityと異なりモジュールがキッチリしているので、不要な機能は削られやすく、また削れば削るほどコアランタイムが小さくなります。
これはプロジェクト単位で設定するみたいです。

f:id:tsubaki_t1:20181207225356p:plain

Previewの現状は完全にHTML5の2D向けですが、将来的にインスタント3DやARにも対応するみたいです。

スクリプトはECSベース

Tiny ModeではGameObject/ComponentではなくECSベースです。 ECSの考え方は、雑に言えば「オブジェクトを集めて一気に処理する」です。

  • 処理を担当する機能(System)がオブジェクト(Entity)を集めて一気に処理を行う
  • 処理を行う対象のオブジェクト(Entity)は、Entityが持っているデータ(ComonentData)の組み合わせで決まる

言ってしまえばコレだけです。
(その他にも色々と面倒な事があるのですが、根底はコレです)

f:id:tsubaki_t1:20181207223953g:plain

Tiny Modeは完全にPure ECSです。

ただし、多くの部分がGUIで制御出来るようになっています。例えばPrefabの利用やComponentDataGUIで作るなど。

またComponentBehaviourというMonoBehaviourに近いモデルのクラスが追加されています。OnEntityEnabledやOnDisableEntityなどECSでやるのが面倒だったイベント処理を担当してくれます。
ただOnUpdateは要らないんじゃないかな。ECSの挙動的に明らかに効率悪いし、マニュアルにも反復処理はComponentSystemを使うべきってなってるし。

f:id:tsubaki_t1:20181207214814j:plain

なお現状処理はTypeScriptで記述しますが、プレビューが外れるまでにTypeScriptからC#になることが確定しています。

TypeScriptは文法的にC#に似ていますが、別物なのでC#来るまで触らないというのは選択肢としてアリかなと思います。
またC#でないとBurstコンパイラが使えないので、最大性能は出ません。なので今の段階でベンチマークすることはそれ程意味はなさそうです。

レンダリングWebGLCanvasの両方に対応

レンダリングの設定はWebGLCanvasの両方に切り替えが可能です。
この辺りはコンテンツによって最適解が違う感じがします。

f:id:tsubaki_t1:20181207230632j:plain

試し方

Tiny Modeを試す方法です。

導入

Package Managerから導入出来ます。

f:id:tsubaki_t1:20181207211758j:plain

とりあえず試したい場合は、メニューアイテム > Tiny > Import Samplesからサンプルパッケージが導入出来ます。 ("registry": "https://staging-packages.unity.com"は不要です)

どんなゲームが含まれているのかは、以下の記事が分かりやすいです。

qiita.com

機能 内容
Project ゲームのプロジェクト(***.utproject)。
UnityProject内に複数存在する
(Ad等は単体のゲームだけじゃないからかな)
Group 概念的にはScenePrefabが近い(****.utdata)
Entity GameObjectのようなもの
Component Entityに登録するデータ
System フィルタで指定したComponentに対して処理を行う(***.ts)
Behaviour フィルタで指定したComponentが生成されたり破棄されたりすると呼ばれる(***.ts)

ゲームの再生

再生は普通に「再生ボタン」ですが、GameViewではなくブラウザで実行します。 何もしなければPCのブラウザですが、QRコードを読み込めば同じネットワーク上のモバイルでも動作します。QRコードで起動したゲームは、タブを閉じなければ次起動したときに勝手にコンテンツを更新して再起動してくれます。

f:id:tsubaki_t1:20181207232629j:plain

この時、Unityエディターでポーズを選択すると、現在動いているシーン内の状況をComponentDataの中身も含めて再現します。これはモバイル上でゲームを動作させている場合も同様です。(Live Link)

https://user-images.githubusercontent.com/1644563/49653477-6908bd00-fa78-11e8-9817-c135d63157f3.gif

同様にプロファイラーが使えるっぽいです。

なお、シーンの再現やプロファイラはデバッグ、開発モードでビルドした時のみです。リリースビルドだと出来ません

結局名前はTiny Unity? Tiny Mode?

Project Tinyです。

名前は現状、安定していないみたいです。
自分が聞いた限りだと、以下の名前がありました。ど忘れした、もっと別の名前も言ってた気がしますが、まぁ出てこないって事は二度と聞かないでしょう。

  • Tiny Mode
  • Tiny Unity
  • Unity for Small things
  • Project Tiny

名前が安定したら変更します。

感想

多くの機能が完全に新規なのでムムってなりますが、PrefabやProfiler(Frame Debugger)の機能が使えたり、いつものHierarchy & Inspectorによるデバッグが出来るので、思ってるよりすんなりと使えます。

関連

使い方を紹介しています。 qiita.com

マニュアルです

Tiny Mode | Package Manager UI website

blogs.unity3d.com