Once a day Furi

ゲームを基礎としてできた人間のブログ

UE5:GAS使用時のキャンセル行動備忘録

GASを使用して攻撃コンボを実装しているのだが、回避で攻撃をキャンセルした場合において攻撃アビリティの所有Tagを持ったままになることがあった。

 

念のため自分のGAS使用でのコンボについてはこちらの記事とほぼ同一のもの

lunanelis.hatenablog.com

 

基本においてはこちらと同一のパターンでのバグだと思われる。

forums.unrealengine.com

Abilityそのものをキャンセルしているのか、それともMontageの割り込みでキャンセル扱いとしているのかによりますが
後者である場合、Montageの割り込みで1段目は解決されますが、2段目の解決はなされない(Montageが実行されていないので割り込みが起こらない => EndAbilityまでいかない)ので、2段目のAbilityが実行されたまま( WaitGameplayEvent を待ち受けたまま) になりますね
なので、2段目のOwnedTagである Attack.X.2 を保持したままの状態になります

1段目は Attack.X という上位タグでBlock判定しているので実行できず、2段目は必要なタグ Attack.Ready.2 がない、かつ Attack.X.2 をブロックしているので実行できない、というデッドロックが発生していると思われます

Montageの再生が終了、中断された場合にEndAbility処理を行うようにしているため

  1. コンボ1段目と2段目の繋ぎの段階で回避でキャンセルを行う
  2. コンボ1段目アビリティのモンタージュは滞りなく中断、EndAbility処理実行
  3. コンボ2段目はMontageそれ自体が始まっていないためEndAbilityが呼ばれず、WaitGameplayEvent処理だけが実行され続けたままの状態に
  4. 所有タグ、ブロックタグの関係上、デッドロック状態になってしまう

 

こちらの質問者さんは回避をGAS不使用からGAS使用に切り替えてCancelAbilityで攻撃アビリティを指定することで対処できたようだが、自分のゲームにおいては攻撃のどのタイミングでも回避に移行できるように実装したいと思っていて、そのせいかCancelAbilityに指定しても上手くいかんかった。

(どこからでもというわけじゃなければ、AnimNotifyとかで回避可能タイミングをつけるなりすればいけそうか?)

 

ということで他の記事を参考にこんな感じにしてみた

コンボアビリティのベースBP全体

 

アビリティ実行時にWaitGameplayEventで攻撃アビリティキャンセル用タグが付与されるのを待ち構える。付与された場合はEndAbility。AsyncTaskに関しては全然わかってない所があるんだが、ちゃんとタスクを終了してあげるために変数化しておく。

 

EndAbility時にAsyncTaskが有効な場合はEndTaskで終了させてあげる。

ここまでコンボ用ベースクラス

 

 

こちらが回避アビリティ。実行時に攻撃アビリティキャンセル用タグを送信してキャンセルをするぞと通知してあげる。

 

これ以降、攻撃アビリティの所有タグ持ちっぱなしはなくなったのでたぶん対応完了なはず...。またなんかあったら追記

 

以下、参考にした記事

qiita.com

 

『野狗子: Slitterhead』の開発事例【UNREAL FEST 2024 TOKYO】 | ドクセル

www.docswell.com

 

野狗子の記事はプロが使用するAbilityタグの区分けなどめちゃくちゃ参考になったのでオススメ

UE5:IKリターゲッタを作るのに苦労した

買ったモデルのアセットがUE4マネキンスケルトンとちょっと違うとか、ただのリターゲットじゃ上手く機能しないとかがあったので頑張って作った際の備忘録

 

Idleアニメでさえモデルの腹の部分がへこんでいるように不自然に見えてしまう現象

デフォルトのAポーズ

 

Idleアニメーション、なんか腹がへこんでませんかね...

アニメーションのせいでもあると思うので仕方がない面もある

ポーズエディット画面にして(左上赤丸クリック)、pelvisをZ軸に30度回転,spine_02を-60度回転させることで無理矢理感はあるがお腹を張るようにモデルのボーンを変更(右の赤丸)

それなりにマシになったかな?
UE4マネキンのほうもちょっと食い込んでるのである程度は仕方がないか

 

