Engine

ゲームエンジン。シーングラフ、コンポーネント、スクリプティング、物理演算、PBRパイプライン、ワールドエディター、そしてデスクトップとモバイル向けのネイティブビルド。

一言で言うと#

ブラウザの中にある本格的なゲームエンジンです。シーンを組み立て、振る舞いを与 え、Playを押し、それをウェブへ、あるいはネイティブのデスクトップ・モバイルバイ ナリへと書き出せます。

aukimiの中で群を抜いて最大のスタジオです。このページは、機能をアルファベット順 に並べるのではなく、インターフェースと同じように、各パネルがどのドロワーに住ん でいるかで案内します。

レイアウト#

シーングラフ、ビューポート、インスペクター、コンソールを備えたEngine

メニューバーFile・Edit・View・Windows・Run・Plugins
ツールバープロジェクト名、アンドゥ/リドゥ、ビューポートモード切り替え(3D・2.5D・2D・TXT)、シーンセレクター、4つのパネルボタン、FX Master、HUD、解像度ボックス、トランスポート(再生、一時停止、停止)、Build
アイコンレール、シーングラフ、リスト、オーディオ、コンソール、そしてそれが開くパネル
中央独自のギズモバー(移動、回転、拡大縮小、ワールド/ローカル、グリッド、スナップ、フレーミング)と品質セレクターを備えたビューポート
選択中のエンティティのためのインスペクター
並んだConsoleProfiler
ステータスバーモード、ビューポートの寸法、エンティティ数、グリッド状態

4つのパネルボタン#

Engineのツールバー:シーン名、アンドゥ、ビューポートモード切り替え、4つのパネルボタン、トランスポート

これらはすべて同じように動作するわけではなく、何かを探しに行く前にその違いを知 っておく価値があります。

ボタン動作
Systemsドロワーを開く
Tools同じドロワーを開く。SystemsとToolsは互いを閉じ合う
Assets常設ドックを切り替える
Scriptsモーダルを開く

SystemsとToolsは意図的に1つのスロットを共有しています。それが見えるよう、両者 は並べて配置されています。

Systems#

エンジン自身のサブシステム。シーンが作り出す道具ではなく、シーンが持ってい るものです。

グループパネル
Pluginsプラグインブラウザ
RenderingRendering・Rendering Pipeline・Look Presets・Shader Lab・Render Style・Shadows・Mesh LOD・Post Process Volumes
GameplayMultiplayer room・Physics・AI & Navigation・Gameplay Zones
WorldScene Graph・Level Streaming・Baking・Light Probes・Decals

Rendering#

ツールバーのFX Masterスイッチは、ポストプロセッシング全体をワンクリックで オン・オフします。それがどれだけコストをかけているかを見る最速の方法です。個別 には:bloom、depth of field、SSR、SSAO、GTAO、SSGI、temporal AA、FXAA、 motion blur、volumetric fog、contact shadows、colour grading、film grain、chromatic aberration、vignette、tonemapping、さらにNaniteスタイルの ジオメトリとHi-Zオクルージョンです。

Look Presetsは上記すべての構成をひとまとめにしたものです。Render Styleは、フォトリアルではなくスタイライズされた方向に表現を変えます。 Shader Labは自分自身のシェーダーを書く場所です。Mesh LODPost Process Volumesは、大きなシーンで元が取れる2つの機能です。メッシュごとの詳 細度と、ボリュームの内側だけに適用されるポストプロセッシングです。

レンダラーはBabylon.jsです。まずWebGLで起動し、ブラウザが対応していれば自分で WebGPUに切り替え、それが失敗すれば自分でフォールバックします。

Gameplayのシステム#

Physicsは3Dソルバー(Havok)と2Dソルバーの両方をカバーします。AI & Navigationはナビメッシュと、その上を動くエージェントです。Gameplay Zonesは振る舞いが結び付けられたトリガーボリュームです。Multiplayer roomはシーンをColyseusサーバーに接続します(後述)。

Worldのシステム#

Level Streamingは、プレイヤーが移動するのに合わせてレベルの一部を読み込 み・破棄します。Bakingはライティングを事前計算し、Light Probesは空間 内の点で間接光と反射をキャプチャします。Decalsはジオメトリを追加せずに面 へディテールを投影します。

Tools#

作り出すための道具です。

