今更なオブリビオンブログ
おもにMOD関連のメモを書いていくと思います、MODをいじったり、作ってるのが楽しいです。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NPCのAIの設定について2
AIパッケージについてです。

AIパッケージを設定する時の注意としては、一つのAIパッケージが終わったら、またAIパッケージのリストの中から上から順に実行していくということです。
つまり、なんの条件も設定していないAIが一番上にあると、その下のAIは、いつまで経っても実行されないということです。
「Schedule」のタブはゲーム内時間の何時にそのAIを実行するかの設定です。
寝たり食事したりするAIはここで時間を設定して一番上にすることで、その下のAIには時間の設定をしなくても思い通りに動いてくれます。

また、AIパッケージは、その名の通り複数のIAのパッケージで、単一の行動をするものではありません。
どういうことかというと、場所を指定した場合は勝手にそこまで歩いていくし、途中に他のNPCと話をしだしたり、戦闘もします。
これらの行動はプロセスと呼ばれて、プロセスをまとめたものがパッケージになります。
このあたりのことを理解しておかなければ思い通りの行動をとらせることは難しいです。


・AIパッケージの実行間隔について
AIは、基本的に常に実行されています。(実行可能な条件のAIを持っていれば)
プレイヤーの近くでロードされたエリア上にいるアクターのAIは、「ハイプロセス(Hi-Prosess)」と言い、これは毎フレーム処理されています。

アクターがプレイヤーの近くにいない場合は「ロープロセス(Low-Prosess)」と言い、ゲーム時間における15分に1度だけその処理が行われています。
また、NPCにスクリプトが付けられている場合は離れていても、AIの評価の時に一緒に処理が行われています(ゲーム内時間15分に1度)。
これはQuest Script以外でプレイヤーが回りにいない時処理される唯一のスクリプトです。



■フラグ(Flags)
AIパッケージの上部にフラグ(Flags)とドアフラグ(Door Flags)というチェックボックスの項目があります。
これらはどのAIパッケージで設定しても同じように振舞います。
以下これらをチェックした場合の説明です。

・Continue if PC near(PCが近くにいる間持続): PCが近くにいる限りパッケージの終了時間が来ても続けます。AIが「ハイプロセス(Hi-Prosess)」の間終わりません(繰り返します)。主に店を開き続けるような場合に使用します。
・Must Reach Location(Location条件を満たすまで): パッケージがLocation条件を満たすまで終わりません。特定の場所まで必ず移動させたい時に使います。主に街道を往復するガードに使われています。
・Offers Services(サービスを提供しつづける): お店やトレーニングのサービス提供者なら、そのパッケージ中に限りサービスを提供します。逆に言えば、これをチェックしていなければ商人としての機能が働きません。
・Must Complete(条件を満たすまで): 条件が満たされるまでパッケージを終了しません。時間の設定(Schedule)がしてあれば、一度始めたAIはその時間が終わるまではパッケージの切り替えをしません。
・Once per day(一日に一度だけ): 一度動作したら、24時間以上経たなければ再度動作しません。これは同一のパッケージが連続して動作しないようにしたい時に便利。ただし「Conditions」で「GetRandom」等を使っていると何故か無効になるようで、再度動作します。
・Skip Fallout Behavior : 出来る限りAIパッケージの指定動作のみをし、他の動作をしないようにさせます。主にNPC同士の会話をさせたくない場合や、なるべく戦闘しないようにしたい時に使います。
・Use Horse(馬を使う): このパッケージの間、馬を使います。ただし、自分の所有している馬が近くになければ使いません。
・No Idle Anims : このパッケージの間、アイドルアニメーションを再生しません。(待機時に考え込むようなポーズをとったりするやつです)
・Always Run(走りつづける): このパッケージの間、ずっと走ります。ただし、NPC同士の会話発生時にはそのNPCに向かって歩いていきます。
・Always Sneak(スニークしつづける): このパッケージの間、ずっとSneakをします。上記と同様で、会話発生時には歩きます。
・Allow Swimming(泳ぎを許可): 移動時に最短距離に水がある場合泳ぐようになる。チェックが無くても、戦闘中は泳ぐことがある。
・Allow Falls(ダメージが生じる飛び降りを許可): 移動時にダメージを与える高さから飛び降りるようになる。チェックが無くても、戦闘中は飛び降りることがある。
・Armor Unequipped(防具を装備せず服を着る): Armorを装備せず、Clothingを装備する(Armorしかもっていない場合は裸になる)。寝る時だけ鎧を脱がしたり、非番の日に普段着を着るなどの演出に使える。戦闘になると鎧になる。
・Weapons Unequipped(武器を装備しない): 武器を装備しなくなる。ただし、戦闘中は武器を装備する。武器を携帯しているNPCが寝る時などに使う。戦闘になると武器を装備します。
・Defensive Combat(攻撃されるまで戦闘しない): 最初に攻撃を受けない限り、NPCやクリーチャに対して攻撃しない。通常は嫌いなNPCがいる場合、自ら攻撃をする可能性があります。このチェックはその振舞いをキャンセルできます。ただし動作するAIパッケージに例外があり、Accompany、 Escort、 Followです。それら3つは、ターゲットのNPCが戦闘していると戦闘に参加します。


