こんにちは、Unityエンジニアのオオバです。

お悩みさん
お悩みさん
  • Unityの単位はメートルだけど、Spriteもメートル?
  • 1ピクセルは何メートル?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    Unityで2Dゲームを作るときに、Sprite(スプライト)を使いますよね。
    ところでSpriteの 大きさ単位 って分かりづらくないですか?

    そうなんです。ちょっと分かりづらいのです。
    メートル?ピクセル? とごちゃごちゃしますよね。
    本記事では Spriteの理解があいまいな人向け にわかやすく解説していきます。

    オオバも日夜ゲーム開発しているんですが、Unityの単位は重要だと感じています。
    理由は、Unityの単位を理解しないと、オブジェクトを 思った通りの配置ができません。
    つまりUnityエンジニアにとって 「Unityの単位」 は必須知識です。

    ぜひUnityの単位をマスターしてSpriteを思い通りに扱えるようになりましょう。

    UnityのSpriteはPixels Per Unitの理解が必須

    結論を簡単にまとめます。

    UnityのSpriteはPixels Per Unitの理解が必須

    ①Spriteの大きさは「Pixels Per Unit」で指定

    ②単位「1」のピクセル数を設定(例:300と設定したら1 = 300ピクセルということ)

    ③「Pixels Per Unit」は各テクスチャごとに設定できる

    Pixels Per Unit というのは、各画像ごとに単位「1」のピクセル数を指定できるということです。つまり、 Spriteの大きさは画像ごとに指定できる ということ。

    言葉だけではちょっと分かりづらいですね。ここからは 図解を使ってわかりやすく解説 していきます。

    →11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら

    【基礎】 Unityの単位はメートル

    大前提として Unityの世界はメートル です。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_0

    👆このようにX、Y、Zがすべて「1」の立方体(Cube)を作成してみます。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_1

    この立方体は 1辺1メートル立方体 ということです。

    座標も同様です。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_2

    X座標が0から4に移動した場合、右に4メートル移動した ということになるのです。

    「大きさ」と「位置」は、 単位がメートル だということを理解しておきましょう。その上で Spriteの世界 はどうなるか確認していきます。

    UnityのSprite単位は「Pixels Per Unit」で設定

    結論、Spriteの単位は Pixels Per Unit で指定されます。Pixels Per Unitとは、その名の通り、 1単位に対するピクセル数 です。

    言い換えると 1メートルに何ピクセル使うのか? ということです。例えば Pixels Per Unitが100で、原点に配置している場合、X座標に1を入れると、 100ピクセル右に移動した ということになります。

    Sprite1ピクセルはUnity上で何メートル?

    もう少し深堀りましょう。1ピクセルは何メートルでしょうか?答えは簡単です。「1をPixels Per Unitで割り算」 すれば答えは出ます。

    1 ÷ 100 = 0.01(メートル)  
    

    つまり 1ピクセルは1センチメートル です。
    (Pixels Per Unitが100の場合)

    ところでSpriteは 「SpriteAtlas」 を使うことで描画パフォーマンスを上げることができます。まだSpriteAtlasを使ったことがない方はぜひ次の記事を読んでみてください。今作っているゲームのパフォーマンスをお手軽にアップできるかもしれませんよ

    Pixels Per Unitは画像に設定するパラメータ

    Pixels Per Unit は各テクスチャごとに設定できるパラメータです。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_3

    👆このように初期値は100。

    Pixels Per Unitはアプリ全体を通して一律の値ではないということ。つまり、 画像ごとに自身のサイズを指定できる のです。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_4

    このSpriteを256px右に移動させるためには、Xにどういう値をいれれば良いでしょうか。

    移動させる距離 = 移動させたいピクセル ÷ Pixels Per Unit

    移動させたいピクセル数をPixels Per Unitで除算します。
    今回の場合は、256px / 100 = 2.56です。
    答えは 2.56メートル です。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_5

    Xに2.56と代入します。

    【2Dゲームで必須】UnityのSprite(スプライト)の単位をわかりやすく解説_6

    すると256pxの画像は隣同士ピッタリくっつきます。256px移動したということですね。同時に2.56メートル移動したとも言えます。

    👇2Dゲームを作る際には、ぜひこの公式を覚えておきましょう。

    移動させたい距離 = 移動させたいピクセル数 ÷ Pixels Per Unit  
    

    ちなみに、今回使用した画像は2000 Fantasy Iconsです。 超ボリューム2000個のアイコンアセット。ファンタジー系のゲームを作るときにおすすめです。

    まとめ : Pixels Per Unitの理解して、Spriteの単位をマスターしよう

    記事の内容を簡単にまとめます。

    こんな感じです。

    2Dゲーム開発ではPixels Per Unitがとても重要です。
    なんか距離や大きさがおかしい指定したパラメータ通りにならない とき、Pixels Per Unitをチェックしてみましょう。

    また、Pixels Per Unitは画像個別に設定できるわけですが、値は固定した方が安全です。

    個人開発なら大丈夫かもですが、チーム開発の場合、 複数のPixels Per Unitはトラブルのもと。 厳密なルール化ができない場合は デフォルトの100を基準に採用するのが安全 です。

    ところで、不適切なUnityの画像サイズは無駄なメモリを使用する原因になります。スプライトのサイズは初心者には理解しづらいです。ぜひ、次の記事を読んでみてください。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいSpriteライフをお過ごしください。

    オススメ記事
    検証環境