はじめに
こんにちは、 @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をつけました。
これだけでちゃんと重力を扱ってくれます。便利。