■ドアフラグ(Door Flags)
右上のドアフラグ(Door Flags)は、ドアの鍵をどうするかの設定です。
主に自宅に鍵を掛けたり外したりするのに使います。

・At package start(パッケージ開始時): パッケージがスタートすると、アクターはそのセルの全てのドアをLockまたはUnlockします。
・When at location(パッケージの開): パッケージが持続している間、アクターはそのセルの全てのドアをLockまたはUnlockの状態に保とうとします。もしプレイヤー等がドアの鍵を開けると、そのNPCは鍵を掛けなおします。
・At package end(パッケージ終了時): パッケージが終わった時、アクターはそのセルの全てのドアをLockまたはUnlockします。

※注・ただしこれらドアフラグが作動するためには条件が必要で、そのアクターがドアの所有権を有していることです。(鍵の所持の有無は関係ありません)
 そのため、他人の家や公共の施設に鍵を掛けてしまうことは通常ありえません。



■AIパッケージの種類
 分かりやすそうなものから順にいきます。

・Eat Package
食事を取ります。近くに椅子がある場合はその椅子を使います。
食べ物を持っていなければ、食べ物を探し出します。(Responsibliltyが30以下だと盗みもします)
スタミナ回復が一番上にある錬金素材なら食べ物であるとみなされます。(MODアイテムでも)
Posionを持っている場合はそのPosionに「Food Item」のチェックが付いていればの飲み物とみなされて、それも使います。
[Location]を設定した場合はその場所で食事を取ります。

その際に[Radius(半径)]を設定してあるとその範囲内の場所で食事を取ります。
範囲内に椅子がない場合は立って食事を取ります。


・Sleep Package
指定した場所の近くにあるベッドを使って眠ります。
ただし、近くに使えるベッドが無ければ眠れません。(所有権がない、すでに別のNPCが使っている等も含む)
[Location]で使うベッドを指定することも出来ます。


・Wander Package
[Location]で設定した場所を中心に[Radius(半径)]で設定した範囲内をうろつきます。
うろつく頻度はそのアクターの[Energy Level]の数値によります。
もしもNPCが壁に向かって歩き続けるような場合は、AIの設定ではなくパスグリッドの方の設定が問題です。


・Travel Package
名前のわりに、実際はどこか一箇所にじっとして居てほしい時に使います。
[Location]で設定した場所に移動し、その場に留まります。
すでに条件の場所に居てこのパッケージを実行している場合はその場に立つだけになります。
[Radius(半径)]を設定した場合その半径に入った時点で移動終了になります。

[Location]にベッドやイスのような家具を指定していした場合は、その家具を使います。
家具を使用させたい場合はこのパッケージを使うのが一番いいようです。
なお、家具を指定する場合は、その家具をスクリプトから参照できるようにしなければいけません。


・Use Item At Package
アイテムを使わせるためのパッケージです。
[Target]に指定したアイテムを使います。手持ちの物か、その[Location]の近くにあるものがパッケージで使用可能です。
[Value]で指定した回数使用します。
使われたアイテムはきちんと消費されていますが、0にした場合は消費せずに無限に使います。
[Location]で使用する場所を指定できます。

また、このパッケージには特殊な使い方もあって、特定のアイドルアニメーションをとらせる時にも使います。
例えば[Target]の[Object Type]でBookを指定すると本を読む動作をします。
この場合は指定アイテムを持っていなくてもアニメーションを再生できます。
よく見る武器や魔法の訓練をしているのもこの使い方で、その場合、攻撃や魔法に当たり判定はありません。