グループパネル
EditorsScripts・Blueprint Editor・UI Editor・Tilemap
WorldSky Studio・Terrain・Water・Tree Generator・Plant Generator・Rock Generator・Kitbash
GameplayInventory・Data tables・Dialogue Trees
AnimationTimeline・Cinematic Sequencer・Camera Tools
AudioAudio Manager
DebugProfiler

ワールドジェネレーター#

地形、水、空、そして4つのコンテンツジェネレーター(木、植物、岩、キットバッシ ュのパーツ)です。これらについては下に専用の章があります。

Gameplayのオーサリング#

InventoryData tablesTools → Data)、Dialogue Treesの3つ は、そのコンテンツをコードの中に置かなくてもゲームに持たせられるようにするエデ ィターです。詳しくは下の章で。

Animation#

エンティティのアニメーションにはTimeline、ショットにはCinematic Sequencer、フレーミングにはCamera Toolsです。 アニメーションとカメラを参照してください。

ワールドエディター#

Tools → Worldの下にある7つのパネルです。シーンを素早く満たす方法であり、レ ベル制作がモデリングセッションから始まる必要がない理由でもあります。

Terrain#

1つのシーンは複数の地形を持てます。それぞれはTerrainsリストの1行で、 128²(高速)、256²(バランス)、512²(高精細)のいずれかの解像度 で作成されます。

このパネルには10個のモードがあり、それらには共通点が1つあります。Masksで描 いたマスクがそのすべてを制限するということです。

モード内容
Sculptハイトフィールド上で使える17種類のブラシ
Paint2枚のスプラットマップにまたがる最大8枚のテクスチャレイヤー
Generateノイズ、自動テクスチャリング、実世界の標高データのインポート
Sketch尾根と谷を描き、それに合わせて地形を合成する
Masks他のすべてのモードを表面の一部だけに制限する
Water海面の高さ、そして地形の水とFFT海洋のどちらを使うかの選択
Paths地面に焼き込まれるベジェ曲線の道
Vegetationブラシまたはルールベースの散布
SDFメッシュ化ではなくレイマーチングされる地形
Biomes土壌、植物、木、岩を1回のパスで

Sculpt。 Raise 1、Lower 2、Smooth 3、Flatten 4、Pinch 5、 Inflate 6、Noise 7、Sharpen 8、Stamp 9、Terrace 0、Erode E、 Fill F、Clone CAltクリックでソースを設定)、Blur B、Ramp R、そし て2つの水用ツール。Riverは流路を描き、Lakeは指定した点を満たします。

ブラシ自体には、圧力カーブ、レイジーマウス、フォールオフ、対称、パターン、サイ ズと強さ両方へのジッターといったダイナミクスがあります。Stampは crater、mountain peak、plateau、river valley、dome、noise hillの6つの形状を 持ちます。侵食は2つの形で提供されます。Eブラシはローカルに働き、 Adjustmentsは地形全体に水食熱侵食風食をかけます。

Paint。 8枚のレイヤーがあるのは、2枚のRGBAスプラットマップがそれぞれ4チャ ンネルずつ持っているからです。マテリアルライブラリはカテゴリー別(grass、 dirt、forest、rocks、roads and surfaces、cliffs、sand、snow、volcanic、 wetland、fantasy、そして自分自身のもの)に並んでおり、各レイヤーはUVスケー ル、ディスプレイスメント、ディテールマップ、サーフェスレリーフ(バンプの強さと パララックスの深さ)を持ちます。**Break texture tiling (cell bombing)**は、繰 り返される地面のテクスチャがグリッドとして見えてしまうのを防ぐ設定です。

Generateはノイズから構築し、続いてGenerate Texturesが高さと傾斜によって マテリアルを割り当て、南北方向の陰影バリエーションと、水がある場所には砂や小石 の岸辺を加えます。Real Worldは公開されているNASA/USGSの標高タイルをイン ポートします。ランドマークを選ぶか座標を入力し、ズームを選ぶと、パネルは取得し た標高の範囲を報告します。

Sketchはもう1つの入り口です。2Dマップに尾根と谷のストロークを描き、実在す る地形ソースを最大3つ選ぶと、そのスケッチに合わせて地形が合成されます。任意で 既存の地形とブレンドし、同じパスで自動テクスチャリングと侵食までかけられます。

Masksはブラシで描いた後、全体としてクリア、反転、ぼかし、拡張、縮小といっ た編集ができます。スマートマスクは、高さ、傾斜、レイヤー、あるいはくぼみに よって、地形そのものから1枚を導き出します。

