メインコンテンツまでスキップ

グリッドベース移動システム

MCE は Unity の Tilemap 上に構築されたタイルベースのグリッド移動システムを使用しています。プレイヤーとNPCは離散グリッド上を1タイルずつ移動し、衝突判定、地形効果、マップ間遷移はグリッドシステムによって処理されます。

コアコンポーネント

GridController

GridController はシーンごとのタイルグリッドマネージャーです。以下を行います:

  • 現在のシーンの衝突マップを管理。
  • 歩行可能、通行不可、特殊プロパティを持つタイルを追跡。
  • タイルベースの衝突クエリを処理(キャラクターはタイル X,Y に移動可能か?)。
  • エンカウント、ワープ、特殊地形のタイルデータを管理。

各シーンにはグリッド/タイルマップのルートに1つの GridController が紐付けられています。

MCECharacterController

MCECharacterController はグリッド上の任意のキャラクター(プレイヤーまたはNPC)の移動を処理します:

  • グリッドスナップ移動:キャラクターは1ステップにつき正確に1タイル移動。
  • 4方向移動:上、下、左、右。斜め移動なし。
  • スプライトレンダリング:方向と歩行アニメーションを自動更新。
  • 衝突チェック:各移動前に GridController にクエリ。
  • 移動速度:設定可能な歩行速度とオプションのダッシュ。

PlayerCharacter

PlayerCharacterMCECharacterController をプレイヤー固有の機能で拡張します:

  • 入力処理(キーボードとゲームパッド)。
  • インタラクショントリガー(NPC/オブジェクトに向かってアクションボタンを押す)。
  • エンカウント歩数カウント。
  • ダッシュ/自転車の速度補正。
  • フォロワーモンスターとの連携。

GlobalGridManager

GlobalGridManagerマップ間ナビゲーションを処理します:

  • シーン間を遷移するワープタイルを管理。
  • 接続されたマップのアディティブシーンロードを処理。
  • 遷移間でプレイヤーの状態を保持。
  • ロード画面/フェード遷移を管理。

タイルタイプ

MCE は複数のタイル動作に対応しています:

タイルタイプ説明実装
通常標準的な歩行可能タイルデフォルト
通行不可歩けないタイル衝突タイルマップレイヤー
草むら歩行可能、エンカウントチェックをトリガーEncounterTile コンポーネント
なみのりが必要TileType.Water
段差一方向のみ横断可能(飛び降り)TileType.Ledge + 方向
別のレイヤーのタイルの上を歩けるTileType.Bridge
氷の床障害物にぶつかるまで滑り続けるTileType.Slippery
特定のひでんわざで登れるTileType.Waterfall
ワープ別のシーンに遷移ワープ設定
回転キャラクターを特定方向に強制回転TileType.Spinning

マップのセットアップ

ステップ 1:Tilemap 構造の作成

MCE のマップは標準的な Unity Tilemap ヒエラルキーを使用します:

Grid(Grid コンポーネント)
└── Ground(Tilemap、TilemapRenderer、sorting order 0)
└── GroundOverlay(Tilemap、TilemapRenderer、sorting order 1)
└── Collision(Tilemap、TilemapCollider2D)
└── Encounters(EncounterTile コンポーネント)
└── Actors(NPC の GameObject)

ステップ 2:マップのペイント

Tile Palette(Window > 2D > Tile Palette)を使用してマップをペイントします:

  1. Ground レイヤー:ベースの地形(道、草、土、水辺)。
  2. GroundOverlay レイヤー:地面の上の装飾(花、岩、影)。
  3. Collision レイヤー:通行不可のタイルをマーク(壁、木、岩)。

ステップ 3:GridController の追加

  1. Grid ルート GameObject を選択。
  2. GridController コンポーネントを追加。
  3. タイルマップレイヤーを自動検出し、衝突マップを構築します。

ステップ 4:SceneInfo の設定

各マップシーンには SceneInfo コンポーネント(または SceneInfoAsset ScriptableObject)が必要です:

フィールド説明
Scene Name場所の表示名(ヘッダーに表示)
Regionこのマップが属する地方
Scene Tagゲームロジック用タグ(例:「Cave」、「Town」、「Route」)
BGMこのマップのBGM
Wild Encountersこのマップのデフォルトエンカウントセット

特殊地形