腕が離れすぎて手と手が合わさらない

マネキンと比べて、特に右腕が離れすぎている。モデルのスケルトン自体がマネキンと比べて肩幅などが違うためどうしても起こってしまう...と思っている(素人)

これはRightArmチェーンのIK位置のオフセットをX軸に23度動かすことでそれっぽくなったので妥協。振り下ろすときとかに少しばかりズレたりはする。

 

こんな感じでただのリターゲットしただけで上手くいかないパターンのときはオフセットとかを変更して微調整を重ねるしかない。

特定のアニメに合わせただけなので別のアニメでは不都合が生じたりするが、それはまたそれでIKリターゲットを調整すれば上手くいくとおもわれ

【PSO2】 Etの武器雑感

使い分け指南できるほど触ってないので雑感として

・クラスとしての強み

ダメージバランサーによるダメージ70%軽減が一番大きいのは言わずもがな。

後継クラスとして基本的な要素(接敵、火力、攻撃範囲)などが整っていて、苦手とするクエストがない。

特にウォンドは雑魚殲滅において飛びぬけて強く、フォーカス版は単体DPSが出るなど総合力が高い。

カウンター要素を絡めれば良いDPSが出るのに加え、HrやPhと比べてリスクも小さいのはGOOD。わりと初心者向けクラスなのではと思う。

・Etの中核! ウォンド

ルミナスフレアぶっぱで大体安定します(真顔)。

雑魚殲滅が多いPSO2において攻撃範囲がべらぼうに長いのはめちゃくちゃに強いです。まぁ範囲PAで複数巻き込んで攻撃したほうが強いなんてのは常識?っぽいところあるので割愛。

ただ動作フレームが長いのに加えてスパアマもないので、間合いを取るなり位置取りを考えてしっかり出し切らないとダメージ出ないようになっているため状況に合わせて他PAも使うのが肝要になっているのは高評価です。

プリズムは出だしにGPがついていて乱戦に強くスタン持ち。

グリッターは無敵の浮き上がりで位置調整、謎の広範囲判定持ち、消費PP20で軽いなど面白いPA。浮き上がりはニュートラルのテレポートで高度調整する対処を。

フォーカス版は範囲が狭まるがDPSが出るようになるのでNプリズムで移動&高度の細かな調整をしつつ、Fルミナスを放つと敵の弱点を突きやすくよりDPSが出ていい感じになる。

・カウンターとるならこいつに。ダブルセイバー

カウンターバシバシ取れるような敵が来たならこいつの出番です。

ディフレクトカウンターのDPSはかなりのもの。追尾もしてくれるので素早く動く相手でも安定してくれるイケメン。ギアがたまったら積極的にエンハンスアタック。

ダメージ出しつつPP回収もしてくれるのでエネミーのダウン時にPP切らすことなく戦えちゃったりする。大体のボス戦で活躍してくれます。

ただし、エンハンスが上手く使えないとすーぐPP切れ起こしてガス欠状態になるので、そこだけ注意。思わぬダメージを食らいやすい乱戦状態に弱い。あとバーンとポイズンは天敵。

ダメージさえ食らわなければEtにおいてぶっちぎりのボスダメージを出せると思ってます。

・フルコネクトを...決めろ...デュアルブレード

正直な話、デュアルブレードはそんな出番ないかもなと。

あるにはあるんだけど、単体ボスでカウンター取れるならダブセで良いと思ってます。

複数ボス戦ではダブセに勝てるけれど、ウォンドでも良い。

DBのが良い敵ってのはカウンターはまず取れない、取りづらい敵、普段は弱点を出さないがダウン時に一定時間弱点露出する敵などです。

例として、リンガ、ゼッシュ、クォーツなど。カウンターの取りづらいやつはデサントとか、たけのこ召喚やめてください。

ギアを事前にためておいて、最後にぶっぱ出来るのは他にない利点。

あとはカウンターが取りづらくても、DPSが出るディストーションはEtでは珍しいスパアマ付きなので、これを振ってからパリィ連打で吹っ飛ばされる心配なくゴリ押しが出来ます。