Paths。 クリックでコントロールポイントを置くと、なめらかな曲線がそれらを 通ります。琥珀色の点をドラッグして移動させ、シアンのハンドルで曲線を曲げます。 Bake Pathはその下の地面を平らにし、テクスチャを塗り、土手を盛り上げます。

Vegetationは2つの半分から成ります。ブラシは手作業でインスタンスを配置・削 除し、scatter rulesは条件、レイヤーの重み、シード、最小/最大スケール、各 アセットが受け入れる高さと傾斜の帯によって配置します。草や花は設定可能な描画距 離を過ぎるとフェードアウトし、Export to Sceneはインスタンスをシーンオブジェ クトに変えます。

Biomesは、以上すべてをワンクリックにしたものです。バイオームを選び、欲し いカテゴリー(土壌、木、植物と草、花、水辺の藻、岩)にチェックを入れ、密度を設 定してApply Biomeを押すと、地面が塗られ、すべてが散布され、それぞれ何個ずつ 配置したかが報告されます。木のage varietyは、同じ木をあちこちに置くのでは なく、若木から古木までを混ぜ合わせ、*ground blend (RVT)*は各岩の根元をその下 の地形の色に溶け込ませます。

SDFは別のツールではなく、別のレンダラーです。地形はディスタンスフィールド からレイマーチングされ、形状はオクターブ、ラクナリティ、パーシステンスで決ま り、テクスチャリングはスノーラインと傾斜のしきい値を持つgrass/rock/snowで行わ れ、独自のソフトシャドウ、アンビエントオクルージョン、フォグを持ちます。

大きな地形にはLODシステムがあり、スカートジオメトリ(レベル間の隙間を塞ぐ もの)、なめらかなレベル遷移、視錐台カリング、統計オーバーレイを備えていま す。ハイトマップは16ビットPNG、8ビットPNG、あるいはRAW 16ビットとしてインポ ート・エクスポートでき、スプラットマップは1枚のRGBA PNG、またはレイヤーごとに 1ファイルとして、地形全体、あるいは設定だけをプリセットとして書き出せます。

Sky Studio#

大気を扱います。4種類の空、solid、gradient、HDRI、そしてレイリー散乱とミ ー散乱、ミー吸収、オゾン、地表アルベド、濁度、惑星半径、大気の厚みを持つ physical atmosphereです。

すべては自動で巡回できるtime of dayにぶら下がっています。太陽は仰角、方位 角、強度、そして独自の影の強さで。月は位相で。星は瞬きとともに。そしてオーロラ です。Volumetric cloudsは厚み、侵食、ノイズスケール、カール歪みを持ち、吸 収、散乱、アンビエント、パウダー項を通じて光を扱います。cirrusとBelt of Venusは別項目です。Aerial perspectiveは距離とともに濃くなり、遠くのジオメ トリを地平線へと溶かしていく霞です。風景を大きく見せる設定です。

出発点となる10種類のプリセット:clear day、dawn、sunset、dusk、night、 overcast、stormy、desert、arctic、space。

Water#

2つのタブがあります。外洋向けの**Ocean (FFT)**と、それ以外すべてのための Shore & lakesです。

⚠️ 水はTerrainエディターで作られます。 riverとlakeのツール、あるいは Show Waterによってです。ここではそれを調整するだけです。水のないシーンでこ のパネルを開くと、適用対象のない設定だけが並びます。

沿岸の水は、色、不透明度、波の強さと速さ、荒さ、泡の幅とフレネル、そしてスクリ ーンスペースの反射と屈折ぼかしを持ちます。その下にはWGSLシェーダー自体があり ます。独自のスクロール方向と速度を持つ2つのノーマルスケール、泡のしきい値と柔 らかさ、屈折の強さと屈折率、そして水の中の光、吸収、濁度、散乱、半透明度です。

Tree Generator#

TreeTrunkの2つのモードがあります。木は落葉樹か常緑樹か、若木から古 木までの年齢を持ち、生きている、枯れている、立ち枯れ、あるいは倒木のいずれかに なれます。すべてがシードで決まるため、Randomize seedが、同じ性格を保ったま ま違う木を得る最速の方法です。

