本章では、前々章、前章に引き続き、Spineで作られた素材の当たり判定の付け方について解説していきます。kikki.hatenablog.com
http://kikki.hatenablog.com/entry/2015/06/12/090000kikki.hatenablog.com
Spine
作用キャラにスクリプトを追加
作用キャラに、キーボード入力時のアニメーションを追加します。
using UnityEngine; using System.Collections; public class FootSoldier : MonoBehaviour { [SpineAnimation] public string idleAnim; [SpineAnimation] public string[] attackAnims; SkeletonAnimation skelAnim; void Start() { skelAnim = GetComponent<SkeletonAnimation>(); skelAnim.state.SetAnimation(0, idleAnim, true); } void Update() { if (Input.GetButtonDown("Fire1")) { var attackAnim = attackAnims[Random.Range(0, attackAnims.Length)]; skelAnim.state.SetAnimation(0, attackAnim, false); skelAnim.state.AddAnimation(0, idleAnim, true, .5f); } } }
スクリプトに、アイドル(待機)時のアニメーションを指定します。
また攻撃時のアニメーションを指定します。
作用キャラの当たり判定オブジェクトにスクリプトを追加
当たり判定となるオブジェクトに対して、コライダー衝突時の処理を追加します。
using UnityEngine; using System.Collections; public class Sword : MonoBehaviour { BoundingBoxFollower follower; void Start() { follower = GetComponent<BoundingBoxFollower>(); } void OnTriggerEnter2D(Collider2D collider) { collider.SendMessage("Hit", follower.CurrentAttachmentName, SendMessageOptions.DontRequireReceiver); } }
反作用キャラにスクリプトを追加
反作用キャラに、当たり時のアニメーションを追加します。
using UnityEngine; using System.Collections; public class Woodman : MonoBehaviour { [SpineAnimation] public string hitAnim; SkeletonAnimation skelAnim; void Start() { skelAnim = GetComponent<SkeletonAnimation>(); } void Hit(string attachmentName) { if (attachmentName == "Stab") { Debug.Log("Stabbed"); } else if (attachmentName == "Slice") { Debug.Log("Sliced"); } skelAnim.state.SetAnimation(0, hitAnim, false); } }
スクリプトに、当たり時のアニメーションを指定します。
結果
実行すると、以下の通り、作用キャラの攻撃が反作用キャラに当たった際に、デバッグログが出力されます。
SpineではMayaと違い、リグの構成がUnity上で確認することが困難です。
そのため当たり判定については、従来の方法では実装が大変でした。
しかし、BoundingBoxを用いることで簡単に実装できます。
皆さんも是非ご利用下さい!
これにて説明終了です。
総括
Spineを用いることで、リッチなアニメーションをゲーム内に導入できます。
ただ当たり判定の調節やアニメーションの連携といった、少し複雑なことを実現しようとすると、一回りも二回りも工夫が必要です。
例えば、特定のアニメーションで一部のパーツのスキンを差し替えるといった場合、公式のライブラリを拡張して実装する他ありません。
しかし、公式でも機能充実を図るため、日々アップデートしています。
今回共有した内容は、公式側で4月に対応されて間もない技術です。
公式でも随時、機能が追加されているので、逐次チェックしてもいいかもしれませんね。
以上、閲覧ありがとうございました。