ただそこまで攻撃範囲があるわけじゃなく、エネミーに移動されて外すとかよくあること。ライトウェーブはそこらへんカバーできるが、スパアマないのが残念。

ウォンド、ダブセに比べると、継続火力よりもギア貯めたあとの一瞬の火力に依っているのがDBという印象。

・まとめ

基本的にウォンドで雑魚殲滅なりをこなします。ボスでカウンターが取れるようならダブセ。安定しないならDB。そんな感じのが基本的に使い分けになってるかと。

 

ただ書いててもうちょっとDB使ってもいいかもなと思った。

リンガはDB使うのだけど、ゼッシュはダブセでやってしまうので。DBはパリィ取れないとPP回収がキツイのが...。PP回収手段が受動的なのがちょっと。

ダブセは能動的に回収できるから強いんだよなー。

 

 

 

 

【PSO2】Phの武器使い分け指南

ロッド使っとけ

 

 

 

実際そんな感じなんだけど、使い分け指南やります。

 

使い分け概要

Phのロッドが基本的に万能なので、ロッドを軸にして運用します。

その中でロッドよりも別武器のが良いという場面では適宜別武器を使うという形です。

じゃあ武器にはどういう強みがあって、どういった場面で使い分けるのか。

万能なロッドさん

ロッドが万能な所以は

  • 豊富なテクニックを使った柔軟な対応力(状態異常付与、座標テクなど)
  • ステルステックチャージによる無敵状態での攻撃
  • PAによる打撃属性攻撃
  • 超範囲マーカー起爆攻撃による複数戦の強み

要するにどんな状況、どんな場所でも使える対応力の高さが万能なんだってことです。

万能すぎて書くことがない。だけど、別武器のが良い時もあるから使い分けます。

 

射撃できちゃうライフル

ライフルがロッドに勝てる点として

  • 射撃属性攻撃だからHSが出来る
  • ギアがめちゃくちゃたまる地雷のSシュトラーフェ
  • 前方広範囲攻撃のNクーゲル&即着弾HS向きのSクーゲル

やっぱり射撃なのはデカい。

ロッドは法撃と打撃は出来るので、それ以外をカバーできる。ギアためなら、雑魚が固まってるところに地雷セットがめちゃくちゃ溜まって気持ちよくなれます。

なげにスタンあるのも優秀で、ミノタウルスのやつとか、チョコ緊のエルアーダ3体とかをゾンディでまとめてからスタンさせてあげましょう。

特別突破訓練EP5とか狂宴のエルダーエリアとか最高なんで絶対設置しましょう。

Nクーゲルの前方範囲はめっちゃくちゃ広く、ロッドの前方範囲攻撃がNルーフぐらいなので、その点では勝ってるかなと。その場合でも大体ギグラとかでなんとかなったりはするんで、そこまで強みってわけではないけど、タメ張れるレベルの強さはあると。

 

愛と怒りと悲しみのカタナ

「お前...ロッドが打撃もできるせいで完全に食われてるじゃんか...要らなくない?」

と思われてるせいで武器パレットから外されがちな悲しい子

そんなカタナでも出番はありまぁす!

  • カウンターの取りやすさNo.1
  • タイマンならロッドと同じくらいにはなれる!

これしか見つからなかったよ...ただカウンターの取りやすさNo.1なのはそれなりの強みです。

まずロッドはステルステックチャージのせいでカウンターの機会損失があり得る。カウンターショット強いのに出せませんでしたのはちょっと痛い所。

ライフルはそういうことはないけど、遠くで戦ったりとかSクーゲルとかしてる場合カウンターは中々取れないです。逆に遠距離で戦わざるを得なかったり、相手が遠距離攻撃してくる場合はライフルにはなります。

でも、もう一つライフルには問題点があって、ステップ攻撃が一番遅いのが結構ツライ。

ステップ攻撃の出の早さは、カタナ>ロッド>ライフルの順です。

ライフルだけはステップ攻撃が遠距離なので、敵が自分を通り越すような攻撃でカウンターを取っても、せっかくそれなりにDPSが高いステップ攻撃が当たらないという点をカバーできます。しかし、出が遅いので、連続カウンターをする場合なんかはカタナとロッドはできてもライフルはできないorかなりシビアという状況が多々あります。(オメマスの連続斬り、溶岩カウンター、デサントの連続地面柱召喚など)

