(この記事の使用環境: Unity5.4.2f2 Personal、Windows10)
前回からの続き。
今回は素手(キック)と武器の攻撃モーションを付けてみました。武器攻撃のほうには連続攻撃モーションも付けています。
こんな感じ。
前回からの続き。
今回は素手(キック)と武器の攻撃モーションを付けてみました。武器攻撃のほうには連続攻撃モーションも付けています。
こんな感じ。
— ねぎたま㌠ (@onionslice2) 2016年12月30日
前回武器の出し入れモーションを付けたので、その状態に応じて攻撃モーションを変えています。
Animatorの遷移図はこんな感じ。
武器装備状態と素手状態からそれぞれ攻撃モーションへの遷移を作っています。
武器攻撃モーションは連続攻撃モーションへの遷移も。
パラメータに"Attack"(Trigger)と、連続攻撃用に"ComboAttack"(Trigger)と"ComboChance"(Bool)を追加しています。
連続攻撃に関する設定、1撃目から2撃目への遷移設定はこんな感じ。
ComboChanceがtrueの間のみ連続攻撃が成立するようにしています。
ComboChanceのタイミング管理のため、1撃目のアニメーションのところに StateMachineBehaviour のスクリプト "ContinuousAttack" を作ってアタッチしています。
ContinuousAttack スクリプトはこんな感じ。
1撃目の攻撃モーションに入ってから1.5秒~2.5秒の間だけ、ComboChanceをtrueにして連続攻撃受付しています。
StateMachineBehaviour は初めて触りましたが、こんな感じでシンプルに使う分には難しくなさそうです。
最後に、プレイヤーを操作するスクリプトへの追記内容。これだけ。
今回は以上です。
Animatorの遷移図はこんな感じ。
武器装備状態と素手状態からそれぞれ攻撃モーションへの遷移を作っています。
武器攻撃モーションは連続攻撃モーションへの遷移も。
パラメータに"Attack"(Trigger)と、連続攻撃用に"ComboAttack"(Trigger)と"ComboChance"(Bool)を追加しています。
連続攻撃に関する設定、1撃目から2撃目への遷移設定はこんな感じ。
ComboChanceがtrueの間のみ連続攻撃が成立するようにしています。
ComboChanceのタイミング管理のため、1撃目のアニメーションのところに StateMachineBehaviour のスクリプト "ContinuousAttack" を作ってアタッチしています。
ContinuousAttack スクリプトはこんな感じ。
1撃目の攻撃モーションに入ってから1.5秒~2.5秒の間だけ、ComboChanceをtrueにして連続攻撃受付しています。
StateMachineBehaviour は初めて触りましたが、こんな感じでシンプルに使う分には難しくなさそうです。
using UnityEngine; using System.Collections; public class ContinuousAttack : StateMachineBehaviour { float deltaTime; float waitTime = 1.5f; // 連続攻撃の受付開始時間(秒) float overTime = 2.5f; // 連続攻撃の受付終了時間(秒) // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter (Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { deltaTime = 0f; } // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks override public void OnStateUpdate (Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { deltaTime += Time.deltaTime; if (deltaTime > waitTime && animator.GetBool ("ComboChance") == false) // 連続攻撃の受付開始 { animator.SetBool ("ComboChance", true); } if (deltaTime > overTime && animator.GetBool ("ComboChance") == true) // 連続攻撃の受付終了 { animator.SetBool ("ComboChance", false); } } // OnStateExit is called when a transition ends and the state machine finishes evaluating this state override public void OnStateExit (Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { animator.SetBool ("ComboChance", false); // 連続攻撃の受付終了 } // OnStateMove is called right after Animator.OnAnimatorMove(). Code that processes and affects root motion should be implemented here //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} // OnStateIK is called right after Animator.OnAnimatorIK(). Code that sets up animation IK (inverse kinematics) should be implemented here. //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { // //} }
最後に、プレイヤーを操作するスクリプトへの追記内容。これだけ。
void FixedUpdate () { if (Input.GetMouseButtonDown(0)) { anim.SetTrigger ("Attack"); // 攻撃する if(anim.GetBool("ComboChance") == true) { anim.SetTrigger ("ComboAttack"); // 連続攻撃 } }
今回は以上です。
コメント