・Follow Package
主にコンパニオンのNPCに使われるパッケージです。
[Target]に指定したNPCに追従します。このパッケージには必須の設定です。
なお、他のパッケージでもそうですがNPCを[Target]に設定をする時は「Specific Reference」の方(RefIDの方)で設定しなければうまく動きません。
プレーヤーを対象にした場合は、AIパッケージの実行中はずっとハイプロセスのままになります。
(そうしないと振り切ってしまった時に困るため?)

また、このAIパッケージ中は以下のコマンドをスクリプトで実行することでプロセスを動的に変更することが出来ます。

 ・Wait

 書式
 Wait [PackageID]

 そのアクターの指定されたパッケージを「Wait(待ち)」状態にします。
 マーティン等に指示できる「ここで待て」の会話文で実行しています。
 棒立ちの状態になりますが、NPC同士の会話は実行可能です。
 PackageIDはアクターの現在実行中のPackageである必要があります。

 ・StopWaiting

 書式
 StopWaiting [PackageID]

 上記の「Wait(待ち)」の状態を解除します。

注意として、NPC同士が互いにFollowをし合う形にすると、ゲームが不安定になり、最悪CDTするようです。
このような、ヴァニラでは使われていない使い方をするのはよくないようです。


・Accompany Package
Follow Packageとほとんど似たようなパッケージです。
[Target]に指定したNPCに追従します。このパッケージには必須の設定です。
このパッケージでも上記のコマンドでプロセスを動的に変更することが出来ます。

Follow Packageとの違いは、このパッケージは[Target]に指定したNPCの行こうとしている場所と同じ所へ向かうということです。
そのため、場合によっては[Target]に指定したNPCを追い抜くこともありえます。
また、[Target]にプレイヤーを指定した場合はうまく動きません。(プレイヤーはAIを持っていないため)


・Escort Package
主にクエスト用途のパッケージです。
[Target]に指定したNPCあるいはプレイヤーをエスコートします。このパッケージには必須の設定です。
[Location]も必須の設定で、目的地になります。

[Target]にNPCを指定した場合はこのパッケージ実行中はそのターゲットにFollow Packageを押し付けます。
ついて来る者が指定の距離より離れてしまった場合、エスコートするNPCは立ち止まったりします。


・Ambush Package
主にクエスト用途のパッケージです。
主にNPCからプレイヤーに向かって話しかけさせたいときに使うパッケージです。
[Target]に指定したNPCあるいはプレイヤーに話しかけます。
[Location]を中心とした[Radius(半径)]のなかにターゲットが入ると話しかけにいきます。
ヴァニラでは、話しかけてくるカジートの強盗に使われているパッケージです。

注意としては、話しかけるのは一度だけだということともう一つ。
[Value]はアクターがターゲットに話しかける距離をあらわします。
この数値は大きすぎても小さすぎてもいけません。
「0」だと重なろうとしてくるので、いつまで経っても話しかけてきません。
大きすぎても良くないようです。
「100」~「400」くらいがいいでしょう。


・Find Package
主にクエスト用途のパッケージです。
アクターは指定された[Location]まで行き、[Target]に対して「Activate」します。
この「Activate」はプレイヤーがアクティベートするのと同様の反応になります。
アイテムを拾ったり、仕掛けを動かしたり出来ます。「Activate」が発動条件のスクリプトが付いていれば、ちゃんと発動します。

注意したいのは、アクティベートするのは一度だけだということです。
[Value]はアクターがそれらをアクティベートするのにどのくらい時間をあけるか決定します。通常は「0」でいいでしょう。
アクティベートし終てもこのパッケージを実行中だった場合は[Location]の半径をうろつきます。


・Cast Magic Package
主にクエスト用途のパッケージです。
アクターは[Target]に指定された魔法を[Location]に向かって唱えます。
使った魔法は実際に効果が出ます。
覚えていない魔法も指定できるようです。

[Value]は使う回数になります。


・Flee Not Combat Package
主にクエスト用途のパッケージです。
アクターは戦闘行為をしなくなり、逃げ出します。(戦闘中に逃げ出した時と挙動が若干違います)
ヴァニラではアサシンギルドの一部クエストの中でのみ使われています。
[Location]を指定した場合はそこまで逃げ出し、すくみ上がる動作でその場に留まります。
[Target]に指定した場合は指定したターゲットから逃げ出します。
その場合は[Value]はアクターが相手に寄り付かないようにする距離になります。





