はじめに
こんにちは、 @naichilab です。
この記事は Unity アセット真夏のアドベントカレンダー 2018 Summer! 22日目の記事です。
昨日は @xiumidaさんの 【アドカレ 2018】Closing Creditsでスタッフロールを作るでした。アセットの更新止まっちゃってるのが残念ですがとても便利そうです!
さて、本記事では Isometric 2.5D Toolset
というクォータービューのタイルマップを扱えるアセットを紹介したいと思います。
目次
環境
- Unity 2018.2.3f1
- Isometric 2.5D Toolset 3.0.3 (2018/08/15リリース)
クォータービューって?
Googleで画像検索するとこんな感じ。
クォータービューは和製英語らしいので Isometric Tile
とかで調べた方が情報は多いかもしれません
Isometric 2.5D Toolset について
今回紹介する Isometric 2.5D Toolset
はアイソメトリックタイルを使ったゲームを作りやすくしてくれるアセットです。
エディター上でのタイル配置、前後関係のソート、物理演算、3Dモデルとの併用など、いろんな機能を提供してくれます。
クォータービューの箱庭ゲームを作ろうと思って色々アセットを購入して比較しましたが、このアセットが一番求めているものに近かったので使っています。
とりあえず使ってみる
このアセットがどんな感じか知ってもらうために利用開始までの手順をまとめておきます。
Isometric 2.5D Toolset
をダウンロード&インポート
- アセットストアで購入してダウンロード
- Unityにインポートします。
IsoWorld
を設置
Isometric 2.5D Toolset
では、 IsoWorld
というスクリプトをつけたオブジェクトが必須です。
まずはそれを作ります。
- Hierarchy -> Create -> Create Empty
- 名前は
IsoWorld
とします。 - Position も
0,0,0
にしておきましょう。(別にずれててもいいですけど) - さらに AddComponent ->
IsoWorld
を追加します。 - こんな感じ
同一シーンに
IsoWorld
を複数設置することもできます。
IsoObject
を設置
IsoWorld
を設置したら、その子供に IsoObject
を作っていきます。
IsoWorld
を選択して再度 Create Empty します。- 名前は
IsoObject
にします。(Floor
とか、Table
とか分かりやすい名前をつけてもいいです) - Add Componentから
IsoObject
コンポーネントを付与。 - こんな感じになります。
- このままでは分かりづらいので下記チェックを入れましょう
- Editor Only -> Show Iso Bounds
- Editor Only -> Show Screen Bounds
- すると Scene ビューに六角形が表示されます。
タイルサイズを決める
IsoWorld
の World Settings
で各タイルのサイズを決めます。
今回は分かりやすく 1dot = 1m
になるように設定してみます。
例えば下記のような 32px x 16px
の画像を使う場合、
Tile Size
と Tile Height
を 16
にして、下記のようにします。
項目 | 値 |
---|---|
Tile Size | 16 |
Tile Ratio | 0.5 |
Tile Angle | 45 |
Tile Height | 16 |
試しにサイズが 32 x 16
のCubeと重ねて見るとこんな感じ。
ちゃんとCubeとひし形が重なりました。
等角以外のタイルについて
Tile Ratio
や Tile Angle
を変えると等角投影以外のタイルにも対応できます。
Tile Ratio
を変更した場合、見下ろす角度が変わります。
Tile Angle
を変更した場合、左右の角度が均一ではなくなります。
Isometric = 等角ではないタイルはなんて呼ぶんでしょうね?
今回の記事では等角のまま(TileRatio=0.5、 TileAngle=45)で進めます。
タイル画像を用意
タイルサイズを決めたら画像を用意します。
- この記事では今作ってるゲームの画像を使います。
インポートした
Isometric 2.5D Toolset
にもサンプル画像が含まれてるので特に用意しなくても試せます。
ドット絵タイル画像の自作について
自分は絵がかけないのでデザイナさん頑張ってとしか言えないのですが、
32px x 16px
を基準にする場合、32px x 15px
を積み重ねるように描くと綺麗に敷き詰められるようです。
32x15
でひし形を用意
厚み1pxで緑を重ねるとこんな感じ
ぴったり並びました。
Isometric 2.5D Toolset
では、IsoObject
の高さを0にすると同じ高さ同士でのソート順がおかしくなることがあります。 なので上記のような薄っぺらいオブジェクトも、1px分の厚みがあるものとして設定していきます。
テクスチャのインポート設定
- 用意した画像をUnityに放り込みます。
- テクスチャ設定を変更します。
- TextureType =
Sprite(2D and UI)
- Pixels Per Unit =
1
(画像サイズとタイルサイズの兼ね合いで調整してください) - Pivot =
Bottom
- Generate Physics Shape =
false
(不要) - Filter Mode =
Point (no filter)
(ドット絵なのでOFF)
- TextureType =
- 変更したら
Apply
IsoObject
にSpriteをつける
やっとタイル設定と画像の取り込みが終わったのでシーンに配置していきます。
IsoObject
の子として2D Object -> Sprite
を追加します。Sprite
のインスペクタから画像を選択します。- ひし形に合うように表示されました。
- 位置があってない場合はSpriteを移動させてしまえば大丈夫です。
IsoObject
を選択し、Sizeを変更する- この画像は高さ1pxなので、
1/16
を入力します。(IsoWorld
の設定で Tile Height を16にしたので1dot = 1/16) - 赤線がぴったり合いました。
- この画像は高さ1pxなので、
IsoObject
の名前を分かりやすく変更し、Prefabにでもしておきましょう。
タイルを並べる
- 作ったPrefabをHierarychyビューにドラッグするか、直接
IsoObject
をCtrl+D
やcmd+D
で複製します。 - それぞれの
IsoObject
を自由に移動します。- 綺麗に並びました。
IsoObject
のドラッグ移動が楽々
IsoObject
を選択した場合のGizmoはこんな感じです。
XYの線(赤と緑)が斜め上方向に伸びています。
IsoObject
のXYZ座標はWorldのXYZ座標と一致していないので、専用のハンドルが用意されています。
そしてこのハンドルはスナップが効くようになっているので整列させるのが非常に楽です。
他の形も並べてみる
同様に幅や高さの違う IsoObject
を作ってみました。
- 茂み(IsoSize =
1x1x1
) - 木(IsoSize =
1x1x5
) - テーブル(IsoSize =
1x2x1
)
適当に移動してもいい感じに整列してくれます。
Sceneビューを3D表示にすると常にソートされていることがよく分かります。
その他の小ネタ
物理演算したい
IsoRigidbody
コンポーネントを使えば可能です。
- 茂みに
IsoRigidbody
とIsoBoxCollider
をつけました。 - 床に
IsoBoxCollider
をつけました。
これだけでちゃんと重力を扱ってくれます。便利。