読者です 読者をやめる 読者になる 読者になる

kikki's tech note

技術ブログです。UnityやSpine、MS製品など技術色々について解説しています。

Unity×Spineの当たり判定の付け方 (1/3)

C# Unity Spine

本章では、Spineで出力された2Dアニメーションに対して、Unityで当たり判定を付ける方法について共有します。


Unityで当たり判定を有効化するまでの作業が長いので、全部で3回に分けて解説します。

当たり判定の付け方

以下の様な方法で、Spineから出力された2Dアニメーション(以降、素材とする)に対して、当たり判定をつけることができます。

  • プログラムで制御
  • Spineライブラリの拡張
  • BoundingBoxの利用

プログラムで制御

当たり判定が必要な「bone」の位置座標とアニメーションの再生時間から、必要なタイミングでcolliderを発生させるプログラムを直接記述し、当たり判定を出現させる方法です。
この方法では、複数ある素材に対して、アニメーション別に当たり判定のロジックを追加する必要があり、エンジニアの負荷がとても高くなります。
また素材の仕様変更が発生すると作業が巻き戻るため、大規模開発には不向きです。
本方法は、小規模開発向けです。

Spineライブラリの拡張

JSONデータを直接読み取り当たり判定を判断する方法です。
この方法の特徴として、Spineでの素材作成で約束事が多い傾向があります。
例えば、位置固定された特定の目印を「root」直下に配置し、jsonデータと特定の目印を元にアニメーションにあった当たり判定を判断するライブラリを作成するケースがあります。
この方法では、SpineでExportされるデータの仕様、また公式のSpineライブラリの仕様に変更があると利用できなくなるという可能性があります。
Spineとライブラリのバージョンを決めて利用し続ける場合は問題とならず、最終的な開発工数が下がるため、利用されることが多い手法でした。
最初に用意すべきライブラリに準備がかかるため、小規模開発には不向きです。
本方法は、大規模開発向けです。

BoundingBoxの利用

Spineのデータに当たり判定を矩形で予め設定する方法です。
この方法では、Unity側でも判定の矩形をアニメーション別に判断できるため、デザイナ・エンジニアの工数がとても小さいです。
小規模開発はもちろん、大規模開発にも向いているため、オススメ致します。
本ブログではこちらの手法について紹介していきます。


それでは解説に入っていきます。

Spine

素材の構成の注意点

素材を作成する際に、Spineでの設計が重要となってきます。
当たり判定が必要な「slot」を「bone」上に配置する手法であるため、過不足なく組む工夫が必要となります。
Maya等の扱いに慣れている方は、比較的問題となることはありません。

BoundingBoxの設定

まず、当たり判定を付けたい対象のボーンに「Slot」を追加します。
f:id:kikkisnrdec:20150611115043p:plain

次に、追加したSlotの中に、「BoundingBox」を追加します。
f:id:kikkisnrdec:20150611115109p:plain

当たり判定となる名称を決め、形・大きさを作ります。
※当たり判定の名称はUnity側で利用します。
f:id:kikkisnrdec:20150611115221p:plain

そして、当たり判定のタイミングをタイムラインの中で決定します。
f:id:kikkisnrdec:20150611115353p:plain

Unity

アニメーションの確認

UnityにSpineデータをインポートし、アニメーションを再生すると、当たり判定の確認ができます。
f:id:kikkisnrdec:20150611115527p:plain

本記事ではここまでとします。

なお本記事以降の「Unity×Spineの当たり判定の付け方」について、Blog: Unity collidersの記事を参考としています。
もしご興味がある方はご覧になって下さい。

※無断転載禁止 Copyright (C) 2015 kikkisnrdec All Rights Reserved.