忍者ブログ

ファルログ

Home > ブログ > CK作業記録

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

仲間を守る!「新・補助系フォロワー」への挑戦②

【新人リアの成長】 vol.2~師匠との出会い~前編

アンジーの野営地。


ヴィルカスはリアにアエラとは異なる体系の弓術を学ばせるため、雪深い山道を越え…彼女の紹介でアンジーの元を尋ねた。



ヴィ「落ち着いてくれ!何もしないから。」

リア「練習したい。」

アンジー「私に従えば学べる事があるかもよ。」

弓の使い方を教わるリア。


アンジー「忘れないでね、平静さとスピードよ。矢が当たるのを見届けてから次の獲物に移る必要はないの。自分の一射を信じなさい。」

リア「わかったわ。」

アンジー「そこのお兄さん、リアの訓練につきあいなさい。的と的の間に立つのよ。その方が…緊張感が出るわ…!!」

ヴィ「・・・。これ…本当に……訓練に、必要か??(汗)」

(パシュッ…!!)

アンジー&リア「あっ……!!」

(…プスッ!)



ヴィ「ヒィッ!(…バタッ!!)」



前回作った『攻撃的回復』フォロワーのAIPackageを微調整しています。
距離間の設定とFlagsを改変しました。

【現在のPackageの仕組み】

現在のAIPackageの挙動について分析しました。

敵対者が現れフォロワーが戦闘態勢になると、「aaaHoldPosition」の交戦モードになり、指定したCombatStyleで戦います。リアは通常もDEFAULT。(検証する時はここを「csUnarmedOnly」にして、切り替わったことを確認できるようにしていました。)



戦闘中に「プレイヤーのヘルスが8割を切る」とPackage自体に設定しているConditonsにより、「aaaAggressiveHealingMode」に切り替わります。

Packageの設定。


Flagsの設定。


このモードになると、戦っていたフォロワーはいったん交戦を止め、TravelによってプレイヤーのRadius700に来ようとします。この動作が完了するとだいたいの位置関係はプレイヤー(Target)がフォロワー(Self)のRadius800以内に入っているので、Simultaneousに設定されたTriggerにより、UseWeaponのProcedureに移行。近接武器から弓に装備を持ちかえ、プレイヤーを繰り返し射撃し、回復させます。



特に制限を設けていないので、とにかくポーションを打ちまくってくれます。今の設定だと、プレイヤーが全快しているのにも関わらず打ち続けます。そして、『あるタイミング(←のちにコレが重要かつ厄介な問題を引き起こしている事に気付きましたが…)』になるまでこの動作を続けると、プレイヤーのヘルスが8割を切っていない事を認識し、再び「aaaHoldPosition」の交戦モードに切り替わります。

回復してもらうにはある程度の距離間が必要で、フォロワーと近い距離にいる時はプレイヤーに弓を向けたまま打ってくれません(Weapon Type:Rangedの仕様?)。この動作は回復モードのサインなので、少し下がって距離をとってあげると、こちらにちゃんと打ってくれます。

必要な最小距離。
 

【AIPackageの問題点と改善】

テストプレイをしていると、時々フォロワーが弓を引き絞って敵の足元を狙ったまま、AIがストップしてしまう問題が起きてしまいました。どういうときに起こりやすいかというと、フォロワーが回復行動に入っている際に、敵が近づいてきて攻撃されたり、プレイヤーとの距離が一定以上離れてしまった時に、この状態になってしまいます。こうなるともう、サンドバックと化します…(汗)



対処法としては、麻痺、弱フスロダ、バッシュなどを放ってやり、よろめきを発生させてフォロワーの行動を初期化してやると、すぐに復帰できるようでした。敵に攻撃されて自然に復帰してくれることもあります。しかし、対魔術師ではよろめきがめったに起こらずにそのままダウン。対戦士では短時間で大幅に削られる分、渡しておいた回復の薬をフォロワー自身でガブ飲みしてしまい…いざという時にプレイヤーを回復できなくなってしまうなんていう事態が…起こります(そういうマヌケさを個人的には楽しんでいますが…笑)このままでは賢いAIとは言えず、改善が必要です!!

最初の改善策は「UseWeapon」設定の見直しでした。というのも、TravelやFleeを使ってUseWeaponに移行する前に安全なところへ退避させたり…フォロワーの位置取りに関して色々な設定を試してみましたが…結局、敵が寄ってくるという事実は防ぎようがないためか、LocationやRadius関連の設定をいくら工夫してみても、どうやってもこのバグを抑えることはできませんでした。

そこで…コメントにいただいた「回復量を増やし、射撃数を減らす」方法を試してみることにしました(的確なアドバイスに感謝いたします!)。また、弓を上手く扱っているNPCが持つAIPackageのUseWeaponの設定から、射るタイミングや回数など何か安定性を高めるヒントが得られないか調べていきました。

