Unityでゲーム開発しないけれどUnity Asset Storeを利用するゲーム開発
ゲーム用の素材が集まる場所として最大規模のUnity Asset Storeですが、こちらのサービスは大変お世話になっています。
ただ、Phaser.jsでゲーム開発を行なっているので、そういったケースでのUnity Asset Storeの利用方法を簡単に書いておきたいと思います。
ポイントその1: ライセンスを確認しよう
以前はライセンスについてもう少し厳格だったようですし、正確に言えば規約上ではUnity以外のゲームエンジンでの利用について明言されていないため、個別のアセットについて直接製作者に問い合わせるなどの必要があったと認識しているのですが、現在のUnit Asset Storeで買ったアセットについてはUnity以外のゲームエンジンでの利用はOKとなっています。
ただ、個別のケースについてはもしかしたら例外なものがあるのかもしれませんので、購入しようとしているアセットのライセンスはしっかり確認しておく必要があるかと思います。
ポイントその2: Unity以外で利用できるものなのか調べておこう
僕自身が購入するのはこれまで画像系だったため困ったことはありませんが、Unityでしか利用できないものもアセットの種類によってはあると思います。
実際に買ってみないと分からないというケースもあるかもしれませんが、購入前の事前のチェックできることは確認しておいた方が良いかなと思います。
ポイントその3: スプライトシートの作り方などある程度の実装は覚悟しておこう
素材そのものがそのままUnity以外のゲームエンジンにおいて利用できるというケースは少ないのではと思います。
一旦はUnityを立ち上げ、そのアセットに含まれる素材のファイルを取り出し、そのデータを加工するスクリプトを書くことを前提にすべきかなと思いますし、実際僕自身、Unity経由で取り出した画像の入っているフォルダからいい感じにアイテムごとにスプライトシートの画像として書き出すようなコードを書いて運用しています。
具体的な場合ですと、あるアセットは画像が入っているフォルダがキャラクターの動作がjumpやidle、walkingといった単に別れたフォルダがあり、その中にアニメーションを前提とした一枚一枚のpngが入っていましたので、それをPhaser.jsでアクション名を指定するだけでアニメーションできる形式になるコードを書いたりしました。
こういうことをしようとした時、こだわりがなければPythonでサクッと書くのがちょうど良い塩梅かなと思いますが、あいにくこだわりがある開発をしている僕としてはClojureScriptを使い楽しくそういったツールを作っています。
(defn gen-sprites []
(let [config (read-edn "resources/config.edn")]
(doseq [[id {:keys [type path size actions dest]}] config]
(println "Creating: " id)
(let [assets (condp = type
:2d-ultimate-bundle (load-images-from-2d-ultimate-bundle path actions))
image-paths (flatten (for [{:keys [paths]} assets] paths))]
(merge-images image-paths (:image dest) 8 (first size) (second size))
(sprite-json id assets (:sprite-json dest) (:anims-json dest) 8 size)))))
こういった場合に設定ファイル的なものをJSONファイルあたりで用意しておき、その設定に沿ってアセットファイルが作られるようにしておくと後々便利です。というのもコードに直接設定を書くというよりはパラメータをちょっといじってそのパラメータを元に新たに素材を作るというケースが多いためで、コードと設定ファイルで分離しておくとそういった作業がスムーズですし、コードを書かない人でも運用しなすくなる利点もあります。
といった形でざっくりとまとめてみました。Unityで素直に開発しておけばと思わなくもないではないのですが、そこは自分の道を行ける個人ゲーム開発の覚悟であり矜持かなと思う今日この頃です。