形状は枝のレベルごとに決まります。子枝の数、長さ、半径、先細り、ねじれ具合、ツ イスト、セクション数、セグメント数、角度、開始位置の高さ、さらに自然なばらつ き、phototropismgravitropism(それぞれ木を光に向かって傾かせ、自重 で垂れ下がらせる2つの力)、そして独自の強さを持つグローバルな力です。根元には 根張り(ロブと高さ)とバットレスがあります。

葉はビルボードで、片面または両面、枚数、サイズ、角度、ばらつき、クランプ、カー ル、垂れ下がり、艶、丸められたノーマルを持ちます。樹皮はridged、aspen、 pine、birch、smooth、palmの6種類のスタイルがあり、レリーフ、苔、湿った根元、 日焼け、樹冠のアンビエントオクルージョン、紅葉を持ちます。四季は見た目全体を一 度に切り替えます。

Forestは一度に大量に散布します。本数、広がりの半径、スケールのばらつき、 年齢構成(single、natural、young、old、even)。Add age progressionは5つの ライフステージすべてを1列に並べ、それらを並べて見比べる最速の方法になります。 木はシーンエンティティとして、あるいはGLBとして出て行き、どの設定もプリセ ットとして保存できます。

Plant Generator#

flower、cluster、herb、fern、grassの5種類があり、茎(本数、高さ、太さ、カー ブ、色)と葉(枚数、サイズ、幅、角度)を共有します。fernには小葉のペア数、小葉 のスイープ、葉柄のアーチが加わり、grassには葉の枚数とアーチが加わります。

花はそのどれにも任意で付けられます。花びらの枚数、花びらの段数、長さ、幅、カー ル、先端の鋭さ、開花度、中心のサイズ、そして花びら、花びらの先端、中心の3色で す。葉を光がどう通り抜けるかを決める半透明度とラフネスも持ちます。シーンに1つ 追加するか、大量に散布するか、GLBとして書き出せます。

Rock Generator#

rock、stone、cliffの3種類が、realistic、toon、アウトライン付きのlow polyとい う3つのスタイルで用意されています。

形状は球体上のノイズです。スケール、強さ、オクターブ数、パーシステンス、ワー プ、リッジドオプション、さらに独自の頻度を持つstrataと、角ばった石のため の深さと鋭さを持つfacet cutsがあります。半径、ディテール、フラット化、形 状のばらつき、平らな底面がシルエットを決め、fresh、weathered、natural、 erodedの4つの侵食プリセットがそれらすべてを一度に動かします。

表面には色のばらつき、鉱物の脈、地衣類と苔、タイリングと強さを持つディテールテ クスチャ、トライプラナーブレンディング、パララックスレリーフがあります。デフォ ルトではバンドルされたStoneマテリアルを使い、 MatterからマテリアルをEngineへ送れば上書きできます。

Kitbash、Sculptと同じライブラリ#

KitbashはSculptと共有されています。 このパネルと SculptのEdit Forgeは1つのライブラリを読みます。向こうで組んだパーツはこち らで配置でき、こちらでペイントしたパーツはそちらへ保存し戻せます。

シーンが保存するのはそのパーツと寸法であって、頂点データではありません。 だからこそ、キットバッシュされた建物はファイル容量をほとんど食わず、後から元デ ータを更新できます。

カタログからパーツを装備すると、左クリックのたびに配置されます。3つのスナップ モードがどこに着地するかを決めます。on terrain(パーツは足元の地面の高さ に追従します)、on water(構築平面が水面の高さに置かれます)、 snap to sockets(配置済みのパーツにある接続点を狙うと、新しいパーツがそれ に合わせて向きを変えます)。チェーンは空いている端から伸び、使用済みのソケット は候補から外れ、クリックのたびに独立したアンドゥステップになります。Ctrl/ Cmdは選択用に、Altは回転用に予約されたままです。コレクションは自身のソー スとバージョンを保持するため、オリジナルが変わればインスタンスも更新できます。

その他のエディター#

ワールドエディターがシーンを満たすものだとすれば、こちらはそれにインターフェー ス、マップ、コンテンツテーブル、そしてコストを確認するための計器を与えるもので す。

HUDエディター#

Tools → Editors → UITemplatesElementsLayersPreviewStyleScriptの6つのタブが、デスクトップ960×540、タブ レット768×432、モバイル375×667の3つのデバイスサイズを切り替えられるプレビュ ーの上に並びます。

Elementは3つのグループ(DisplayDataInput)に分かれ、入れ子に できます。panelflexは子要素を持てるため、Layersタブはフラットなリスト ではなく本物のツリーです。履歴は50ステップの深さがあります。

