【Unity道場】使って覚えるTileMap に参加しました
概要
イベント
Unity 2017.2bでUnityEditorに組み込まれたTileMap機能について講義/ハンズオン形式で学ぶイベント。 @tsubaki_t1 さん(テラシュールブログ) が講師を務めてくださり、更にハンズオンということでUnityスタッフが分からない部分を教えてくださる、至れり尽くせりな会でした。
会場
会場の「ベルサール六本木コンファレンスセンター」は「住友不動産六本木グランドタワー」の9階にあります。これまで渋谷のTECH PLAY SHIBUYA (旧dots.) で開催されることが多かったが、六本木の会場になってからは初参加。
着いた!(迷った) #unity道場
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月5日
迷いました。
資料
www.slideshare.net
内容
2D Experimental Preview
Unityにおける新機能は、クオリティ向上やバグを防ぐ目的で、いきなりリリースするのではなく、Experimental Buildという形式でユーザに試してもらうケースが多くなっている。最近 2D Experimental Preview で検証されている内容は以下を参照。
https://forum.unity3d.com/forums/2d-experimental-preview.104/ www.youtube.com
Experimental Buildの段階を経て、次はベータリリースされるが「TileMap」の機能は、先日リリースされた unity2017.2b に含まれている。
TileMapの使い方
おー、Tilemap出来た! #Unity道場 pic.twitter.com/HhGAFfj0d1
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月5日
上記でやっているのは以下の一連の流れ。
- TilePaletteの作成
- Window > TimePalette
- CreateNewPaletteを選択
- TileAssetの作成 (ワークショップでは対応済みだった)
- Textureの設定
- タイルマップに使用したい画像アセットを選択
- TextureTypeをSpriteに変更
- SpriteModeをMultipleに変更
- PixelPerUnitをタイル1枚における一片の長さを指定
- (FilterModeをPointにすると補間が無くなり、ドット感が増す)
- Spriteの設定
- SpriteEditorを開く
- Sliceでタイル毎に画像を分割 (GridByCellSizeを使うと楽)
- Textureの設定
- TilePaletteへの登録
- 先ほど設定したSpriteをTilePaletteウィンドウにドラッグ/ドロップ
- TileAssetをどこに保存するか聞かれるので適当に指定
- TileMapを埋める
- Hierarchy上で 2DObject > TileMapを選択
- 塗りたいTileMapオブジェクトをHierarchy上で選択
- (TileMapオブジェクト自体を複数生成できるため)
- TilePaletteから “ブラシ” (筆のアイコン) を選択
- 塗りたいタイルを選択
- Sceneビュー上のグリッドを選択して塗る
また、塗りたいタイルを回転させる手段は、マシン/バージョンによって微妙に異なるっぽい。正式リリース時のドキュメント化に期待。
TileAssetを選択して塗る際に “[“ で左回転 “]” で右回転できた (Unity2017.2.05b / mac) #unity道場 pic.twitter.com/t5rgKpL28k
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月5日
上記のフローにも記載したが、TileMapオブジェクトを複数用い、Order in Layerを変更することで、レイヤーを扱うことも出来る。
TileMapの上に何かしらのオブジェクトを配置したい場合は同一のTileMap上で処理するのではなく、TileMapをもう1つ生成し、Order in Layerを上げて上位に設置すると良い #Unity道場 pic.twitter.com/e73Ip2VwGC
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月5日
TileMap上にアイテムなどのオブジェクトを設置する際には、Grid以下に置くとGridに沿って移動させることが出来るのでオススメとのこと。
Memo: Grid以下に配置したオブジェクトは、Sceneビュー上ではグリッドに沿って移動/配置させることが出来る #Unity道場 pic.twitter.com/U0Jve4ajXN
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月6日
TileAssetと当たり判定について
TilePaletteにTextureを登録すると生成されるTileAssetをProjectで選択すると色や衝突判定を設定可。ColliderTypeは None(衝突しない) / Grid(マス目に衝突判定) / Sprite(Spriteの設定に準拠) #Unity道場 pic.twitter.com/c4x7HwvtSp
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月6日
Memo: TileAssetのColliderTypeをSpriteにしたときの当たり判定の領域は、SpriteEditor上で変更することができる #Unity道場 pic.twitter.com/M5JoCoGVTZ
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月6日
SpriteMaskと組み合わせると楽しい
SpriteMaskに関してはテラシュールブログ上の記事を参考に。 uGUIのMask機能がMaskコンポーネントを持つGameObjectの子要素に対してMaskが適応されるのに対し、こっちはSpriteRendererにおいてMaskの影響を受けるか/受けないかを設定する感じになった。 これをTileMapと組み合わせて、以下のようなものが作れた。
たーのしー! #Unity道場 pic.twitter.com/q6IjhfAEMj
— 青木とと(ˊᗜˋ*) (@lycoris102) 2017年8月5日
ProgrammableTile / CustomBrush
タイル描画時の挙動を改造することが出来る。今回は用意されたサンプルプロジェクトに付随された、AutoTileを使用した。これは、配置されたタイルの左右/上下のつながりの関係に応じて、どのタイルを利用するかを決めるというもの。 また ProgrammableTile を使えば、ランダムにタイルを配置することも、SpriteAnimationを適応することも可能。 また、CustomBrushを用意することで、TileMapの塗り方にパターンを持たせることが出来る (ランダムに配置したり、直線上に配置したり)。
以下がUnity公式が発表しているProgrammableTileのサンプルおよびサンプルプロジェクト。
今回の会について
上記の @RyotaMurohoshi さんの記事でも触れられている通り、1度説明後に講師の方を真似して一緒に作業するフロー/質問しやすい環境で、とても理解が進む会でした (MakerFaire/デザフェスと日程が被ったこともあり、あまり人数は多くなかった感じでしたが、ワークショップ形式であることを考えたらちょうど良い人数だったかも)
タイルマップ使って何か作ってみたいところではあるのですが、タイルマップの弱点は素材が整わないと何も出来ないというところ… 何かフリーの素材漁ってみようと思います。
参加者のみなさん、講師の椿さん、ユニティスタッフのみなさん、ありがとうございましたー! (あと個人的にですが、椿さんに1週間ゲームジャムの実況ありがとうございました!ってお伝えすることができて良かった….)