3 - シーンのセットアップ
概要
ここでは、基本的なシーンのセットアップと、Quantumのエンティティの作成方法を紹介します。
ゲームシーンを開く
Quantum SDKには、開発を始めるのに役立つファイルが付いています。
QuantumUser/Scenes
フォルダー内にはQuantumGameScene
シーンがあります。このシーンが、Quantumチュートリアルの開始地点になります。QuantumGameScene
シーンを開き、UnityのメニューFile > Save As
でシーンのコピーを作成して、Assets/Scenes
フォルダーのAsteroidsGameplay
で保存してください。

シーンには、いくつかの重要なゲームオブジェクトがあります。
QuantumMap
:Qunatumのシーン作成ワークフローは、Unityのシングルプレイヤーゲームのシーン作成とほぼ同じです。マップデータコンポーネントは、シーン上のエンティティ・静的コライダー・ナビメッシュデータをベイクして、決定論的Quantumエンジンで使用できるようにします。QuantumEntityViewUpdater
:実行時にゲームプレイコードから作成されるエンティティの、ビューを表現するゲームオブジェクトの生成/破棄を担当します。QuantumDebugInput
:Unityの入力を決定論的Quantumエンジンへ渡す方法を例示するDebug Input
スクリプトです。後ほど、このチュートリアルで拡張します。QuantumStats
:Game
エディターウインドウの左側に統計ウインドウを表示します。Quantumシミュレーションに関する多くの便利な統計情報が表示されます。
MapDataアセットオブジェクト
Quantumのアセットは、ゲームプレイシミュレーションの設定に使用されるイミュータブルなデータコンテナです。Unityの各シーンは、シーンに対応するQuantumのマップアセットが紐付けられます。このアセットはシーンに関する決定論的な情報を含み、シーン上のオブジェクトやコライダーなどがアセットにベイクされています。
新しいResources
フォルダーを作成して、右クリックからCreate > Quantum > Asset
を選択し、ポップアップしたリストからMap
を選択します。アセットはAsteroidsMap
と名付けてください。

備考: 、Quantumがアセットをロードできるようにするため、Resources
フォルダーが使用されます。すべてのQuantumアセットは、Resources
フォルダーに含めるか、Addressableである必要があります。
シーンのQuantumMap
オブジェクトをクリックしてください。ここではまだ既存のQuantumMap
アセットがシーンに紐付けられています。新しいAsteroidsMap
アセットをインスペクターのasset
フィールドにドロップして置き換え、シーンを保存します。保存時に、新しいAsteroidsMap_mesh
アセットがResources
フォルダーに生成されます。このアセットは、マップの物理コライダーに関する情報を保持します。

カメラとライティング
Main Camera
の位置を(0, 10, 0)
、回転を(90, 0, 0)
に設定します。背景色は黒にして、Orthographic Projection Size
を20
に調整します。

次に、シーンにやわらかい黄色のDirectional Light
を追加します。

エンティティの作成
新しい2D Circle Entityを作成します。(ヒエラルキーウインドウを右クリックして、Quantum > 2D > Circle Entity
を選択)
Create a new 2d circle entity. (right-click on the hierarchy window and chose Quantum > 2D > Circle Entity
)

作成されたゲームオブジェクトの名前をAsteroidLarge
に変更します。Mesh Filter
とMesh Renderer
コンポーネントは削除してください。そして、QuantumEntityPrototype
のPhysicsCollider2D
のRadius
を1.1に調整します。最後にPhysicsBody2D
にチェックを入れて、エンティティをRigidbody
を持つ物理ベースのエンティティにします。

AsteroidLarge
ゲームオブジェクトを右クリックしてCreate > 3D Object > Cube
を選択し、アステロイドの子オブジェクトにCubeを作成します。これがアステロイドのビジュアルモデルを保持することになるので、名前をModel
に変更しましょう。
ビジュアルを子オブジェクトに分けることは必須ではありませんが、より簡単にコンポーネントを整理できます。
オブジェクトからBox Collider
を削除、スケールを1.5に設定し、いい感じのビジュアルになるように回転させてください(ここでは(25, 17, -53)
にしています)。

ゲームを再生すると、重力によってアステロイドのエンティティがゆっくり降下するのが確認できます。(重力は後ほど無効にして、手動でアステロイドに力を加えていきます)

Quantumのエンティティ
Quantumのすべてのゲームプレイは、エンティティ・システム・静的コライダー情報などを含む静的なデータアセットによって動作します。Quantumのシミュレーションコードは一切のレンダリングを処理せず、UnityではEntityViewUpdater
が各エンティティについてEntityPrototype
とEntityView
を持つゲームオブジェクトを生成します。このビューのゲームオブジェクトが、エンティティのビジュアル表現として機能します。ビューのゲームオブジェクトのtransform
も、EntityViewUpdater
によってエンティティごとに自動的に同期されます。
各エンティティは、複数のコンポーネントを持ちます。このコンポーネントは、UnityのMonoBehaviour
とは異なり、EntityPrototype
のEntity Component
リストやコードから追加されます。いくつかのコンポーネントは、CubeエンティティのPhysicsBody2D
コンポーネントのように、EntityPrototype
のチェックボックスをチェックすることで追加されます。
QuantumはState Inspectorによって、実行時にエンティティコンポーネントの状態を表示できます。UnityのメニューバーからWindow > Quantum > State Inspector
をクリックすると、State Inspectorが開きます。ゲームを再生すると、State InspectorウインドウのLOCALDEBUG
とEntities
が展開します。アステロイドのエンティティがEntity 1に並んでいて、これをクリックすると、エンティティのすべてのコンポーネントと、その現在の状態が表示されます。

プレハブの作成
Quantumのエンティティは、通常のUnityのプレハブに変換できます。AsteroidLarge
ゲームオブジェクトをResources
フォルダーにドロップしてプレハブを作成し、シーンのものは削除してください。自動的に作成されるAsteroidLargeEntityPrototype
アセットは、エンティティのベイクデータを保持し、Quantumのシミュレーションで使用されます。