橋はキャラクターが通常は通行不可のタイル(水など)の上を歩けるようにします:

  1. より高い sorting order を持つ橋のタイルマップレイヤーを作成。
  2. 歩道が水上を横切る場所に橋タイルを追加。
  3. それらのタイルの TileTypeBridge に設定。
  4. 橋タイルに踏み込むとキャラクターは橋レイヤー上を歩きます。

橋のロジックは Z オーダーを自動処理します -- キャラクターは水の上、橋の手すりの下にレンダリングされます。

氷の床(Slippery)

氷のタイルでは、キャラクターは壁または氷でないタイルにぶつかるまで移動方向に滑り続けます:

  1. 氷タイルの TileTypeSlippery に設定。
  2. MCECharacterController が入力をオーバーライドし、移動方向を継続。
  3. 壁や障害物を配置して氷パズルのレイアウトを作成。

段差

段差は一方通行のタイルです -- キャラクターは飛び降りられますが、登り返すことはできません:

  1. TileTypeLedge に設定し、方向(キャラクターがジャンプする方向)を設定。
  2. キャラクターが段差を越えると短いホップアニメーションが再生。
  3. 段差はルートにショートカットを作成するためによく使用されます。

滝は適切なひでんわざまたは特性で登ることができます:

  1. 滝タイルの TileTypeWaterfall に設定。
  2. 必要な特性またはひでんわざを設定。
  3. プレイヤーが滝に向かって特性を使用すると、キャラクターが上昇。

マップ間遷移

ワープのセットアップ

2つのマップを接続するには:

  1. ソースマップの端またはドアにワープタイルまたはワープアクターを配置。

  2. ワープを以下で設定:

    • Target Scene:ロードするシーン。
    • Target Position:ターゲットシーンでプレイヤーが出現する位置(タイル座標)。
    • Target Direction:ワープ後にプレイヤーが向く方向。
    • Transition Type:フェード、ドア、洞窟入口など。
  3. GlobalGridManager がシーン遷移を処理:

    • 画面をフェード。
    • 現在のシーンをアンロード。
    • ターゲットシーンをアディティブにロード。
    • プレイヤーをターゲット位置に配置。
    • フェードイン。

マップ接続(シームレス)

直接接続するマップの場合(例:ルート1がルート2と北端で接続):

  • 接続する辺全体にワープタイルを配置。
  • すべてのワープを同じターゲットシーンの対応する位置に設定。
  • 遷移にはクイックフェードを使用。

プレイヤー移動の設定

PlayerCharacter コンポーネントの設定:

フィールド説明デフォルト
Walk Speed歩行時の1秒あたりのタイル数4
Run Speedダッシュ時の1秒あたりのタイル数8
Bike Speed自転車時の1秒あたりのタイル数12
Can Runプレイヤーがダッシュ可能か(Bボタン)true
Has Bikeプレイヤーが自転車を解放済みかfalse
Step Counterエンカウントとタマゴ孵化用の合計歩数を追跡自動

モンスターフォロワー

MCE はプレイヤーのパーティの先頭のモンスターがフィールドマップで後ろを歩くフォロワーシステムに対応しています:

  • MonsterFollowerController がフォロワーの位置とスプライトを管理。
  • フォロワーは1タイル遅れでプレイヤーの移動パスを追従。
  • フォロワースプライトは MonsterEntry で種族ごとに設定。
  • プレイヤーはフォロワーにインタラクトできます(振り向いてアクションボタンを押すとフレーバーテキストが表示)。
フォロワースプライト

モンスター種族にフィールドのフォロワースプライトが割り当てられていない場合、フォロワーは表示されません。Art Studio を使用してフォロワースプライトシートを生成するか、4方向歩行サイクルシートとして手動で作成してください。

ベストプラクティス

  1. 衝突レイヤーの一貫性を保ちましょう。すべての通行不可地形に同じ衝突タイルを使用してください。
  2. ワープ接続を双方向でテストしましょう。AからBへ移動し、BからAへ戻れることを確認してください。
  3. エンカウントロジックには SceneTag を使用しましょう。マップ名をハードコーディングする代わりに、マップに「Cave」「Water」「Forest」などのタグを付けてください。
  4. 大きなマップは最適化しましょう。非常に大きなタイルマップ(200x200以上)はパフォーマンスに影響する可能性があります。複数の接続シーンに分割することを検討してください。
  5. ゲームパッドでテストしましょう。グリッド移動はキーボードとコントローラーの両方でレスポンシブに感じられる必要があります。