コンパクトなUnityゲームを出力するTiny Modeのプレビュー版が公開されました。
ということで、早速触ってみます。
この記事はTiny Mode 0.13.2 previewで作成されています。
モバイルブラウザ向けUnity
Tiny Modeは、モバイルブラウザやインスタントゲーム、アプリ内広告(ゲーム)向けゲームを出力する機能みたいです。
小さく、軽く、早いUnityです。
WebGLのように「モバイル”でも”動く」ではなく、完全にモバイルブラウザのようなコンパクトな環境向けにチューンされる物で、現行のUnityと比較して使用出来る機能が大きく異なります。
どんな物かは、実際にプレイしてもらうと理解が早いです。
かなりサクっと起動します。
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
からRotation
やScale
を取り外したり出来ます。
必要ない機能は削る事を想定しています。通常のUnityと異なりモジュールがキッチリしているので、不要な機能は削られやすく、また削れば削るほどコアランタイムが小さくなります。
これはプロジェクト単位で設定するみたいです。
Previewの現状は完全にHTML5の2D向けですが、将来的にインスタント3DやARにも対応するみたいです。
スクリプトはECSベース
Tiny ModeではGameObject/ComponentではなくECSベースです。 ECSの考え方は、雑に言えば「オブジェクトを集めて一気に処理する」です。
- 処理を担当する機能(
System
)がオブジェクト(Entity
)を集めて一気に処理を行う - 処理を行う対象のオブジェクト(
Entity
)は、Entity
が持っているデータ(ComonentData
)の組み合わせで決まる
言ってしまえばコレだけです。
(その他にも色々と面倒な事があるのですが、根底はコレです)
Tiny Modeは完全にPure ECSです。
ただし、多くの部分がGUIで制御出来るようになっています。例えばPrefab
の利用やComponentData
をGUIで作るなど。
またComponentBehaviour
というMonoBehaviourに近いモデルのクラスが追加されています。OnEntityEnabledやOnDisableEntityなどECSでやるのが面倒だったイベント処理を担当してくれます。
ただOnUpdateは要らないんじゃないかな。ECSの挙動的に明らかに効率悪いし、マニュアルにも反復処理はComponentSystemを使うべきってなってるし。
なお現状処理はTypeScript
で記述しますが、プレビューが外れるまでにTypeScript
からC#
になることが確定しています。
TypeScript
は文法的にC#
に似ていますが、別物なのでC#
来るまで触らないというのは選択肢としてアリかなと思います。
またC#
でないとBurstコンパイラ
が使えないので、最大性能は出ません。なので今の段階でベンチマークすることはそれ程意味はなさそうです。
レンダリングはWebGLとCanvasの両方に対応
レンダリングの設定はWebGL
とCanvas
の両方に切り替えが可能です。
この辺りはコンテンツによって最適解が違う感じがします。
試し方
Tiny Modeを試す方法です。
導入
Package Manager
から導入出来ます。
とりあえず試したい場合は、メニューアイテム > Tiny > Import Samples
からサンプルパッケージが導入出来ます。
("registry": "https://staging-packages.unity.com"は不要です)
どんなゲームが含まれているのかは、以下の記事が分かりやすいです。
機能 | 内容 |
---|---|
Project | ゲームのプロジェクト(***.utproject)。 UnityProject内に複数存在する (Ad等は単体のゲームだけじゃないからかな) |
Group | 概念的にはScene やPrefab が近い(****.utdata) |
Entity | GameObjectのようなもの |
Component | Entity に登録するデータ |
System | フィルタで指定したComponent に対して処理を行う(***.ts) |
Behaviour | フィルタで指定したComponent が生成されたり破棄されたりすると呼ばれる(***.ts) |
ゲームの再生
再生は普通に「再生ボタン」ですが、GameViewではなくブラウザで実行します。 何もしなければPCのブラウザですが、QRコードを読み込めば同じネットワーク上のモバイルでも動作します。QRコードで起動したゲームは、タブを閉じなければ次起動したときに勝手にコンテンツを更新して再起動してくれます。
この時、Unityエディターでポーズを選択すると、現在動いているシーン内の状況をComponentDataの中身も含めて再現します。これはモバイル上でゲームを動作させている場合も同様です。(Live Link)
同様にプロファイラーが使えるっぽいです。
なお、シーンの再現やプロファイラはデバッグ、開発モードでビルドした時のみです。リリースビルドだと出来ません
結局名前はTiny Unity? Tiny Mode?
Project Tinyです。
名前は現状、安定していないみたいです。
自分が聞いた限りだと、以下の名前がありました。ど忘れした、もっと別の名前も言ってた気がしますが、まぁ出てこないって事は二度と聞かないでしょう。
- Tiny Mode
- Tiny Unity
- Unity for Small things
- Project Tiny
名前が安定したら変更します。
感想
多くの機能が完全に新規なのでムムってなりますが、PrefabやProfiler(Frame Debugger)の機能が使えたり、いつものHierarchy & Inspectorによるデバッグが出来るので、思ってるよりすんなりと使えます。
関連
使い方を紹介しています。 qiita.com
マニュアルです