Unityに関連する記事です

 2回の手順に分けて連続攻撃機能を実装します。

手順17 ー連続攻撃機能の実装 

<新しく学習する内容>
・サブステートマシン(SubStateMachine0



設計


 今回は2回の手順に分けて、連続攻撃の機能を実装していきます。

 Animator ビューを利用して攻撃用のステートを複数つなげることで、連続攻撃用のステートを作成することができます。
他のステートの切り替えと同じで、トランジションやコンディションの設定を行った上で、スクリプトから制御する必要があります。

 この手順では攻撃用のステートを繋げていき、各トランジションなどの設定を行います。
ただし、そのままステートを追加していくと、Animator ビューのトランジションがどんどんと増えて、こんがらがってしまうため、
Unity の用意しているサブステートマシンの機能を利用し、効率よくまとめる手法で実装します。

 次の手順では、連続攻撃用のスクリプトなどを用意し、ボタンをタイミングよく押していくことで
攻撃が多段的につながって連続攻撃になるように実装します。


参考サイト
Unity 公式マニュアル
サブステートマシン

かめくめ 様
アニメーターコントローラのサブステートマシンを使ってみる

テラシュールブログ 様
【Unity】Animatorのスパゲティなステートマシンを整理する




 以下がサブステートマシンを利用して連続攻撃用のステートを作成した際の完成図です。


完成図



 見慣れない六角形のステートがありますが、こちらがサブステートマシンです。
それでは早速作成していきます。


サブステートマシンである Attacks ステートの作成と設定を行う


 Animator ビューで右クリックをしてメニューを表示し、Create Sub-State Machine を選択します。
六角形のステートが作成されますので、名前を Attacks と複数形の名称で設定してください。

 こちらがサブステートマシンです。
このステートは入れ子構造になっており、このステートの内部に、複数のステートを設置してつなげていくことができます。
今回の場合、Attacks サブステートマシンの内部に、攻撃用のステートを複数設置してトランジションの設定を行っていきます。

 サブステートマシンのような構造にすることで、Animator ビュー上では、1つのステートとして扱われるようになります。
仮に、複数の攻撃用のステートがあった場合、それらすべてに複数のトランジションを設定する必要性が生じるため、
Animator ビュー内に無数のトランジションが存在するため、理解が難しい状態になります。

 サブステートマシンを利用することで、トランジションの矢印が大量に作成されてしまうような煩雑な状態になることを防ぐことも出来ます。



 Attacks サブステートマシンをダブルクリックすることで Animator ビューがサブステートマシンの設定画面(サブステートマシンの内部情報)に切り替わります
戻る場合には、Animator ビュー左上の BaseLayer を押すと、通常の Animator ビューに戻ります。

 このサブステートマシンの内部に、連続攻撃用のステートを配置します。

 攻撃用のステートとして利用したいアニメーションクリップを3つ、こちらにドラッグアンドドロップしてください。
ステートの名称は Attack0、Attack1、Attack2 としてください。
この名称をスクリプトでも利用するため、綴りの間違いや、不要なスペースなどは入れないように気を付けてください。

 そして、最初の攻撃に利用したいステートには、Entry からトランジションをつなげます。
それ以外のステートには、Attack0 → Attack1、Attack1 → Attack2 と一方通行でトランジションをつなげます
これが連続攻撃としてつながっていくステートの順番になります。

 また、各攻撃用のステートからはすべて Exit にトランジションをつなげておきます。
こちらは、連続攻撃が途切れた場合に、いずれのタイミングで攻撃が終了しても攻撃アニメーションが終了するようにするためです。
そのため、すべての攻撃ステートにトランジションを用意します。


Attacks サブステートマシン(内部)の完成図



 なお、今回のように先にサブステートマシンを作成しておいて、その中にステートを配置する以外に、
すでに作成済のステートを、新しく作成したサブステートマシンに移動させることでも作成できます。

 どちらの方法であっても問題ありません。


トランジションの設定


 それでは各ステートごとのトランジションの設定を行います。

 下記の写真を参考に設定をおこなってください。



 始めに攻撃ステート同士の設定です。


Attack0 -> Attack1


 Has Exit Time のスイッチは入れたままにしておきます。
そうすることで、前の攻撃アニメーションがすべて終了してから、次の攻撃アニメーションにつながります。 

 Conditions にはトリガー型の Attack を設定します。



Attack1 -> Attack2


 こちらも Has Exit Time のスイッチは入れたままにしておきます。
そうすることで、前の攻撃アニメーションがすべて終了してから、次の攻撃アニメーションにつながります。 

 同じく Conditions にはトリガー型の Attack を設定します。



 続いて、各攻撃ステートから Exit ステートへのトランジションを設定します。

 Exit へ抜けるトランジションは、すべて Has Exit Time のスイッチは入れたままにしておきます。
チェックが外れているとアニメーションが正常に終了しなくなります。

 また Conditions への設定もすべて不要です。


Attack0 -> Exit




Attack1 -> Exit




Attack2 -> Exit



StateMachine ステートの追加


 初期状態の Animator ビューに戻り、サブステートマシンで作成した Attacks ステートへのトランジションを設定します。

 いままでの攻撃と同じように、待機状態と移動状態から遷移できるようにしますので、
Idle ステートと Locomotion ステートからトランジションを作成します。

 Idle ステートと Locomotion ステートからサブステートマシンで作成した Attacks ステートに対してトランジションをつなぐとメニューが開きますので、
StateMachine → Attacks に設定することで、Attacks ステート内の Entry ステートに自動的に遷移します。


メニューと設定



Attacks サブステートマシンに対しての Idle ステートと Locomotion ステートからのトランジション




 続いて、各ステートのトランジション設定します。

 どちらも Has Exit Time のスイッチは外しておきます。
また、Conditions には Attack を設定します。

 Transition Duration の値を小さくしておくことで迅速にアニメーションが切り替わります。

 これにより、Idle ステート、あるいは Locomotion ステートから Attacks サブステートマシンに遷移し、
最初に設定されている Attack0 ステートのアニメーションが再生されます。


Idle ステート → Attacks サブステートマシン



Locomotion ステート → Attacks サブステートマシン



利用しなくなった Attack ステートへの遷移を停止させる設定を行う


 いまの設定のままですと、Attack ステートと Attacks ステートの両方にトランジションが設定されているため
遷移時に処理が競合し、正常な遷移が行えなくなります

 いままで利用していた Attack ステートへのトランジションは、削除してしまうか、
あるいは各トランジションの設定を Mute にすることで、遷移を停止させることが出来ます。

 Mute 状態のトランジションの矢印は赤色になります。

 ここでは3つのトランジションすべて Mute 設定しておきます。












Mute 設定前



Mute 設定後



 以上で完成です。



 完成した際の Animator ビューです。


完成図



 以上でこの手順は終了です。

 => 次は 手順18 −連続攻撃機能の実装◆ です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます