現在制作中のプロジェクトをリファクタリングするために別プロジェクトとしてテスト等を行うことがあると思います。
思ったように修正できて、元のプロジェクトにオブジェクトや設定を戻したいとなったとき、GameMakerだと意外と面倒だと感じることがあります。
どうやったら楽にコピー出来るのか、GameMakerのプロジェクトファイルを眺めながら考えてみました。
※考察なので、この内容をみて実際にやってみたらプロジェクトが壊れた等ということもあるかもしれません。
■前提条件
別プロジェクトのオブジェクトは、スプライト含み完全な状態になっている。
元プロジェクトとオブジェクト・スプライト等は同名である。
GameMakerのプロジェクトは、リソースごとにフォルダが分かれていて、各リソースごとに設定がまとまっています。
objectsにはアセットのオブジェクトがそのままの名前で保管されています。
設定ファイルは拡張子yy、中身はjsonフォーマットのデータになっています。
gmlは、そのまま拡張子gml、ファイル名がイベント名のファイルでプログラムがそのまま入っています。
同名のオブジェクト、同名のスプライトであれば、フォルダをそのまま上書きしてしまえば更新できそうです。
コピーするときは、元プロジェクトを開いていない状態の方がいいと思います。
コピーするときは、画像があるオブジェクトの場合、オブジェクトとスプライトをセットでコピーする必要があります。
開発しているのは自分なので、オブジェクトとスプライトに何を使っているのかはわかるはずですが、たくさんのオブジェクトがあるとどれとどれがセットだったのか忘れたりするケースもあると思います。
そんなときは、オブジェクトの設定ファイルに、親のオブジェクト情報やスプライト情報が入っているので、オブジェクトのファイルを開いて解析するだけで、芋づる式に使用しているリソースの情報を取得することができます。
使われている全てのファイルをコピーする必要があります。
■新しいオブジェクトを追加したい
元プロジェクトに無いオブジェクトなどを追加したい場合、プロジェクト自体の設定ファイルに情報が必要となりますので少し難易度が上がります。
ただ単にobjectsにファイルをコピーしただけでは、GameMakerのIDEのアセットリストに表示されません。
アセットリストに表示するための目次情報がプロジェクトの設定ファイルにありますので、その目次を用意する必要があります。
プロジェクトの設定ファイルは、プロジェクトのルート拡張子yypのファイルです。
この設定もjsonになっていて、アセットはresourcesというところに書いてあります。
この部分の情報を元に、objectsのファイルがセットになってリストに表示されるようになります。
そもそも、オブジェクト等が同名だったら上書きするかどうかとか聞いてくればいいのになと思ったりしました。
> そもそも、オブジェクト等が同名だったら上書きするかどうかとか聞いてくればいいのになと思ったりしました。
今このあたりの問題で日々苦しんでいるので、100回くらい頷きました。
同名のアセットがある場合、
を選ばせてくれればいいのに、と思っています。