こないだリリースした激ムズ4段ジャンプってゲームを、ちょっと修正してみました。
激ムズ4段ジャンプのAndroid版をリリースしました - ホーリーのプログラミング日記
なんかリリースしたのはいいんですけど、iPhone版のそれに比べると、どうもゲームバランスがおかしかったんですよね。普段以上におっさんが挙動不審になってました。
んで、最近になってSpriteKitのゲームをUnityに上手く直せるようになってきたので、ちょっとそのことについて書いてみようと思います。
とにかくUnityでは座標が分からなかったんですよ。SpriteKitで開発してたときは、いつもiPhone6のサイズにしてたんですが、Unityの基準が分かりませんでした。
iPhone6のサイズ、ようは横750px、縦1334pxのそれに慣れてたんですけど、Unityは全然違うんですよね。
「UnityではじめるC#」って本にも、「単位のない座標系」なんて言葉があって、マジで混乱した次第です。Unityの画面サイズってなんやねんと。
僕はとにかく画面のサイズを知りたかったんですよ。Canvasを使うときは750*1334の慣れたサイズに設定して、そこにuGUIを置いていけばよかったんですが、ゲームオブジェクトを配置するときは、そうならないんですよね。
「UnityではじめるC#」 を読んだUnity初心者の人なら共感してくれると思うんですが、あれって脱出ゲームと物理ゲームの2つを作るじゃないですか。
んで脱出ゲームのときは、Canvasだからいいんです。普通にピクセルで部品を置けばいいでしょう。
でも物理ゲームになると、途端に座標が分からなくなるんですよね。基準が全然分からないっていうか。
☆☆☆
えー、前置きが非常に長くなりました。自分なりの変換方法について書いてみます。
上記したように、SpriteaKitでゲームを作っていたときは、僕はiPhone6のサイズ(750*1334)にしていたんです。
んで、Unityでは、基本的にiPhone5Tall(9:16)で開発しています。
まずSpriteKitで画面ちょうどだった画像を、Unityに持っていくと、画面からはみ出るんですよ。
んでscaleを0.75にするとちょうど良くなりました。なので、僕がSpriteKitで作ったアプリをUnityで作り直すときは、全ての画像を0.75倍縮小しています。
(750*1334の画像があります。)
(Unityにゲームオブジェクトとして置くと、画面をはみ出します。ちなみにサイズはiPhone5Tall)
(んでこれのscaleを0.75倍すると、、)
(ちょうど良くなるんですよね)
それで肝心の座標なんですが、これも変換する公式を見つけました。
UnityのiPhone5Tallの場合、横の幅が5.6。縦の幅が10になります。んで真ん中が0ですね。縦0、横0の状態が真ん中って感じの。
それでSpriteKitは左下が0だったんですよ。画面サイズは750*1134で。
つまり750→5.6。1334→10に変換すればいいってことですね。
5.6 / 750 = 0.00746667
10 / 1334 = 0.00749625
四捨五入すれば、縦横ともに、0.0075をかければいいことになります。
んで座標の真ん中が0なので、これを加味して、横は2.8を、縦は5を引けばいいことになりますね。
さあ、そんなこんなで導き出した公式がこれだ。
横:0.0075x - 2.8
縦:0.0075x - 5
この場合のxは、SpriteKitのときの座標ですね。つまり横400、縦800って位置に置いてた画像は、Unityに直すとこうなります。
0.0075 * 400 - 2.8 = 0.2
0.0075 * 800 - 5 = 1
Unityでは横0.2、縦1って場所に置けばいいということです。
なんか説明が下手すぎて、伝わってるのかどうか怪しんですが、とにかくこういうことなんですw
☆☆☆
まとめますと、僕がSpriteKitのゲームをUnityに直すときは、画像のサイズを0.75倍して、座標の位置を上記の公式に当てはめて変換していました。
こんな原始的な方法じゃなくて、もっと現代人ぽい、スタイリッシュな方法がありそうですが、とりあえず僕はこうしたっていう話です。
自分なりの基準が出来たんで、またひとつUnityに慣れた気がしますね。多分。