■[Location]を設定する際
 ・「Near Reference」での設定は、つまりRefIDでの設定になります。
  世界に一つだけしか存在しないものを基準とする場合はこれにしましょう。
 ・「In Cell」は、その設定されたセルに入った地点が基準になります。
  SleepやEatのパッケージ以外では使わないほうがいいでしょう。
  Wander Packageでこれを使うと、いきなりドアを使って出て行ってしまうことがあります。
 ・「Any Object」での設定は、つまりEditorIDでの設定になります。
  「何でもいいから武器の近く」等の若干広い範囲での種類のモノの近くでの設定になります。
  ただし、アクターと同一セル内に当てはまる条件のものが無い場合はうまく動かないようです。
 ・「Near Current Location」は、今現在の場所を中心にという意味になります。
 ・「Near Editor Location」は、アクターが作成された場所を中心にという意味になります。

・「Radius」は上記を中心とした半径のことで、いまいち単位がわかりませんが、だいたい200でベッドの縦の長さぐらいになります。
・オブジェクトアイテムを指定する場合は「No low level processing(スクリプトから参照出来るようにする)」のチェックをオンにする必要があります。
やり方は、下の画像の赤枠の部分をチェックします。(NPCはデフォルトでオンになっている)



[Target]を設定する際もだいたい同じような感じですが、「Value」は、パッケージによって意味が異なってくるので注意です。



クエスト用のAIを作る場合は、「Conditions」のところで条件を設定するといいです。
その時は「GetStage」か「GetStageDone」を使うのが一般的です。
「GetStage」の場合は、指定クエストの現在のクエストステージの数値を見ます。
「GetStageDone」の場合は、指定クエストの指定したクエストジャーナルがすでに完了されたか(ゲーム中で表示されたか)どうかを見ます。

「Find」や「Ambush」のパッケージは一度しかアクティベートしないため、何度もアクティベートしてほしい場合は、どこかで一度オフにして、もう一度パッケージを開始させる必要があります。
そのためには「Once per day(一日に一度だけ)」のチェックボックスを利用するか、「Conditions」で条件を設定する必要があります。

それから、AIパッケージはゲーム中での処理の優先順位が低いのか、なかなか切り替わらないことがあります。
そのためクエスト用のAIを設定していてもなかなか思うように動いてくれない時があります。
そんな時は「EvaluatePackage」のコマンドを使います。
これをダイアログのスクリプトで使えば、そのアクターのAIをすぐに再評価してくれます。
書式
[RefID(省略可)].EvaluatePackage

スポンサーサイト

テーマ:Oblivion - ジャンル:ゲーム

NPCのAIの設定について1
NPCのAIの設定について色々調べたり試したりしたので、自分なりにまとめて記録しておこうと思います。



まず、NPCのステータスの所で、一部挙動に影響を与えるものがあります。赤枠で示した所になります。



・[Personality](好感度)(友好度)
これはプレイヤーの場合と違って、他のアクター(プレイヤー)に対する好感度の初期値になります。
好感度は以下にあるようなさまざまな行動に影響を与えます。
NPCは攻撃を受けた時はもちろん、犯罪を目撃しただけでも好感度が下がります。

・[Int](知力)
クリーチャーはこの数値が30以上無いとドアを開けられないらしいです。
馬や野生動物なんかはこの能力値が低いため街中にまで追いかけては来ません。



下の画像は上記のAIのボタンを押して開いたウインドウです。


上の段の「AIの性格(AI Attributes)」がそのNPCの性格付けになり、どういう状況でどんな反応を示すのかの設定になります。
0~100の範囲の数値で設定します。


・[Aggression](好戦性)(攻撃性)
この数値は他のアクターに対して、好感度が値を下回ると戦闘を開始します。
この数値が5よりも高い場合、好感度がこの数値より高くないと降参を受け入れません。
この数値を5以下に設定すると、このNPCはどんなに好感度が下がっても戦闘を始めませんが、攻撃をされると戦闘を開始し、降参を常に受け入れます。
この数値を0に設定すると、どんなに攻撃を受けても戦闘は開始しません。

一般市民は5以下で、逃げる動物は0、敵は高めの数値(100でも構わない)とするのがいいでしょう。