ロッドとライフルがカウンターが取れない状況が発生することがあるという点で、カタナはそういう状況が発生することがないです。Nローズとか使ってると、硬直で取れなかったりとかするけども!そこはPSでカバーできる範囲だと思ってます。

まとめ

大体の状況ではロッド使ってOK。射撃攻撃がしたかったり、雑魚大量に固まってるなら大量にギアためできるライフル。タイマン対ボス戦ならカタナでカウンターとりまくれ。

 

以上、使い分け指南免許皆伝

 

 

 

 

 

俺はアクションゲームに「闘い」を求めている

「闘い」とは、何か! それは「攻防の激しい応酬が繰り広げられる戦闘」である!

だが、これを再現したゲームは余りにもこの世にない!なぜならば、敵がプレイヤーの攻撃を防御するというシステムを実装しているゲーム自体少ないから!

 

 まずアクションゲームのバトルシステムの大まかな種類として3つ挙げると、

  1. 無双系”、多くの敵をなぎはらうことに爽快感を見出す
  2. コンボ系”、敵に華麗な連撃を叩き込むスタイリッシュなアクションをウリにする
  3. ダークソウル系”、敵の動きを覚えて立ち回りや戦い方を考えなければ勝てないシビアな戦闘を特徴とする

最近のアクションゲームは大体この3種類で分けられると考えている。

例として、

みたいな (かなり大雑把な分け方であるので、これに関しては考えたいと思っている)

 

 この内、無双系とコンボ系はプレイヤーの攻撃重視の設計思想で、敵が防御することはあるが、核となる要素にはなりえない。

 ダークソウル系はここに一筋に光明を差してくれるが、敵が防御する概念には乏しいと言わざるを得ない。敵の動きや、それに対応した立ち回りが重要なゲームと言っても、それは敵の攻撃に対して、回避や防御でいなすことでプレイヤーの攻撃を当てていて倒すのが基本的な流れである。本家本元のDARK SOULシリーズでも、防御しない敵のほうが多いだろう。

 多くのゲームにおいて、敵というものは攻撃すれど防御せずなのだ。でも、それって闘っていると本当に言えるのか?敵に知性を感じるか?普通、攻撃を食らったとしたら、「やべぇ、間合いを取ろう」、「防御を固めて相手の出方をうかがう」とか考えるものだ。この思考をしないで、ただ攻撃を繰り返すぐらいの敵がほとんどなのだ。

 ここだ。この点をゲームは越えてほしい。というか、自分が越えたい。プレイヤーも敵も攻撃と防御を行うことで生まれる、闘いの真骨頂を見たい。攻撃と防御がハイテンポで入れ替わり立ち替わり繰り返された先に見られる境地を感じたい。そういう思いが燻って仕方がない。

 

俺に「闘い」をくれ!

 

 

 

ここまで書いてきて思うけど、やっぱ格闘ゲームやるべきなのかね、これは? うーむ

 

 

 

Unityわからん日記 その1「ボスAIってどうすりゃいいのよ」

 とりあえず気軽に始めてみるの巻。Unityでよくわからんなぁって思ったことをそのまま書いていく大長編シリーズになるはずです。やっていこう。

 

 2か月前から初めてのゲームを作っている。ゲーム内容はボスと一対一のタイマン勝負を行うアクションゲームである。ガードブレイク要素を入れて、相手の態勢を崩したところに必殺技を叩き込むまでの駆け引きがある戦いを面白さの軸にしたゲームだ!でも、SEKIROっぽくない・・・?とちょっと怖気づいている。それでも作るけどね!

 このゲーム、基本的な移動操作とか攻撃の実装などは、Unityと偉大なる先人の知識によってそれほど苦労することもなく実装できている。だが、ここで問題になったのが敵のボスAIなのだ。このゲーム、ボスが馬鹿だと致命的に面白くなくなるのではと気づいてしまったのだ。

 とりあえずAIについてググってみる。

