ホーリーのプログラミング日記

ホーリーのプログラミング日記

エキセントリック・スーパーアプリクリエイター / アプリ総DL数 約180万 / 全然分からない 俺は雰囲気でアプリを作ってる / iOS : apple.co/3m3HxSm / Android : bit.ly/3ma0liZ

SpriteKitで作ったゲームを、そのままUnityに直してみる

 

こないだリリースした激ムズ4段ジャンプってゲームを、ちょっと修正してみました。

激ムズ4段ジャンプのAndroid版をリリースしました - ホーリーのプログラミング日記

 

なんかリリースしたのはいいんですけど、iPhone版のそれに比べると、どうもゲームバランスがおかしかったんですよね。普段以上におっさんが挙動不審になってました。

んで、最近になってSpriteKitのゲームをUnityに上手く直せるようになってきたので、ちょっとそのことについて書いてみようと思います。

 

 

 

とにかくUnityでは座標が分からなかったんですよ。SpriteKitで開発してたときは、いつもiPhone6のサイズにしてたんですが、Unityの基準が分かりませんでした。

iPhone6のサイズ、ようは横750px、縦1334pxのそれに慣れてたんですけど、Unityは全然違うんですよね。

「UnityではじめるC#」って本にも、「単位のない座標系」なんて言葉があって、マジで混乱した次第です。Unityの画面サイズってなんやねんと。

 

UnityではじめるC# 基礎編

UnityではじめるC# 基礎編

 

 

僕はとにかく画面のサイズを知りたかったんですよ。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倍縮小しています。

 

f:id:gevvoihorry:20170115194743p:plain

(750*1334の画像があります。)

 

f:id:gevvoihorry:20170115194816p:plain

(Unityにゲームオブジェクトとして置くと、画面をはみ出します。ちなみにサイズはiPhone5Tall)

 

f:id:gevvoihorry:20170115194903p:plain

(んでこれのscaleを0.75倍すると、、)

 

f:id:gevvoihorry:20170115194931p:plain

(ちょうど良くなるんですよね)

 

それで肝心の座標なんですが、これも変換する公式を見つけました。

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に慣れた気がしますね。多分。