制約は工夫の母であり、
工夫は技術の母である。
Constraint is the mother of ingenuity;
ingenuity, the mother of technology.
このガイドは書き途中です。準備中の章は「準備中」と書いています。ワールドに Ulexite TV を置くだけの人は導入ガイドを読んでください。
ガイドは日本語だけですが、アプリ名などの英語表記は必要です。アプリストアの表示に使うため、マニフェストの name は ja と en の両方が必須です(9章)。
いまの状況:Ulexite TV は、テスト版を試してくださる方に個別にお渡ししている段階です。VCC と BOOTH からの配布は、公開の準備ができてから始めます。アプリを作るための開発キット(vrc.ulexite.devkit)も、公開に合わせて配る予定です。そのため、いまはまだ外部の方がアプリを作り始めることはできません。
章の一覧
| 章 | 内容 | 状態 |
|---|---|---|
| 1. はじめに | Ulexite の全体像、アプリの種類、どれを選ぶか | このページ |
| 2. 最初のアプリを作る | データで書くアプリを1つ作り、エミュレーターで確かめるまで | 準備中 |
| 3. ワールドのアプリ(U#) | パッケージの形、Builder、App Services、フォーカス、ダイアログ、はまりどころ | 読めます |
| 4. データで書くアプリ | 画面の型、部品、値のはめ込み、feed の形 | 読めます |
| 5. Companion のアプリ(今後) | — | 今後 |
| 6. デザイン言語 | 色、文字、形、端末ごとの決まり | 読めます |
| 7. 守ること | 重くしない決まり、保存の予算、外部サービスの決まり、権限 | 読めます |
| 8. 公開する | マニフェスト、ストアへの申請と審査、提携アプリ、有料アプリ | 準備中 |
| 9. リファレンス | マニフェストの全項目、App Services の窓口、部品の一覧、テーマの色、アイコン | 読めます |
用語の意味は、この章の最後の用語にまとめています。
Ulexite とは
Ulexite は、VRChat の中で使う家電と端末のシリーズです。最初の製品は Android TV 風のテレビ(セットトップボックス)Ulexite TV で、ワールドに置いて、リモコンで操作します。動画の再生と同期は VizVid が受け持ち、Ulexite は「テレビを見る体験」(ホーム画面、リモコン、アプリ)を受け持ちます。
これらの製品で動く共通の仕組みを Ulexite OS と呼びます。アプリは Ulexite OS の上で動きます。
動く場所
Ulexite TV のアプリは、VRChat のワールドの中で Udon(UdonSharp)として動きます。ワールドの全員が同じ画面を見ます。
アプリの種類
アプリの作り方は2つあります。両方を組み合わせることもできます。
データで書くアプリ(declarative)
画面を「決まった型と部品の組み合わせ」で JSON に書き、表示する値は feed(データの JSON ファイル)から読みます。プログラムは書きません。
- 向いているもの:天気、航空気象(METAR)、運行情報、ニュース、ランキングなど「データを見る」アプリ
- 良いところ:安全で、審査も通りやすい。重くなりにくい
- できないこと:ゲーム、凝った動き、自由な配置、端末の上での計算(計算はサーバーで済ませておく)
部品の image・chart・button・custom と、画面の型の grid は準備中です(4章の部品の表)。
プログラムを書くアプリ(native)
画面とふるまいを、環境ごとにプログラムで書きます。
- ワールド環境:UdonSharp(U#)で書きます。画面はエディタ上で作って焼き込みます
- 向いているもの:ゲーム、メディア再生、時計・タイマーのような動きのあるもの
- 例:時計アプリ
どれを選ぶか
データを見せるだけ? ──はい──→ データで書くアプリ
│いいえ
↓
一部だけ動きのある部品が要る? ──はい──→ データで書くアプリ + custom 部品(U#)
│いいえ
↓
プログラムを書くアプリ(native)
迷ったら、まずデータで書くアプリで作れないか考えてください。Ulexite が一番勧める形です。
2章(最初のアプリを作る)と8章(公開する)は準備中です。当面は、4章の「確かめ方」と、見本のアプリ(時計・天気)を手がかりにしてください。
層の分け方
┌───────────────────────────────┐
│ アプリ(あなたが作るもの) │
├───────────────────────────────┤
│ シェル(ホーム画面・通知など。端末ごと)│
├───────────────────────────────┤
│ システムアプリ │
│ ・Ulexite App Services(アプリの窓口)│
│ ・Ulexite Media Services(再生) │
│ ・設定・アプリストア など │
├───────────────────────────────┤
│ Ulexite System(OS の土台) │
└───────────────────────────────┘
アプリが使ってよいのは Ulexite App Services だけです。シェルや土台を直接呼んではいけません(ストアの審査で確かめます)。App Services には、データの読み込み、画像、通知、保存、再生、アプリ間の呼び出し、テーマの色などの窓口があります。
アプリのマニフェスト
どのアプリも、パッケージの直下に ulexite-app.json(マニフェスト)を置きます。アプリの ID・名前・バージョン・作者・種類・対応する端末・使うデータ・保存の予算などを書くファイルで、アプリ情報の画面やストアのページもここから作られます。
{
"manifestVersion": 1,
"id": "weather",
"name": { "ja": "天気", "en": "Weather" },
"version": "0.1.0",
"publisher": { "name": "Ulexite Technologies" },
"kind": "declarative",
"runtimes": { "world": { "os": 1, "appServices": 4, "screens": "app.screens.json" } },
"profiles": ["tv"],
"data": [ { "id": "weather", "every": "10m" } ],
"budget": { "saveKB": 4, "imagesPerOpen": 1, "syncBytes": 256 }
}
全項目はリファレンス(9章)にまとめています。
配り方
- ワールド環境:アプリは VPM パッケージ(
vrc.ulexite.app.<アプリID>)です。ワールドの制作者が Unity のアプリストア(エディタ拡張)から入れて、ワールドを上げ直すと訪問者に届きます。公開後のワールドの中で、アプリを入れ替えることはできません - 最初は公式アプリと、Ulexite が審査した提携アプリだけを受け付けます(8章。準備中)
開発に必要なもの(ワールド環境)
- Unity 2022.3.22f1
- VRChat Worlds SDK 3.10.5 以上(UdonSharp は SDK に入っています)
- VizVid(
idv.jlchntoz.vvmw)1.8.2 - Ulexite TV(
vrc.ulexite.tv)
これらをまとめて入れられる Ulexite 開発キット(vrc.ulexite.devkit)があります。VCC で1つ入れると、上の全部と、Ulexite Emulator、「新しいアプリ」ウィザード、見本のアプリ(ハローワールド・天気)、テスト用のシーン、申請の前の検査がそろいます。入れると最初に「足りないもの」の確認窓が開きます。
開発キットの VCC への配布は、Ulexite TV の公開に合わせて始めます。
用語
| 用語 | 意味 |
|---|---|
| 端末 | Ulexite OS が動く1台。テレビなど |
| シェル | 端末ごとのホーム画面と画面の枠 |
| feed | アプリが読むデータの JSON。公式のアプリは共通サーバーに、ほかの作者のアプリは自分で用意した信頼済みドメイン(自分の GitHub Pages など)に置く |
| 共通の feed | どのアプリからも読める feed(地震・津波・警報など)。OS が1分おきに読んでいる。用意するのは Ulexite 公式だけ |
| 操作する人 | その端末のリモコンを持っている人。画面の状態のオーナー |
| 焼き込み | エディタで作ったもの(画面・URL)をワールドに固定して入れること。Udon は実行中に URL を作れないため、URL はすべて焼き込む |
このガイドと他の文書
- 導入ガイド — ワールドにテレビを置く人のための説明
- リリースノート — バージョンごとの変更
- プライバシーポリシー・利用規約(VN3 ライセンス)
アプリストアのバッジ
英語版の「GET IT ON」バッジです。アプリの紹介などに使えます。形・色・文字を変えずに使ってください。アプリストアの公開後にお使いください。
