Orb

研究所の被験者となり、光るオーブを動かして道を開いていく一人称パズルゲーム。ゲームと並行して2人で作った、初めてのC++エンジンで動いています。私はエンジンの物理、シーン管理、シリアライズ、Unityをレベルエディターにするパイプライン、そしてその上のゲームプレイを担当しました。

C++ · OpenGL · Unityをレベルエディターに · 2017年 · Leon Brandsと共同開発

Orb running in our C++ engine: a lab room with an orb on a pedestal and the player's orb gun

Unityをレベルエディターに

エディターのない自作エンジンでは、レベルを手で書くことになります。しかも一つの課題でエンジンとゲームの両方を作る必要がありました。そこでUnityをエディターにしました。デザイナーはUnityで、C++側とフィールド単位で対応する独自コンポーネント(マネージャー、プレイヤーコントローラー、リジッドボディ、コライダー)を使ってレベルを作ります。

独自のエクスポーターがシーンをシリアライズし、エンジンはそれを読み込んで型名からすべてのオブジェクトを復元します。デザイナーは使い慣れたツールのまま作業でき、私たちはエディターを書く必要がありませんでした。

A level in the Unity editor on the left, running live in our C++ engine on the right
Unityのレベル(左)と、自作エンジンで動く同じレベル(右)

物理エンジンをゼロから

Orbは物理パズルゲームなので、物理の信頼性が欠かせません。重力・抵抗・反発・摩擦をもつリジッドボディ、速い物体が壁をすり抜けない連続衝突判定付きのAABB衝突、パズル用のトリガー、レイキャストを自分で実装しました。

シリアライズはポリモーフィックなオブジェクトや共有ポインターに対応し、同じコードでシーンとプレハブの保存、Unityから書き出したデータの読み込みを行います。

Our engine's window with collider debug drawing, over the same room in Unity with our Custom Box Collider in the inspector
自作エンジンのコライダーのデバッグ表示。後ろは同じ部屋のUnityで、自作のコライダーコンポーネントを選択中

その上のゲーム

ゲームプレイ面では、キャラクターとカメラのコントローラー、各パズルを動かすトリガーのロジック、オーブそのものを書きました。デザイナーは各部屋をまず紙に設計し、それがUnityのシーンに、そしてエンジンのレベルになりました。

A designer's level plan drawn over the layout in Unity
デザイナーによる部屋の設計図

レンダラーを担当したLeon Brandsと共同開発。その後二人でTristeonを作りました。

← ポートフォリオに戻る