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のシミュレーションで使用されます。