UnityとSpineでゲームを作ってる時に悩んだりスゲー!ってなったこと
ランゲームに登場させるキャラをアニメーションさせたくて
Spineを購入したので使ってみました
チュートリアル動画がチュートリアルじゃない
UnityでアニメーションをScriptから制御するとき
using Spine;
using Spine.Unity;
このNameSpaceを記述しないと制御に必要なクラスが使えなかったです。
何年か前のチュートリアル動画には書いてなかったのに・・・
悩んだ末Mecanim版を使ってUnityのAnimatorで制御してました。
超絶簡単にアニメーションを制御できる
Spineで"Run"というアニメーションを作ったとして
using UnityEngine; using System.Collections; using Spine; using Spine.Untiy; public class SpineAnim : MonoBehaviour { SkeletonAnimation skeletonAnim; void Start() { skeleAnim = GetComponent<SkeletonAnimation>(); skeleAnim.state.SetAnimation(0, "Run", true); } }
たったこれだけでSpineで作ったアニメーションが再生される!
SetAnimationの中身もTrackIndex, Spineで作ったAnimationの名前, ループするかどうか
を書けばいいだけなので分かりやすい!
走りアニメーションを再生中に攻撃アニメーションも再生したい場合
攻撃アニメーションは腕と手だけを動かした"Attack"というアニメーションを作ったとして
void Start() { skeletonAnim = GetComponent<SkeletonAnimation>(); skeletonAnim.state.SetAnimation(0, "Run", true); } void Update() { if(Input.GetMouseButtonDown(0)) { //TrackIndexを1にする skeletonAnim.state.SetAnimation(1, "Attack", false); //アニメーション終了時に実行したいイベントハンドラを登録 skeletonAnim.AnimationState.Complete += AttackComplete; } } //"Attack"アニメーション終了後の処理 void AttackComplete(TrackIndex trackIndex) { //Runアニメーションに戻してイベントハンドラを削除 skeletonAnim.state.SetAnimation(0, "Run", true); skeletonAnim.AnimationState.Complete -= AttackComplete; }
これで"Run"アニメーションと"Attack"アニメーションがいい感じにブレンドされて再生される
正直
skeletonAnim.AnimationState.Complete += AttackComplete;
これがなんなのか理解してないけど動いてるからいいやの精神で。
Unity + Spine を使って面白い表現が色々できそうですね!