⚠️ Styleタブは CSSであり、その違いが重要です。 HUDはBabylonのGUIによ ってキャンバス上に描かれるため、本物のCSSはそこには届きません。ここで書くルー ルはGUIのプロパティにマッピングされます。セレクターは、1つの要素には #name、種類には.type.text.panel)、すべてには*です。

Scriptタブはもう1つの構築方法です。ui.* API、createTextcreatePanelcreateProgresscreateButtonがあり、実行方法は2通りあり ます。Build Layoutデザインタイムに実行し、手で微調整できる本物の要素 を残します。Run Liveはゲーム内でそれを実行します。

外部との接続は2つあります。HUDのアートワークは InkwellVectraで開け、コピ ーではなくリンクとして結び付けられます。またVectraのドキュメントをHUD要素とし てインポートすることもできます。ミニマップ要素は独立した存在で、範囲、グリッ ド、そしてプレイヤー、敵、味方、アイテム、目標地点のマーカーを持ちます。

タイルマップエディター#

brush、eraser、fill、rectangle、select、eyedropper、stamp、autotile、 prop、zone、pathの11個のツールが、orthogonalisometricstaggered isometrichexagonalの4つのマップ投影法の上で使えます。

Autotilingには4つのテンプレートが標準搭載されており、各名前の数字はそれが 必要とするタイル数です。Blob 47(角と辺のフルセット)、Wang 16(辺ベー ス)、Simple 4(NSEW)、RPG Maker A2(48タイル。同ソフトで作成したマップ と互換)。

タイル自体の上に2つのレイヤーがあります。Zonesはゲームプレイ上の意味を塗 ります。buildable、water、forest、road、farm、residential、commercial、 blockedです。propsはカテゴリー別にオブジェクトを配置します。trees、 rocks、buildings、vegetation、water、pathsです。マップはブラウザ自身のデー タベースに保存されているため、保存していないものもリロードを乗り切ります。

Inventory、データテーブル、ダイアログ#

そのコンテンツをコードの中に置かなくても、ゲームにコンテンツを持たせられるよう にする3つのエディターです。

Inventoryはカタログを編集し、シーンに適用します。アイテムはアクションを持 ち、アクションはトリガーuseequipunequip)と、8種類のタイプ (message、heal、damage、grant、remove、event、toast、scene)のいずれか1つ から成ります。パネル自体は3つのレイアウト(grid、list、compact)、3つの外観 プリセット(graphite、midnight、warm)、そして4つのビジュアルスロット (background、slot、equipment、tooltip)を持ち、これらはきちんと描き直すため に別のモジュールで開きます。

Data tablesは型付きです。列はtextnumberboolrefのいずれかで す。CSVで入出力できます。すべての編集は純粋関数を通して行われ、これがエクスポ ートが書き出すテーブルと、ビルドが読み込むテーブルを常に一致させています。

Dialogue treesは、話者とセリフを持つノードです。1つのノードは1つの nextに続くか、それぞれ独自のテキストと行き先を持つchoicesへと分岐しま す。分岐にするかどうかのトグルが、このエディターにおける唯一の構造的な決定で す。

アニメーションとカメラ#

Cinematic Sequencerは、長さとループフラグを持つシーケンスを、エンティティ ごとに1トラック、再生ヘッドの位置でキャプチャされるキーフレームとともに構築し ます。Add Keyは数値を入力させるのではなく、エンティティの現在値をそのまま取 り込みます。下にあるgraph editorは時間と進行度を、イージング用の丸いハン ドルとともに表示します。傾きが速さです。 ショットはそれぞれ独自の長さを持 ち、レターボックス用にCinemascopeのフレーミング(1.422:1)も使えます。

Camera ToolsはFOV、位置、ターゲット、モード、速度をカバーし、さらに何度も 戻ってくる視点のためのbookmarksと、カメラレイヤーを持ちます。

オーディオ#

Audio Managerはオーディオイベント、トラック、そしてチャンネルとカテゴリー を持つミキサーを保持します。ソースごとのエフェクトはlow-passhigh-passreverb sendです。randomモードは複数のクリップから選ぶ ことで、繰り返される音がループとして聞こえてしまうのを防ぎます。スクラブは再 生ヘッドをドラッグしている間、音声を再生します。

プロファイラー#