thinkit.co.jp

www.slideshare.net

どちらも三宅陽一郎さんがゲームAIの設計思想について丁寧に解説してくださっている。というか、インターネット上のゲームAIの記事に行くと、だいたい三宅陽一郎さんがいます。

edom18.hateblo.jp

こちらのブログではビヘイビアーツリーの実装について書いてくださっています。コードも載っているのはかなり珍しい。とてもありがたい記事です。

 

 色んな記事を参考にした結果、自分はステートベースAIを実装することにしました。プレイヤーのアクションに合わせて、ボスも一つ一つのアクションを臨機応変に変えていく動きを実装するならこれかなと。ビヘイビアー型も良いけど...ビヘイビアーツリーのアセットは...お金がね!ちょっとね!いつか買いたいなぁ。Playmakerでもいいかもしれない。

 そして、これが記事の本題!ステートベースAIならばスクリプトを書かなきゃならんが、どう実装したらいいのか分からんって話なわけですよ!switch文とかで分岐させるか、if文大量に書くのか、そもそもどう設計するのが良いのかなど、実際のところ分からないところが多い。お手本だ...お手本が見たいよ...。ネット上には全く載ってないんですよね。自分でも試しにやってみたけれども、うまいこと動かないんですよね。そもそものC#の知識不足やプログラミング経験の無さが如実に出ている。

ということで、こいつを買うことに

 

実例で学ぶゲームAIプログラミング

実例で学ぶゲームAIプログラミング

 

 これ読んでダメだったら、もう自力で頑張るしかないかなー。いい感じになったらまた記事書きます。ゲームAIの話ってあんまネット上に載ってないからね。なんかしら手助けになれれば良いかなぁ。

 

社会人は働いていて偉いなぁ。僕にはとてもできない。

 いやぁ、よく皆働けられるなぁと純粋に思ってしまう。まるで学期末のテストみたいにさ。

 ほとんどの人は勉強が好きじゃないのにも関わらず、テストとなると何故かみんな勉強していて本当に驚いた。好きじゃないとか、面倒くさいとか言ってたじゃないか君たち!

 なのに、勉強しているとは一体どういう了見なのか。自分なんて小学生~高校生までの時間でテスト勉強した時間を総計しても1~2時間ぐらいだ。なんで勉強するかなぁ。

 それと似たようなもので、どんな理由であろうと働いている人間はすごいと思うのだ。働きたいという意思を持っている人間は、自分には出来ないことをしようとしているという点ですごいと思う。

 働くこと自体に全く価値を感じない人間なので、なんでそんなこと出来るんですかと労働者全員に問いたいです。

 お金をもらわなきゃ生きていけないしという前提があって働いている人は多いと思うけど、お金を得るためには仕事しなきゃいけなくて、その仕事でお金を得るためには人様の喜ばせたりだとか、役に立ったりしなきゃいけないわけだ。

 なんで他人に評価されなくちゃいけないのか。俺は他人を微塵も喜ばせようとは思わないし、役に立ってなくても構わないわけなんだがと思う。生きていくためには評価されなくてはいけないのだ!そこに自分にとって価値が全くなくても!

 はっきり言って嫌すぎる、やりたくないです。

 こういうのに対する反論としてよくあるのが、「君だって誰かの仕事による恩恵にあずかっているではないか」というものだ。じゃあもうどっかの超法規的な土地を作って、そこに俺を飛ばしてくれ、勝手に生きて野垂れ死ぬからさ。

 まぁ、そんなことされても自分はすぐ死ぬのが目に見えていて、それはそれで嫌なので、どっちかというと自分に合った生き方を今の社会で模索するしかないわけなんですが、それも分からないというのが現状なんですよね。

 少し前に書いたエントリでも述べたけど、僕にとっての幸せもよく分からないし、やりたいことも無いので、ほぼ完全に詰んでます。これから先になにかしら見つけられないと全然人生楽しくないなという未来が待ってるー。

 もしかしてだけど、こんな思いを背負って働いてたりするの?だとしたら、発狂したりしないのかな?

 

幸せわかんないよっていう記事のやつ

 

parsleyparapara.hatenablog.com