そして、弓の名手「アンジー」さんがドヴァキンを訓練するQuest「dunArcherQST」から、訓練のお手本を見せてくれるためのPackage「dunArcherAngiUseBowFirst01」を本当の意味で、お手本にさせていただきました!
単純な変更で、VolleyWait(射撃後の待機時間)をMin0→5、Maxを0→6に設定しなおしました。以前のPackageはどちらも0に設定していたので、矢継ぎ早に回復を行う設定でした。

そして、スカイリム上で動作を確認してみると…!激減とまではいかないもののバグが比較的出にくくなりました!!時間はかかりますが、回復モードと交戦モードの切り替えが上手くいく確率がアップしたように思います。最終的にはMin→2、Max→3辺りが丁度良い感じでした。

回復の頻度が落ちたのと、待機時間が長くなった分フォロワーが的にされる事が多くなりましたが、一番頭を悩ませていたUseWeaponの割り込みバグを少し減らす方法が明らかになりました。アンジーさんの撃ち方、「次の動作までのタメ時間」が地味に効いていて、割り込みを緩和してくれているようです。

少しバグの心配が減り…今度はフォロワーが的にされないよう退避させるための、位置取りProcedureが活きてくるようになりました。フォロワーはUseWeaponのProcedureに入ると、回復行動に終始するため、非常に無防備になります。それを防ぐために、「Flee」をUseWeaponの上に差し込み、敵と十分に距離をとってから回復行動に移るようにしてみました。

Fleeを追加したPackage。


敵が近くにいると…FleeFromで敵(Combat Target)から逃げ、GoalRadiusの700の範囲まで逃げ切った時に、UseWeaponのLocationであれば回復動作が発動するようになっています。敵が700以上遠くにいて、逃げる必要が無い時はすぐにUseWeaponの動作に移り、回復してくれます。ただ少々問題もありまして…距離間の設定がかなり難しく、少し設定を変えただけで…フォロワーが敵にまとわり付かれている限り、ずっと走り回る。…イタチごっこのようになってしまいます。一旦、回復動作が発動しさえすればイタチごっこにはならず、殴られながらもプレイヤーに間隙をぬってポーションを打ち込もうとしてくれます。

※もっと良いBranchの作り方があると思うので、試行錯誤中です!

テストプレイでは、フォロワーの位置取りがかなり良くなりました。敵を回避して走りながら弓矢を打ち込める距離まで移動してくれます。フォロワーが逃げている間にプレイヤーが敵を引き剥がすことで、後方から上手く援護してもらうこともできます。イタチごっこの件は…一人敵を引き付けて囮になってくれているんだ…と考え、ここは目をつむりましょう(汗)なかなか賢くなってきました。

初期のPackageを搭載したリアは、同胞団の戦士として自らを犠牲にして仲間を助ける性格が表れていたと思いますが、Fleeを使ったPackageにすると…それだけで戦場を駆け回る躍動的なフォロワーに変わりました。動きを見ていて楽しい!!

弱点としては…狭い路地に入ると『攻撃的回復』ヒーラーは回復の動線が遮られたり、後退できず敵やプレイヤーとの十分な距離をとることができなくなってしまうようです。このような場面では、遮へい物を通り越して回復させることができる『GrandHealing型』ヒーラーが活躍すると思います。それから、久しぶりにネクサスにmodを見に行ったら…回復銃を使いこなす『回復武器搭載』のカッコイイ新型ヒーラーが現れていて驚きました!!武器を扱うところは『攻撃的回復』ヒーラーに共通していますが、仕組みは『GrandHealing型』に近い感じで…これもまた新しい。スカイリムは日進月歩ですね!

【バグの原因】

予想することしかできないのですが…『攻撃的回復』の方法で、プレイヤーを強制的に射撃するようTargetに指定していることが影響しているようです。UseWeaponにより回復行動に入っている時に敵が近づいて行動を中断させたり、プレイヤーが離れてしまったりすると、フォロワーのAIは一瞬…攻撃対象がプレイヤーから敵に移ったような挙動を示します。攻撃対象が敵に移っても、Package内のTargetがプレイヤーになっているので、敵に向けて攻撃を放つことができなくなり、弓を向けたままになる(?)のかもしれません。
切り替え時の「タイミング」が大きく影響してしまっているようです。根拠はありませんが、スカイリムの仕様として…攻撃の対象を取得する処理の方がPackageの行動を司る処理よりも早いのかもしれません。