フレームカウンターではなく、フレームの内訳です。カメラのレンダリング、メッシ ュの評価、パーティクル、スプライト、シェーダーコンパイルがそれぞれ**「実測」 か「推定」か**をマークされているため、実測から来た数値がモデルから来た数値と 取り違えられることはありません。その隣にはカウンターがあります。メッシュとア クティブメッシュ、ライト、カメラ、物理ボディです。

記録は明示的な操作で行い、解釈が必要なグラフではなくIssuesリストとして終 わります。設定した目標フレームレートに対する、低FPS、高ドローコール数、高ポリ ゴン数、高メモリー使用量です。

シーンを組み立てる#

エンティティ#

選択中のエンティティにギズモが表示されたEngineのビューポート

新しいシーンにはMain CameraDirectional LightSkyboxGround Planeが最初から入っています。

新しいシーンが最初から持つ4つのエンティティが並んだシーングラフ

追加できるもの:EmptyCubeSphereCylinderPlaneLightCameraScriptMesh、そして最初から配線済みの2つのフ ァミリー:

  • Characters:Third-Person、First-Person (FPS)、Top-Down、 Platformer、Basic。
  • Props:Pickup(回復)とHazard(ダメージ)。

シーングラフは検索、種類での絞り込み、追加・複製・削除ができます。エンティティ は入れ子にでき、親を変えるのはドラッグ操作です。配置にはスナップと、地面を素早 く埋めるscatter brushがあります。

インスペクター#

Transform(位置、回転、拡大縮小)、Enabledスイッチ、そしてエンティティの コンポーネント(ここで追加・設定・削除でき、下部にAdd Scriptがありま す)です。複数のエンティティを選択すると、インスペクターは一括編集に切り替わ り、1つのフィールドの変更がすべてに反映されます。

コンソール#

単なるログではありません。レベル(all、logs、info、warning、error)で絞り込 め、メッセージをそれを出したエンティティへリンクし、式の入力欄を備えてい ます。式を入力してEnterを押すと、動作中のシーンに対してそれが実行され、矢印 キーで履歴をたどれます。

振る舞いを与える#

3つの道があり、それらは共存します。

Scripts#

ライフサイクルフック付きのJavaScriptで、 専用のリファレンスもあります。

function start() {}                     // once, when the entity starts
function update(dt) {}                  // every frame
function fixedUpdate(dt) {}             // fixed timestep, for physics
function onCollisionEnter(other) {}     // first frame of contact
function onCollisionStay(other) {}      // every frame while touching
function onCollisionExit(other) {}      // contact just ended
function onTriggerEnter(other) {}       // entered a trigger volume
function onTriggerExit(other) {}
function onMessage(msg, data, senderId) {}   // entity-to-entity messaging
function onAnimationEvent(name, data) {}
function onDestroy() {}

衝突とトリガーは2Dと3Dの両方で発火し、それぞれの側が自分自身の接触法線を 受け取ります。other.contact.normal相手のエンティティからこのエンティテ ィへ向かう向きを指します。これによってスクリプトは「自分がその上に着地した」 のか「相手が自分の上に着地した」のかを区別できます。プラットフォーマーの踏みつ け判定はother.contact.normal.y > 0.5として読み取ります。

スクリプトエディター#

F2、またはエンティティ上のAdd Scriptから開きます。タブ付きのMonacoエディ ターで、複数のスクリプトを同時に開けます。それぞれはプロジェクトファイルではな くブラウザ自身のデータベースに保持されるため、保存していないバッファもリロー ドを乗り切ります。

5つの方言、1つのプログラム。 言語切り替えではJavaScript、BASIC、 Python、C#、Rustを選べます。しかし実際にやっていることは、見た目通りではあり ません。JavaScriptが唯一の正本であり、残りの4つは保存されているJSから変換 されたビューです。PythonからRustへ切り替えても、Pythonを直接翻訳するのでは なく、そのPythonの元になったJSに戻り、そこから翻訳し直します。何段階もの変換 を経るとプログラムが壊れるため、エディターはそれを拒否します。

5カテゴリー、13個のテンプレートがあり、それぞれ難易度でラベル付けされてい ます。

カテゴリーテンプレート
Basicsライフサイクルのひな形だけを持つ空のスクリプト
Movement自動回転・WASD・軸ベースの3D移動・地面検出付き物理ジャンプ・三人称カメラ追従
Gameplayトリガーゾーン・ダメージと回復付きヘルスバー・時間制スポナー
AIプレイヤー接近アラート付きパトロール
AdvancedVerse風の非同期カットシーン・構造化された並行処理・API全域テスト

