14-2. プログラム実装におけるUnityとの違い

プログラム実装におけるUnityとの違い

前項で見たUnityとの思想や前提などの大きな部分の違いを踏まえ、さらに特にプログラム実装部分における具体的な違いを見ていきます。

Unityコンポーネントシステムとの違い

Unityでは必要な機能をGameObjectに適宜付与していく、Componentシステムを採用しています。Componentは機能の単位を構成し、オブジェクトは機能の集合として様々な要素を持つように鳴り、結果固有なオブジェクトの動作が実現されます。Componentは機能で分割されているため、様々なオブジェクトへ自由に使いまわしすることができ再利用性・拡張性の高い開発が可能となります。
Robloxでは、パーツやモデルなどの1つ1つのオブジェクトに対して、ツリー上でScriptを付与するシンプルな階層構造で適用・管理とするのが基本です。これは初学者にとって理解しやすく、最初のプログラミングしやすくするといえます。その分、Componentのような機能をモジュール化した効率的な開発に移行する際には自分で工夫する必要があります(本書の第4章、6章参照)。

プログラムの再利用性

Unityでは上述の通り、機能となるComponentを実装しそれを利用してオブジェクトを構成するため、プログラムは自然と再利用できる形になりやすくなっています。
Robloxでは、ツリー上でオブジェクト固有に設定したScriptはあくまでその固有オブジェクトのものとなるため、再利用ができないプログラムとなることに注意が必要です。Script含みでオブジェクトをコピーしても、コピー先のオブジェクトのScriptと元のScriptは別のものであり、修正が必要な場合両方を修正する必要がある、ということになります。
これに対して、ModuleScriptによる共通機能化や、Componentの構成、また後述のPackageを利用する、といったアプローチを活用した効率的な開発にステップアップしていくことがRobloxの効率的開発において重要になります。

PrefabsとPackages

Unityでは「Prefabs」という機能で、設定済みのゲームオブジェクトをテンプレート化し、再利用することができます。これにより、開発効率が高まります。
Robloxでも似た仕組みとして「Packages」というシステムを用意しており、これによってゲーム内のオブジェクトやスクリプトをパッケージ化し、共有や再利用が可能になります。パッケージ化すれば、上述したオブジェクト固有のScriptも共通処理として管理が可能となります。また、Packagesは自身のアセットとして管理することも可能で、別なエクスペリエンス作成時にも簡単に再利用し、修正を適用するといったことが可能になっています。

サーバー、クライアントのプログラムの実装の違い

Unityでは、ネットワークライブラリを追加してネットワークを処理を実装します。サーバー用、クライアント用、などの明示的なスクリプトタイプなどはなく、ライブラリを用いてそのゲームオブジェクトをサーバー動作にする、などの制御を行います。ライブラリを通じて様々なネットワーク制御が可能に鳴っていることが多く、詳細なネットワーク処理も実装可能となります。
Robloxでは、あらかじめネットワークゲームを作成できる前提のため、環境としてすぐにネットワーク処理が可能となっています。また、通信処理はある程度簡易化されており、簡単に処理ができるようになっています。ネットワーク処理を行うために、エクスプローラーツリー上のどの場所に、どのタイプのScriptがあるかで動作ルールが異なる点に注意が必要です(本書3章を参照)。

C#とLuau

Unityでは、プログラミング言語としてC#を採用しています。C#は豊富なライブラリや強力な型システム、クラス機能などを持ち合わせています。
Robloxでは、プログラミング言語としてLuauを採用しています。LuauはLua5.1をベースに拡張・最適化された言語で構文としてはLuaと同じですが、型システムなども導入しておりより堅牢なプログラムが可能です。
基本的にはLuauのほうが、簡易的な機能、構文となっており初学者にとって学習しやすいといえます。

参照すべき情報