アニメーションの指示を出すのはプレイヤーか?武器か?
今回は3段攻撃と称して剣を振るアニメーションを3段分作りました。
アニメーションの指示は大体プレイヤー側に入れるものだと思いますが、
私のゲームでは武器アイテムを拾いアイテムに応じた攻撃ができるようにしたいのです。
そうなると、プレイヤー側に武器を管理するソースが必要になります。
しかし、これからどんな武器を追加していくかわからない状況です。
また、武器にエフェクトを付けたいいのですが攻撃ごとに異なるものを入れたいと思います。
そこで、プレイヤー側でボタン入力を受け取り武器側でアニメーションとエフェクトの管理をさせるようにしました。
プレイヤーのスクリプトと武器のスクリプトの関係を図にしました。
これらの関係から双方のスクリプトを作りました。
武器側のスクリプト : Sword.cs
プレイヤーのスクリプト(一部) : Player.cs
スクリプトについてポイントを絞って解説します。
武器側のスクリプト : Sword.cs
- 攻撃アニメーション受付の待機時間を WaitTime変数を使い管理をします
- 攻撃アニメーションは attackLevel変数によって選ばれます
- 新しく出すエフェクトは Instantiate関数を使ってインスタンスを作成します
- エフェクトの中心座標はあらかじめプレイヤーのオフセットを調べて記述します
プレイヤーのスクリプト(一部) : Player.cs
- 攻撃キー入力を isRunで監視します
- Sowrd.csで読み取るための attackFlag を管理します
- AttackEnd() 関数を用いて攻撃アニメーションの終わりを監視します
ここまでで攻撃アニメーションを出し、エフェクトを表示させることができました。
次は攻撃判定を付けたいと思いますが、それは別の記事にしたいと思います。
今回も最後まで閲覧していただきありがとうございました。
アニメーターの設定
続いてアニメーターの設定です。
各アニメーションの遷移は次の図のようになっています。
各状態遷移(矢印)の設定は・・・
- AnyState → Slash1 : 終了時間”なし”、遷移間隔・遷移オフセット”0”
Condetions:IsAttack → true - Slash1 → Slash2 : 終了時間”なし”、遷移間隔・遷移オフセット”0”、中断要因"Next State"
Condetions:IsAttack → true - Slash2 → Slash3 : 終了時間”なし”、遷移間隔・遷移オフセット”0”、中断要因"Next State"
- Slash1 → Idle : 終了時間”なし”、遷移間隔・遷移オフセット”0”、中断要因"なし"
Condetions:(設定なし) - Slash2 → Idle : 終了時間”なし”、遷移間隔・遷移オフセット”0”、中断要因"なし"
Condetions:(設定なし) - Slash3 → Idle : 終了時間”なし”、遷移間隔・遷移オフセット”0”、中断要因"なし"
Condetions:(設定なし)
図:Slash1 → Slash2の設定
スクリプトと設定は以上となります。
再生すると次のアニメーション画像のようになりました。
あとがき
攻撃アニメーションは難産でした。
最初はプレイヤー側にアニメーションの指示を入れていましたし、遷移の設定も参考にさせていただいたサイトを見なければ解りませんでした。
最後は自分の形に納まったと思います。
今回はあくまで私のゲームの場合なので、ご自分のゲームに合わせて変えていけたらこの記事を書いて良かったと思えます。
最後まで閲覧していただきありがとうございました。
動画からアニメーションGIFを作れるサイトがあって驚きました。
参考文献
「毎日Unity」の技術ブログ 再生中のアニメーションの名前を取得する方法 (@UnityAddiction氏)
https://edunity.hatenablog.com/entry/20210607/1623056387
Unity で良い感じにアニメーションをキャンセルする( VRChat でのギミック作成のために) (水無月せきな氏)
https://qiita.com/MinadukiSekina/items/63776abb11f1c08fb9f5
動画をアニメーションGIFに変換できるサイト
https://ezgif.com/video-to-gif
大変参考になりました。有難うございます!