キャラクターコントローラーのプリセットと、ゲームの初期プロップ(pickup、 hazard)も同じリストに並んでおり、インポートしたキャラクターに動作するコント ローラーを実用的に載せる方法になっています。

実行とデバッグ。 F5で実行、F9でブレークポイントを設定します。デバッガ ーは行で一時停止し、1フレームずつステップ実行でき、ウォッチ式を通してその場の 値を報告します。Script Labはエンティティを一切付けずにプログラムを実行し ます。オブジェクト上のコンポーネントというより、API用の走り書き帳です。

コードの隣にはAPIリファレンス、開いているファイルのシンボル一覧、お気に入 りと最近使ったものを持つスニペットライブラリがあります。Ctrl+Sで保存、 Ctrl+Fで検索、Ctrl+Hで置換ができ、エディターには8種類のテーマが標準搭載さ れています。

BlueprintsとBehaviours#

ビジュアルグラフ、既製のビヘイビアのライブラリ、そしてビヘイビアスタックの上に 重ねられたステートマシンです。

このグラフはMath、Scene、Entity、Animation、Flow Control、String、 Events、Physics、UI、Array、Vector、Transform、Debug、Input、Utility、 Game、Boolean、Camera、Tween、Variables、Audio、そして2Dと3Dのファミリーとい う22のグループにまたがる267個のノードを持ちます。それらを分けているのは3 つの性質で、これがこのグラフを構成するものです。17個のイベントノードが実 行を開始し、117個のピュアノードが副作用も実行ピンも持たずに値を計算し、 9個の潜在ノードが後から完了します。これが、自分でステートマシンを組まなく ても遅延やトゥイーンを表現できるようにしているものです。

4つのツールがあります。select V、pan H、comment C、reroute Rで、 ミニマップ付きで0.1×から3×までズームできるキャンバスの上で使います。変数は boolean、integer、float、string、vector3、objectの6種類です。すべてのノー ドの説明はツールチップにあり、これだけの規模のライブラリが自分自身を説明できる 唯一の場所です。

ステートマシン#

これは独自のパネルであり、意図的にAnimatorのものとは別です。Animatorの条件は ケースごとに手書きのUIを持つフラットな列挙型ですが、こちらは構造化されてお り、世界について語ります。

7つの条件があり、それぞれがシーンについての問いです。sees(範囲内にタグ 付きのターゲットがいるか。任意で角度と視線内という条件付き)、lost(N秒間 ターゲットがいない)、しきい値に対するdistancehealthmessage receivedtimer現在のステートで過ごした時間)、そして共 有のブラックボード上の値を見るflagです。andorという2つの結合子 はどちらも一覧に載っています。orは同じステートへの遷移を2本引けば暗黙に存在 していましたが、「見えていて、なおかつ体力が残っている」を表す形が何もなかった ためです。

⚠️ Healthは絶対値ではなく、常に最大値に対する割合として比較されます。 「HP30未満」というしきい値はバランス調整を1回経ただけで無意味になります が、「0.3未満」ならそれに耐えます。

ステートに入る、または出るときには4種類のエフェクトがあります。sendでメッ セージを送る、setでブラックボードのキーを設定する、playでアニメーシ ョンクリップを再生する、あるいは名前付きエフェクトを発火する、です。どれ も何かを動かすことはしません。動きはビヘイビアの側に残り、マシンはどのビヘ イビアがアクティブかを決めるだけです。

遷移は任意のステートを意味する*から始めることもできます。バリデーターは最初 の問題で処理を止めるのではなく、問題の一覧を返すため、書きかけのマシンで も描画され続け、間違っている箇所すべてを一度に確認できます。ノードの位置もデー タの一部です。レイアウトがシーンの外に存在するグラフは、次にそれを開いた人にと って並び順がシャッフルされて戻ってきます。

BASIC#

