前回までの記事でプレイヤーキャラをマップ上で移動させ、アニメーションを付けることができました。
前回の記事:
今回の記事ではフィールドマップとダンジョンマップの切り替えを実装していきます。
フィールドとダンジョンを移動するイベント用マスの作成
まずはイベント用のマスを作成していきましょう!
イベント用のマスはマップの「EventBox」レイヤーに配置していきます。
次の手順を行い「EventBox」レイヤーに配置する「Tilemap」のマップチップを新しく作成します。
- メニューのAssets > Create > Tileをクリックし、新しい「Tile」アセットを作成する
- 作成する「Tile」アセットの名前は「MoveDungeonMapChip」にする。
- 保存するフォルダーの位置はお好みでOKです。記事では「FieldPalette」と同じフォルダーにしています。
(↑この手順はUnity2019までは使えますがそれ以降のバージョンでは使えません。Sprite画像をそのままタイルマップにドラッグ&ドロップして新しいTileとして追加すればOKです。)
作成した直後の「MoveDungeonMapChip」にはスプライトが設定されていませんので、そのままでは画面に表示されません。
「EventBox」レイヤーに配置するマップチップは画面に表示しないようにするので、見た目は編集中に判別できるものがいいでしょう。
この記事ではマップで使用している画像から適当なものを設定し、色を変更したものにしています。
フィールド用のマップに配置する
「MoveDungeonMapChip」アセットを作成したら次はそれを「FieldPalette」に追加しましょう。Window > 2D > TilePaletteを開きます。
追加は単にドラック&ドロップでOKです。
追加したら、次は実際にマップ上に配置していきます。FieldMapPrefabの「EventBox」レイヤーを開きましょう。
配置する際はスクリプトで制御するので必ず「EventBox」レイヤーに配置してください。
配置位置はマップによるので、プレイヤーがそのマスに移動したらダンジョンに移動させたい位置に配置してください。
記事では次の画像のように配置しています。
EventBoxの「TilemapRenderer」コンポーネントが非表示になってる場合は一度表示させてちゃんと配置できるか確認してください。
スクリプトの実装
マップ関係のアセットの準備ができましたので次はスクリプトの方を修正していきます。
まとめ
少々長くなりましたが、今回の記事ではマップの移動処理を作成しました。
マップの「EventBox」レイヤーにマップを移動するマスを配置し、マップ移動のイベントを実行しています。
今後マップにおいて色々なイベントを実装する際も同じような流れで行います。
「MassEvent」クラスの派生クラスを定義したり、「EventBox」レイヤーにイベント用のマスを配置していきます。オブジェクト指向を意識した実装にすることで何度も同じスクリプトを再利用していきます。
その分、マスイベントを作成する際に形式的に行うことが多いですが、このあとも頑張って作業していきましょう!
まとめると以下のようになります。
- マップに配置するイベント用のマップチップを作成&パレットに配置する。
- マップの「EventBox」レイヤーにマップ切り替え用のマスを設定する
- 「Map」コンポーネントにマップ移動用のイベントデータを設定
- プレイヤーがマップ切り替え用のマスに到達したら、そのマスに設定されたマップを切り替える
- 以後、「EventBox」レイヤーには専用の「Tile」アセットを設定していく。
- 「Map」コンポーネントには「EventBox」レイヤーに設置したマスを識別できるようなデータを持たせる。
追記:
今回の講座ではマップシステムをタイルマップやレイヤーで表現し、ScriptableObjectと対応する継承先のスクリプトでイベントの中身を実装する形で進めています。
他の方法としてはプレイヤーにコライダーなどで当たり判定を付け、イベントとなるゲームオブジェクトを別途用意。そこにもコライダーを付けていく方針などが考えられます。
次の章から出てくるNPC系はColliderこそ使用していませんが、マップに配置する形になっています。使い分けとしては固定のものはタイルマップに配置する形となっています。
このあたりの実装の方法についてはいくつか選択肢があります。ご自身で作品作りを行う際はお好きな形を選んでもらえたらと思います。
それでは次の記事に行ってみましょう!
次の記事:
コメント
Assets > Create > EventChipが見当たりません。
どこにあるのでしょうか
質問ありがとうございます。
Assets > Create > MassEvent > Move Map
の順で作成してみてください。これで作りたいScriptable Objectが生成されます。
ありがとうございます。
Assets > Create > MassEvent > Move Map
のMassEventが見当たらないです
報告ありがとうございます。
こちら、改めてチェックしてみましたがやはりファイル作成問題なくできました。
該当箇所に追記を行ったので記事の方再度確認していただければ幸いです。
こんにちは。
Unity 2021.3.2f1の環境ですと、
Assets > Create > MassEvent
についても見当たらないです。
こちらに関して記事内で追記の節を新たに追加しました。
結論から言うとUnity2021.3.5f1で普通に目的のファイルを生成可能でした(3.2f1では試してませんが)。
そちらの環境で上手くいかなった原因はわからないですが手元の環境の8章途中段階まで進めたファイルのダウンロードリンクも追加しておいたので参考にしてみてください。
こんにちは!
MoveDungeonMapEventを作成し、Tile、StartPosTileにそれぞれアセットを設定することはできたのですが、MoveMapPrefabにプレハブを設定することが出来ません。
どうすればプレハブを設定できるのでしょうか?
MoveMapPrefabの設定方法がわからないとのことですね。
記事内にMoveDungeonMapEventを作成した後に実際にどうアタッチするかを示した動画を追加しました。
具体的にはProjectエディタのPrefabsフォルダの中にある「DungeonMap」プレハブをドラッグ&ドロップすることでアタッチできます。
Mapクラスをアタッチしたプレハブをインスペクター画面にあるMoveMapPrefabにドラッグ&ドロップです。