マップレイヤー
マップレイヤーは、マップに関連付けられたGameObjectsのグループです。 マップレイヤーは MapLayer クラスによってコントロールされます。 マップレイヤーは、Unity UIを使用してフィーチャービルダーと関連付けることができます。 マップレイヤーを使ってオブジェクトを配置する方法(How to Place Objects Using a MapLayer)を参照。 マップレイヤーを使用するには、シーンのどこかにマップレイヤープレハブが配置されている必要があります。
マップレイヤーは、どちらもオブジェクトの配置や、ジオメトリのレンダリングを行うことで、マップのビジュアルスタイルをカスタマイズできることから、 フィーチャービルダー と似ています。 マップレイヤーとフィーチャービルダーは、次の2つの点で異なります。
- MapLayer は個々のマップタイルではなく、マップビュー全体に適用されます。
- マップレイヤーには、個々のタイルのデータは含まれないため、通常、他のソースのデータや、ユーザーによるアクションのデータに使用します。
マップレイヤーは1つ以上の MapLayer コンポーネントをサポートすることができ、オブジェクトをスポーンして配置します。 親GameObjectにMapLayerコンポーネントがあれば、複数のレイヤーを一緒に使用することができます。 Lightship Mapのプレハブで使用されているマップレイヤーをすべて表示するには、プレハブのインスペクターで Map Layers のリストを探します。
マップレイヤーは、単一の静止したGameObject、または複数の移動するGameObjectをサポートしており、ラインレンダリングまたはポリゴンレンダリングを行うことができます。
- LayerGameObjectInstance - 単一の、静止したGameObjectを配置します。
- LayerGameObjectPlacement - 任意の数の GameObject や prefab を配置します。
- LayerLineRenderer - デバッグ視覚化に便利なラインレンダラー。
- LayerPolygonRenderer - デバッグの視覚化に便利なポリゴンレンダラー。
このようなコンポーネントを拡張して、スポーンや配置の動作をカスタマイズすることができます。
空のマップレイヤー
空のマップレイヤープレファブは MapLayer コンポーネントだけを保持します。 そのため、高い柔軟性が必要な場合や、複数のレイヤーが必要な場合に使用できます。 Map-Based Resource Game サンプルにその例があります。 BuildingLayer は、石材や製材所、要塞をスポーンするための他のレイヤーを含む空のレイヤーです。
LayerGameObjectPlacement / LayerGameObjectInstance
LayerGameObjectPlacement を使えば、複数のオブジェクトをインスタンス化できます。 オブジェクトは、複数のマップレイヤーにグループ化することができます。それらはすべて、LightshipMapの子として扱われます。 これらのオブジェクトはすべて、マップ上で動かすことができます。
LayerGameObjectInstance を使って、マップ上に一つのGameObjectを配置することができます。 配置したオブジェクトは、マップレイヤーの外部のコードでのみ動かすことができます。 オブジェクトを配置したLightshipMapViewに対するオブジェクトの位置や回転、スケールは保持されます。 マップの表示位置が変わっても、イベントハンドラでオブジェクトを再配置する必要はありません。 また、ビューの半径に合わせてスケーリングできるため、ユーザーがズームインやズームアウトを行っても大きさは変わりません。
コンポーネントにはいずれも、以下の設定が含まれています。
- Name - インスタンス化するGameObjectプレハブの名前。
- Scale with Map Radius - チェックを入れると、マップに対して相対的にスケーリングされます。
- Relative Scale - スケール比を表す数値。
- Minimum Scale - スケールの最小可能値。
- Maximum Scale - スケールの最大可能値。
以下の設定は、LayerGameObjectPlacementにのみ適用されます。
- Prefab - インスタンス化するプレハブのGameObject。
- Height Offset - Y軸のオフセット。
LayerLineRenderer / LayerPolygonRenderer
LayerLineRenderer マップ上の指定された領域を囲む境界線を描画します。 ラインレンダリングレイヤーでは、ループのレンダリングのみ行うことができます。
LayerPolygonRenderer はポリゴンを描画します。
この画像では、 Custom Map Layer Sampleから、ワシントンとオレゴンがポリゴンで覆われ、オレゴンのポリゴンが線で囲まれています:
コンポーネントにはいずれも、以下の設定が含まれています。
- Name - インスタンス化するGameObjectプレハブの名前。
- Fill Material - 使用するfill material(塗りつぶしマテリアル)。
- Height Offset - Y軸のオフセット。
LayerLineRenderer
には、以下が含まれます。
- Line Width - レンダリングされた線の幅。