TXTビューポートモードは、デモプログラムが同梱されたクラシックBASIC環境で、 この言語には専用のリファレンスもあります。ここでは おもちゃではなく、本物の言語です。複数ファイルのモジュール(#INCLUDE)、型 付き数値(符号あり・なしの8/16/32/64ビット、float32とfloat64)、ネストしたレ コード、SELFによるオブジェクトメソッド、参照(REF/BYREF)、構造化され たTRY/CATCH/FINALLY、条件付きコンパイル、コルーチン、型付きハンドル、そ してストレージバッファと生のWGSLを使ったWebGPUコンピュートです。

OPTION EXPLICITは任意で有効にする設定です。クラシックな暗黙の変数宣言がデフ ォルトのままなので、インポートしたプログラムもそのまま動作します。

プレイと出荷#

Play#

PlayPauseStop。停止すると、バナーがそのセッションで何が変わった かを報告するため、Playモード中の編集が静かに保持されたり、静かに失われたり することはありません。セッションは記録して再生し、バグレポートに含めら れ、シナリオブックマークを使えば、プレイテストをレベルの途中から始められ ます。

Build#

Buildはゲームの種類(シーンから自動検出されるか、sidescroller/ platformer、first/third person、text-basedとして手動設定)とターゲットを受 け取ります。

  • Web:WebGLフォールバック付きのWebGPU、任意のWebXR(VR/AR)、圧縮、 FPSカウンター、そして1つのファイルにまとめるembed assetsオプション。
  • Desktopmobile:ネイティブビルド。シーンはデータ(scene.glb + scene.json)として書き出され、生成されたBevy(Rust)プロジェクトを通 してコンパイルされます。スクリプトはそこでも組み込みのQuickJSランタイム上 で変更なしに動作します。

圧縮はアルゴリズム、テクスチャ、メッシュといった軸ごとに設定でき、品質プリセッ トがそれらをまとめて結び付けます。ビルドはサイズ(元のサイズと圧縮後のサイズ) とともに履歴として保持され、後からまたダウンロードできます。

ネイティブビルドには、エクスポーターが書き出し方を知っているものしか含まれ ません。glTFはカスタムシェーダー、シンインスタンス、プロシージャルな空、ポ ストプロセッシングを捉えられないため、Bevy側に移植されていないランタイムの 仕組みは、ウェブでは完璧に見えていてもデスクトップやモバイルのビルドからは欠 落します。頼りにする前にネイティブビルドを確認してください。

マルチプレイヤー#

Multiplayer roomパネルはシーンをColyseusゲームサーバーに接続します。アカ ウントも設定も不要な無料の共有テストサーバーが用意されており、プロジェクトに 専用のサーバーを持たせることもできます。ルームは共有コードによって識別され、 自分だけで使うことも、人に渡すこともできます。

読み書きできるファイル#

ネイティブ形式.engine
インポート.glb.gltf.obj.fbx.png.svg.mp4.webm.mov.scene
エクスポートウェブビルド、ネイティブデスクトップ/モバイルビルド、scene.glb + scene.json

他のスタジオへ作業を送る#

受け取れるもの:Sculpt、Retopo、Pigmentからのメッシュ、Renderからのシー ン全体、ピクセルアート、アニメーション、MatterからのPBRマテリアルセット、2D リグ、ビデオプロジェクト、画像、ベクターアート、Vectraオブジェクト。

作り出すもの:2Dリグ。

Vectraの画面モックアップは、画像ではなく構造として届きます。 それは EngineがレイアウトしてスクリプトできるHUD階層になります。組み立てられるデザ インと、そのスクリーンショットとの違いです。

ショートカット#

Cmd/Ctrl + Kは、グローバルなコマンドと並んでEngine自身のコマンドにもパ レットから届きます。Engineにはさらに、自身の設定内に検索可能な専用のキーボー ドショートカットパネルもあり、ショートカットページに収ま りきらないほど多くのショートカットを持っています。

制限とよくあるつまずき#

  • ビューポートが真っ白なのは、たいていシーンではなくブラウザのせいです。 EngineはWebGL 2を必要とします。ハードウェアアクセラレーションが有効か確認 してください。
  • SystemsとToolsは1つのドロワーを共有しています。 パネルが「消えた」よう に見えたら、もう片方に入っている可能性が高いです。
  • コンソールは最後にではなく、最初に見るべき場所です。 エラーをそれを引き 起こしたエンティティにリンクしてくれます。
  • Playモード中に追加したコンポーネントは、停止すると残らないことがありま す。 停止したときに表示されるバナーを読んでください。
  • 物理演算は2Dと3Dでソルバーが異なります。 スクリプトのコールバックは同じ でもです。2Dでの静止接触は2mmのスキンで検出されます。ソルバーが検出処理の 前に貫通量をちょうどゼロまで戻すためです。