またはAIの隠れたルールとして、ある行動を行うと判断した段階で、その行動を「やりきる」までは、Procedureを終了することができないのかな?と思いました。対象を狙う仕草を見せた段階では、すでにUseWeaponのProcedureに入ってしまっており、「放つ」というモーションを行わない限りはそのProcedureから抜け出すことができなくなる…(@_@;)?
だからこそ、その行動をよろめきによっていったんリセットしてやると再び動き出せる。そういうシステムになっているのかもしれません…。

理由として、以下のようなケースがありました。

戦闘中にプレイヤーのヘルスが8割を切る→フォロワーが回復の動作に移る→敵が近づいたり、プレイヤーが離れたりして何らかの割り込みが生じる→その間に自然回復やポーションなどでプレイヤーのヘルスが8割以上になる→すると、フォロワーは狙う対象を失ってしまうのか弓を構えたまま地面を向いてしまう。

このバグに陥った後、再度プレイヤーのヘルスを8割切らせると…フォロワーはよろめきで行動をリセットせずとも再びプレイヤーの回復を行おうとしてくれます(結果的に再起動の状態)。つまり、弓を構えたままになっているバグでは「一時停止」の状態であり、敵対者の方を向いていたとしてもそれは敵に放つために狙っているのではなく、自身の近くにいる者に視点を合わせている挙動であり、実際はまだプレイヤー(UseWeaponで指定したTarget)のことを狙っている…。しかしConditionsの条件である「8割未満」に適合せず、放つモーションを発動できない(=Procedureを完了できない)という複雑な状況なのではないでしょうか。

自分は今までこのことに気づかずに製作してしまいましたが、「ヘルス」のように変動するパラメータをConditonsに指定しているとAIの処理のタイムラグによって、PackageのProcedureが途中で停止してしまう現象が起こってしまうのかもしれません。

この問題を極力回避するには、OverridePackageの発動条件を「変動値式」から「スイッチ式」に置き換える方法が有効かもしれないと思いました。「スイッチ式」と勝手に名付けてしまいましたが、例えば…プレイヤーが魔法を構えた時、隠密状態になった時、ジャンプして空中にいる時、ある呪文を使用したり、装備した時…など変動しない固定値をスイッチ(条件)にするという意味です。

例:隠密スイッチ。


それでもやはり、プレイヤーがスイッチを入れるタイミングによっては、上述のようなタイムラグが生じてしまうことがありました。その代わりに、自分とフォロワーと敵の位置関係をだいたい把握してプレイヤー自身が今なら行ける!という感じで、フォロワーに回復をお願いするタイミングを判断・制御することができます。フォロワーの特徴やキャラ設定に合わせて、AIも「自己判断タイプ」と「指令タイプ」に作り分ける必要があるかもしれません。

どうやったら良いかまだ思いついていないのですが…Conditionsで発動のタイミングを見張らせる考えを捨てて、Packageごとにタイマーのようなものを設定して、30秒ごとに「交戦モード」と「攻撃的回復モード」を交互に自動切り替えするような仕組みができたら、ProcedureTreeが途中で止まるのを防げるのでは?とも考えております。

…つづきます!


【新人リアの成長】 vol.2~師匠との出会い~後編



ヴィ「(さっき矢が刺さる瞬間…遠くの兄弟と共鳴しているような、妙な感覚があった…。ファルカスは今どこにいるのだろうか…。無事だといいが…汗)」

リア「・・・!(アンジーさん、弓の扱いが伊達じゃない…!もしかしたら…アエラと同等、もしくはそれ以上の腕前かも…)」



アンジー「私はもう成長が頭打ちなの(固定Lv10、弓術94)。あなた…ここまで正確に狙えるなんて才能があるわ!これからはあなたたちの時代ね!…期待してるわよ。」

束の間の休息。


ヴィ「たいしたものだ…!この短期間でどんどん上達しているな。」

リア「師匠のおかげよ。それに、多少あなたもね。」

数日間の訓練が終了し、別れの時―――。



リア「手伝ってくれてありがとう、アンジー師匠。」

アンジー「どういたしまして。ここにはめったに人が来ないの。ましてや友好的な人なんてね。」

ヴィ「世話になったな。」

アンジー「ちょっと待ってて。たいした物じゃないけど、この弓を持って行って。家族からもらったの。大切な物だけど、辛い思い出をたくさん思い出すか―――」

「!!?(……あれっ?ここに置いたはずなのに…??)」

ヴィ「随分、使いやすそうな弓じゃないか…どこで手に入れたんだ?ちょっと見せ―――」

リア「―――あなたでも、他の誰でもだめです!!―――」

ヴィ「す、すまない。(何故、こんなに頑なに拒むんだろうか…)」



アンジー「…弓はあげるわ。もう棚から持っていってるみたいね…(汗)」

―――こうしてリアは、レアアイテム『アンジーの弓』を……手に入れ(借りパクし)たのであった。

拍手[0回]

PR

PAGE TOP