・[Confidence](自信)(戦闘放棄しない度)
戦闘中に戦闘を継続するか逃げるかの設定。数値が高いほど逃げません。
30~40くらいだと負けそうになると逃げるようになり(この数値を元に計算され決定されるため、必ずではない)、0だと最初から逃げ周ります。
100だと、常に戦い、決して逃げなくなります。

一般市民は40以下で、鹿などの逃げる動物は0、敵は高めの数値(100でも構わない)とするのがいいでしょう。



・[Energy Level](エネルギー)(活力)(移動の活発さ)
Wenderパッケージを実行中に、どのくらいの頻度で動き回るかの設定です。
アイドルアニメーションの実行間隔(なにもしていない時に実行されるアニメーション)にも影響があります。

Wenderパッケージを使わないなら、正直どうでもいいような部分ですが、Wenderパッケージを使うのなら、
40以上は無いと、ほとんど動いている感じがしません。



・[Responsibility](責任感)(正義感)
犯罪に対する反応の設定。
30以下にすると、このNPCは犯罪を犯します(Eatパッケージ実行時に食べ物を持っていなかったら盗む、など)。
また、商人の場合は盗品を扱うようになります。
この数値より好感度が高いと、犯罪によっては見逃してくれることもあり、0にすると犯罪を目撃しても通報しません。
100に設定すると、所属しているクラスが逮捕権を持っている場合(Guardのチェックボックスがオンになっている)プレイヤーを逮捕できるようになります。
当然、各町のガードの皆様は100の設定となっています。商人も多くが100です。
逮捕権がない場合はプレイヤーやNPCの犯罪を目撃した時、ガードなしで直接その犯罪を報告できます。
(99以下の場合は、犯罪を目撃したらまずガードを呼んで、それから犯罪が確定になります)
不法侵入の時は、警告をして、それでも出て行かない場合に通報or戦闘になりますが、警告の猶予時間もこの数値に関係があります。

一般市民は40以上で、商人は高め、ガードは100、敵や動物は0の数値とするのがいいでしょう。
(もしも敵や動物でこの数値を高めにすると、犯罪者に通報される、動物が通報する、という理不尽なことになります。
一般市民で30以下にするとAIパッケージによっては犯罪を犯し、ガードに殺される可能性があることにも注意)





なお、上記の数値は全てスクリプトから変更することが出来ます。
書式
[アクター(省略可)].SetAVC [Code] [数値]

CodeはOblovionWikiのほうに一覧表があるのでそちらでどうぞ。


敵性NPCは通常AggressionとConfidenceの数字が高くて好感度が低めのため、プレイヤーを見ただけで襲い掛かってくるというわけですが、このコマンドでそれらの数値をいじる事で、一般市民から戦闘開始させることが出来ます。
一般市民(悪の組織に属していないNPC)でも、攻撃を受けてから反撃すれば、犯罪にはなりません。




真ん中の「売買(Buys/Sells)」は商人にする場合のみ必要な設定です。「その他のサービス」はトレーナー等のサービスです。
ここでチェックを入れた種類のアイテムだけを売るようになります。売るアイテムは所持しているものおよびそのNPCの所有権のあるアイテムになります。
また、魔法はそのNPCが覚えているものしか販売できません。

画像では、選べなくなっていますがこれはNPCのステータスの所で「ステータス自動算出(Auto calc stats)」になっているからです。
商人にするには、このチェックをしてはいけません。
なお、「PCレベル変動(PC Level Offset)」にすると自動で「ステータス自動算出(Auto calc stats)」にもチェックが入ります。
そのため商人のNPCはステータスが固定でなければいけないようです。


・Barter Gold (限度金額): プレイヤーからアイテムを買い取る時の限度額を設定します。
・Recharge (チャージ): チェックすると、そのNPCは魔法のアイテムをリチャージできるようになります。
・Repair(修理) : チェックすると、そのNPCはアイテムを修理できるようになります。
・Training(トレーニング) : チェックすると、そのNPCはサービスとしてトレーニングを提供できるようになります。トレーニングするスキルをリストから選択して、数値はトレーニングできる最大スキル値になります。


その下の「AIパッケージリスト(AI Package List)」はそのNPCの持っているAIパッケージのリストになります。
基本的には上のほうにあるものが優先されます。

テーマ:Oblivion - ジャンル:ゲーム



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。