196の日記

完全に開発メモと雑談、その他忘れそうな計算式などを書き溜める場所になっています!

Unity TiledMapEditorで作成したものをUnityで読み込む


タイトル通り!

今回参考にさせていただいたサイト様はこちらです

https://anz-note.tumblr.com/post/120453126046/unitytiledmapを読み込んでマップ作ってみたけど無念っていう話
tmblr.co



とてもありがたいです!ただ残念ながらTiledMapEditorさんの保存ファイルの中身が若干変わっていたので, そのままでは使えない状態でした。。なので、最低限使えるように色々と書き足しました。
最後に今回のプロジェクトのgitを貼っておくので、動かしながら僕の汚いコードを読み解いて見てください。。(原作者さんのコードはきっと綺麗ですよ!)



ちなみに、TiledMapEditorはこちらから無料でインストールできます。



バージョン

Unity 5.5.1f1 Personal
TiledMapEditor 1.0.2


使い方

基本的には原作者さんのページをご覧ください。どういう意図で作られているかが、わかるかと思います。



まず、TiledMapEditorの方はこんな感じ
f:id:thinline196:20170811020226p:plain




カスタムプロパティやオブジェクトの情報は読み込めはしますが、そこから料理するのは個々で変わってくると思うので、ほとんど何もできません。(唯一、原作者さんが作ってくれたIsCollision機能は、Sprite描画パターンでのみ動きます。)




今回のメインの保存ファイルはtestMap.tmx, メインに使ったタイルの情報はsiba.tsxとtownObject.tsxファイルに保存されています。Unityではこれらのファイルは読み込めないので、手動でxmlファイルに書き換えてください。



今回はこのように配置します。(Resourcesフォルダ以下の内訳です)
f:id:thinline196:20170811020648p:plain



Resources/Tiles/以下のファイルはタイルのxmlファイルとそれに使用した画像を配置します。一応仕様になっているので、変更したい方はスクリプト内から "Tiles/" の文字列を探して見てください。
testMap.xmlファイルは今回はエディタ上で紐付けしていますが、そのうち動的に呼び出すと思うので、まとめてフォルダに入れておくのがいいと思います。



その紐付けしているのがココ
f:id:thinline196:20170811021055p:plain


Spriteチェックをつけると、全てのパネルが別々のSpriteに格納された状態で、マップが生成されます。外した場合は、レイヤーごとに1枚のTextureとしてマップが生成されます。後者の方が総合的におそらく負荷が軽いはず。ただ、動的に変更させる部分はSrpiteで個別に作るのがいいかもです。



実行するとこのようになります。
f:id:thinline196:20170811021402p:plain




その他

xmlの情報は全て格納されているはずなので、カスタムプロパティなどはNameで検索して、そこからうまく使ってあげてください!おそらくまた保存の仕様が変更になる事があると思うので、その時は格納クラスを上手く書き換えてください。
・どこから手をつけていいかわからない方は、僕のtestMap.xmlファイルとそれに対応するTiledMapクラスを見比べていただければいいかと思います。


最後に

コード汚くてすいません!!
他人のコードの沿って、色々と機能をつけていると、どうしても汚くなってしまう。。。。おそらく仕事などで普段から大人数が目を通すコードを描いているなら、読み方書き方がわかると思うのですが、、笑 


今回僕が行なったのは、xmlからデシリアライズできるように、格納するクラスを仕様変更に沿って書き換えたりしただけですので、やはり原作者さんは素晴らしいですね。痛感いたしました。
と、同時にxmlに対して食わず嫌いな部分があったので、少し克服できたかなと思います。



github.com