UDN
Search public documentation:

CrowdSystemJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 Home > AI とナビゲーション > Crowd System
UE3 Home > レベルデザイナー > Crowd System
UE3 Home > シネマティック アーティスト > Crowd System

Crowd System


概要


このドキュメントは、GameFramework パッケージに実装された新しいクラウド システムを解説するものです。これは、 Old Crowd (クラウド) システム で解説されたオリジナルの UnrealEngine 3 クラウド システムに取って代わります。

このクラウド システムは、レベル デザイナーがアニメーション化されたキャラクターの「クラウド (群衆)」をマップに追加し、クラウド目的地のネットワークや Kismet インタラクションを通して、移動やアニメーションをコントロールできるように設計されています。Agent タイプは、アーキタイプを使用して定義されており、プラグイン挙動システムによって、レベル デザイナーがクラウド エージェントとプレイヤーやその他の NPC とのインタラクションをコントロールできます。

現在のところ、エンジンにはクラウド固有のレンダリング最適化機能はありません。クラウドの各メンバーは一意の AnimTree (アニメーション ツリー) と骨格メッシュ インスタンスで構成されていますが、システムでは最もコスト高のキャラクター シミュレーション (Unreal の歩行物理シミュレーションと完全 AI) を意図的に回避しています。歩行物理に続いてコスト高になるメッシュのクラウド要素は、すべてのグラフィック頂点のスキニングです。そのため、なるべくローポリおよびローボーンとして SkeletalMesh の使用を続けることを推奨します (当社では約 1000-1500 のポリゴン、20 のボーンを使用しています)。さらに、LOD の積極的な使用も推奨しています。

システムの仕組み


前述のとおり、クラウド「エージェント」は Pawn (ポーン) ではなく、PHYS_Walking を使用しません。その代わりに、一連の簡単なルールに従う移動モデルを使用します。覚えておくべき大切な点の 1 つに、クラウドエージェントはレベルのジオメトリに対する衝突を実行 しない ことが挙げられます。代わりに、AI パスネットワークを使用してマップのジオメトリを通り抜けないようにします。コストのかからない ゼロエクステント ライントレースを実行し、起伏のあるサーフェスに合わせられるようにします。

ゲーム固有の実装はすべて、非抽象的なクラウドスポーナーまたはポピュレーションマネージャーのトグル (切り替え)、およびクラウドエージェントクラスが最低限含まれている必要があります。たとえば、UTGame には、クラウドシステムのごく基本的な実装例が含まれていますが、このシステムは、UT 固有のクラウド スポーナー クラスである SeqAct_UTCrowdSpawner と UT エージェント アーキタイプのベースクラスとして使われるクラウド エージェント クラスである UTGameCrowdAgent をともなっています。

クラウド ポピュレーション マネージャー トグルの Kismet アクション


Kismet アクションは、クラウド ポピュレーション マネージャーの on と off をトグルするために使用します。常にアクティブになっているポピュレーション マネージャは 1 つしかありません。これは、プレーヤーのまわりのエリアをエージェントで満たそうとします。そのために、プレーヤーには現在見えない GameCrowdDestinations 間のうちで近い位置で、新しいエージェントをスポーンします。その際、数秒後に予測されるプレーヤーのポジションが考慮されます。また、もう見えなくなったりプレーヤーには関係がない「古い」エージェントを除去して一定のエージェント数を保ちます。

リンクの入力

  • Start - ポピュレーション マネージャを有効にする。トグル アクションの編集可能なプロパティに基づいて、プロパティを更新する。
  • Stop - ポピュレーション マネージャを無効にする。

スポーンするエージェントを指定する

ポピュレーション マネージャは、複数のタイプのエージェントを、エージェントのタイプ別に種々の頻度でスポーンできます。スポーンするエージェントのタイプのセットは、GameCrowd_ListOfAgents アーキタイプによって指定されます。これによって、各種スポーナーやポピュレーション マネージャがリストを簡単に再利用できるようになります。このリストでは、アーキタイプによってエージェントタイプが指定されます。このことは、「エージェント アーキタイプ」セクションで解説されています。各アーキタイプのスポーン頻度は、それに関連する FrequencyModifier によって影響を受けます。特定のアーキタイプが選択される率は、自身の FrequencyModifier を、すべての FrequencyModifier の合計で割ったものに等しい。

エージェントのアーキタイプのエントリによって、 GroupMember が指定された場合、これらのアーキタイプに基づくエージェントがスポーンされて、第1のエージェントと同じグループになります。グループ化されたエージェントは、いっしょに動きます。ただし、キューしません。(したがって、それらが使用する目的地には、グループ全体のための空きある必要があります。)

  • CrowdAgentList - このクラウドスポーナによってスポーンされたエージェントのアーキタイプについてのリスト。
  • bClearOldArchetypes - trueの場合は、古いポピュレーション マネージャのアーキタイプ リストをクリアします。このトグル アクションの *CrowdAgentList *リストを追加はしません。

スポーン

エージェントをスポーンするには、パーティクル システムと同様の方法で行います。ただし、レベル内で 1 個以上のアクタを使ってエージェントをスポーンすべき位置を指定します。それには通常 GameCrowdDestination を使いますが、どんなタイプのアクタでも可能です。(エージェントが目的地間で移動するには、GameCrowdDestinations である必要があります。)

  • SpawnRate - 1 秒につきスポーンするエージェントの数。
  • MaxAgents - 1 度につき生きているエージェントの最大数。エージェントが破壊された場合は、この最大数になるようにスポーンされる。
  • WarmupPct - ポピュレーション マネージャのトグルが on された場合にただちにスポーンされる最大ポピュレーションのパーセンテージ。(visibility (可視性) のチェックは考慮されない。) 範囲は、0.0 から 0.1 までの間。
  • bKillAgentsInstantly - true の場合は、ポピュレーション マネージャが無効になった時に、ただちにすべてのクラウド エージェントを破壊します。関連性が失われてゆっくり死んでいくことにはなりません。
  • MaxSimulationDistance - ポピュレーションのシミュレーションのために関連のあるカメラからの最大距離を設定する。

グラフィックスとアニメーション

クラウドエージェントは、通常の UE3 アニメーションシステムを使用します。ライトニングには LightEnvironment を使用します (プレーヤーの Pawn のように)。ただし、デフォルトでは、クラウドスポーナーによってオーバーライドされない限りは、速度を考慮して動的シャドウをキャストしません。エージェントによって使用されるメッシュとアニメーションは、アーキタイプによって定義されます。これについては、後に解説します。

  • bEnableCrowdLightEnvironment - クラウド メンバーのライト環境を有効にするかどうかを設定する。
  • bCastShadows - クラウド メンバーがシャドウをキャストすべきかどうかを設定する。

Crowd spawner Kismet アクション


この潜在性 Kismet アクションは、クラウド エージェントをスポーンするために使用されます。どのエージェント アーキタイプをスポーンすればよいかというパラメータを含んでいます。

入力リンク

  • Start - スポーンするクラウド エージェントを開始する。
  • Stop - 新規エージェントのスポーンを中止する。
  • Destroy All - このアクションによってスポーンされたすべてのエージェントを破壊する (死んだアニメーションは再生されない)。
  • Spawn Points - エージェントがスポーンする場所。通常は GameCrowdDestination だが、どのアクタでも良い (エージェントが目的地間を移動するには GameCrowdDestination でなくてはならない)。

出力リンク

  • Agent Spawned - エージェントがスポーンすると発動される。
  • Spawned Agent - 最後にスポーンしたエージェントを出力する。

スポーンするエージェントの指定

クラウド スポーナーは、各エージェント タイプにさまざまな頻度で、複数のタイプのエージェントをスポーンすることができます。エージェント タイプは、「エージェント アーキタイプ」セクションで説明があるように、アーキタイプを使用して指定されます。各アーキタイプのスポーン頻度は、関連付けられた FrequencyModifier によって影響されます。特定のアーキタイプが選択される可能性は、その FrequencyModifier を、すべての FrequencyModifiers を足したもので割った値と等しい。

エージェント アーキタイプ入力に GroupMembers が指定されていた場合、これらのアーキタイプに基づくエージェントは、スポーンし、プライマリ エージェントとグループされます。グループされたエージェントはともに移動しますが、キューはしません (従って、それらの使用する目的地には、グループ全体のスペースがある必要があります)。

  • CrowdAgentList - このクラウドスポーナによってスポーンされたエージェントのアーキタイプについてのリスト。

グラフィックスとアニメーション

クラウド エージェントは、通常の UE3 アニメーション システムを使用します。ライティングに LightEnvironment を使用しますが (プレイヤー Pawns のような)、デフォルトでは、クラウド スポーナーによってオーバーライドされない限り、スピードに動的シャドウを投影しません。エージェントによって使用されるメッシュとアニメーションは、後ほど説明されるようにそのアーキタイプによって定義されます。

  • AgentLightingChannel - エージェントを入れるライティング チャンネル。
  • bEnableCrowdLightEnvironment - ライト環境をクラウド メンバーに有効化するかどうか。
  • bCastShadows - クラウド メンバーがシャドウを投影するかどうか。

スポーン

エージェントはパーティクル システムと同じ方法でスポーンしますが、ユーザーはレベル内の 1 つまたは複数のアクタを使用してエージェントをスポーンする位置を指定します。通常は GameCrowdDestinations ですが、どのアクタでも構いません (エージェントが目的地間を移動するには GameCrowdDestination である必要があります)。

  • SpawnRate - ターゲット アクタに対して 1 秒間にスポーンするエージェントの数。
  • SpawnNum - 一度に活動できるエージェントの最大数。エージェントが破壊された場合は、この数値に達するために追加のエージェントがスポーンされる。
  • SpawnRadius - エージェントをスポーンするターゲット アクタの周辺半径。
  • bOnlySpawnHidden - True の場合、プレイヤーからスポーン ポイントが見えない場合のみ、エージェントをスポーンする。
  • AgentWarmupTime - レンダリングされない場合、スポーンしたエージェントを眠らせるまでに「ウォームアップ」する平均時間。
  • bRespawnDeadAgents - True の場合、完全に削除された (例: 爆破されたなど) エージェントがリスポーンする。
  • SplitScreenNumReduction - 分割画面でどの位、数を減少させるか。
  • bCycleSpawnLocs - true の場合は、スポーナーは、スポーンの位置を通って循環し、ランダムに選択されたものからはスポーンしない。
  • bWarmupPosition - true の場合は、エージェントが、プレーヤーの視線から外れている初期デスティネーションと初期スポーンの位置の間にあるランダムなスポットで、開始位置を探そうとする。 |

目的地への移動

新しくスポーンしたエージェントは、移動する先に GameCrowdDestination を選びます。この目的地は、スポーン場所として使用される GameCrowdDestination の目的地リストから、またはクラウド スポーナーの Destinations 入力に接続された GameCrowdDestinations から選択されます。クラウド スポーナーは、エージェント アーキタイプのベース設定をオーバーライドして、強制的に (よりコストの高い) ナビゲーション メッシュ パス検出や障害ブロックを使用させることもできます。

ALERT! 注意 : 障害ブロックには現在複数の問題があるため、現時点では、その使用を推奨していません。障害ブロックがなければ、たとえパス ファインディングを使用していたとしても、エージェントが壁を通り抜けたり、レッジ (棚状の障害物) から落ちたりする場合があります。

  • bForceObstacleChecking - True の場合、このスポーナーからすべてのエージェントの障害チェックを強制する。
  • bForceNavMeshPathing - True の場合、このスポーナーからすべてのエージェントのナビゲーションメッシュのナビゲーションを強制する。

GameCrowdAgent


これは、クラウド エージェントの基本 Actor クラスです。アーティストやレベル デザイナーによって作成されるエージェント アーキタイプは、ゲーム固有の GameCrowdAgent のサブクラスに基づきます。エージェント アーキタイプは、編集可能なプロパティを多く持ちます。

グラフィックスとアニメーション

エージェントのビジュアル プロパティは、そのアーキタイプによって指定されます。一般的なクラウド メンバーは、GameCrowdAgentSkeletal サブクラスに基づいたアーキタイプを持つ骨格アニメーション化メッシュを使用します。

  • SkeletalMeshComponent - クラウド メンバー メッシュに使用される SkeletalMeshComponent。エージェントに使用されるメッシュ、animtreetemplate とアニメーション セットが設定される必要がある。
  • WalkAnimNames - ゆっくり移動する際に使用するアニメーション ループの名前
  • RunAnimNames - より素早く移動する際に使用するアニメーションの名前。
  • MeshMinScale3D, MeshMaxScale3D - エージェント メッシュに適用する 3D ドロースケールの範囲。
  • AmbientSoundCue - このエージェントによって再生される Ambient Sound キュー。

以下のプロパティは、ルート モーション速度 (以下に説明される bUseRootMotionVelocity) が使用されておらず、エージェントの AnimTree が SpeedBlendNode を持つ場合のみ、エージェント アニメーションに影響を与えます。

  • SpeedBlendStart - この速度未満の場合に歩行アニメーションを使用する。
  • SpeedBlendEnd - この速度を超えた場合に走行アニメーションを使用する。これと SpeedBlendStart の間では、アニメーションをブレンドする
  • AnimVelRate - エージェントの速度に基づいて、アニメーションの再生速度の変化を制御する
  • MaxSpeedBlendChangeSpeed - 走行と歩行の間のブレンドがどれぐらい速く起こるかを制限する。
  • MoveSyncGroupName - レートがスケールされているような移動の動機グループの名前。

エージェント アニメーション コードは、エージェント animtree がどのようにセットアップされているかに関して、特定の推測を行います。サポートされたすべての機能を実装するのに、 'bIsPanicked' AnimNodeBlendByProperty ノードを含む、 'SpeedBlendNode' 、 'ActionBlendNode' 、 'ActionSeqNode' 、 'WalkSeqNode' 、 'RunSeqNode' の名前を持ったアニメーション ノードを見つけることが求められます。

エージェントのアタッチ

エージェント アーキタイプは、Attachments 配列に指定されるランダムなアタッチともにスポーンするように指定することもできます。

  • Attachments - エージェントにアタッチするメッシュのセットのリスト。
    • SocketName - メッシュをアタッチするソケットの名前。
      • List - このソケットにアタッチする可能性のあるメッシュのリスト。
        • StaticMesh - アタッチするメッシュ。
        • Chance - このアタッチを選ぶ可能性。
        • Scale3D - アタッチする際のメッシュに適用されるスケーリング。

移動

クラウド エージェントが従うルールと、各ルールに関連する Crowd (クラウド) アクション内の設定を以下に示します。各ルールにより、エージェントに適用される力が生成されます。現在のエージェント移動システムは、群で動くパーティクルとしてエージェントを取り扱います。将来的には、エージェント移動は、Reciprocal Velocity Obstacles (相互速度障害) (http://gamma.cs.unc.edu/RVO/icra2008.pdf) を使用するシステムに移行するでしょう。

障害回避

エージェントは通常の衝突チェックを行いませんので、レベル ジオメトリを通り過ぎることがあります。ナビゲーション メッシュを使用して、エージェントが障害チェックを行うオプションがあり、これは、エージェントがジオメトリを突き抜けたり、出っ張っているところから落ちたりすることを防ぎます。障害ブロックは現在いくつかの問題を抱えているためで、現時点では使用は推奨できません。障害チェックなしでも、ナビゲーション メッシュ パスを使用していると、通常エージェントはきちんと挙動します。

* bCheckForObstacles - 障害メッシュ ブロック エージェントを持つかどうか。

速度クランプ

ルート モーション速度を使用することは、ビジュアル的に最善の結果につながります。これは、アニメーションの中にルート モーションを必要とします。このオプションで、エージェントの移動は全般的にアニメーションとマッチしますが、例外として、障害や急な曲がり角が原因で、エージェントが遅く移動しなければならない場合があります。

* bUseRootMotionVelocity - True の場合、移動アニメーションのルート モーションに基づいて、速度をクランプする。

以下のプロパティは、ルート モーション速度が使用されていない場合のみに影響します。

  • bClampMovementSpeed - 移動スピードをクランプするかどうか。
  • MaxWalkingSpeed - 最大歩行速度 (ルート モーション速度を使用していない場合)。
  • MaxRunningSpeed - 最大走行速度 (ルート モーション速度を使用していない場合)。
  • VelocityDamping - エージェントの最大スピードを制限するために力が適用される。「摩擦」と考えてみればよい。

Avoid Neighbouring Agents (近隣エージェントの回避)

エージェントは、近くのエージェントや pawn を避けます。現在、エージェント間の突き抜けを避けるために、シンプルなスプリング力が使用されています。bWarnCrowdMembers を持つ playercontroller から派生した GamePlayerController が True に設定され、これを使用しているプレイヤーは、tick ごとにクラウド メンバーとその位置をアップデートし、エージェントによるより正確な回避が行われます。

* AwareRadius - システムが平均速度を検出するときに、検出対象となるエージェント周囲の距離。

  • AvoidOtherStrength - エージェントが重なり合うときにそれらを押し離す強度。
  • AvoidPlayerStrength - プレイヤーからエージェントがどのぐらい強く押しのけられるか。
  • AvoidOtherRadius - エージェント間の重なり合いをチェックするのに使用する半径 (基本的にはエージェントの大きさに相当)。
  • AwareUpdateInterval - エージェントの「認識」がいくつのフレームでアップデートされるか (アトラクタとその他のエージェント)。

Move At Speed Of Neighbours(近隣エージェントの速度で移動)

エージェントは、周囲のエージェントの平均速度で移動を試みます。

  • MatchVelStrength - エージェントが近隣エージェントの速度にどの程度合わせるか。

グループに留まる

グループされたエージェント (SeqAct_GameCrowdSpawner の GroupMembers を参照) は、以下のプロパティとともに、また GroupWaitingBehaviors を通して (Custom Agent Behavior を参照) 一緒にいようと試みます。

  • GroupAttractionStrength - DesiredGroupRadius を超えている場合に、グループ メンバーがどれぐらいの力で引き寄せられるか。
  • DesiredGroupRadius - グループ メンバーをこれぐらいの近さまで一緒に留めようとする。

エージェント パス検出

プレーヤーとは異なり、クラウド エージェントはレベルに対する衝突チェックを行わず、パスネットワークに依存してレベルジオメトリの通り抜けを回避します。さらに、ネットワーク内のパスに平行に移動する傾向にあります。パス検出は、パフォーマンス コストを伴うため、直接到達できるような目的地間を行き来するエージェントに関しては、パス検出を無効化するほうがより効率的です。

  • bUseNavMeshPathing - True の場合、navmesh をパスに使用する。
  • FollowPathStrength - エージェントがパス方向に沿った (ターゲットに向かっての) 'flow' (流れ) を強制される度合い。

エージェント回転

以下のプロパティは、移動中のエージェント回転をコントロールします。

  • MaxYawRate - クラウド エージェントは移動方向に向かって回転します。この値により、回転速度が速くなりすぎないように、どれだけ速く回転できるかを制限します。
  • bAllowPitching - エージェントが、現在の移動方向に向かって回転すると同時に飛び降りるかどうか。

以下のプロパティは、エージェントが *GameCrowdDestination * で止まった際に、エージェント回転をコントロールします。

  • RotateToTargetSpeed - 「ターゲット」アクションの発生時にエージェントを CrowdAttractor に向かって回転させ、その回転速度を制御する。
  • MaxTargetAcquireTime - アニメーションを再生する前に、ターゲットに向かって回転しようとする最大時間。

Conforming To Ground (地面に合わせる)

前述のとおり、エージェントを起伏のあるサーフェスに合わせることができます。これには、垂直方向のゼロ エクステント ラインチェックを使用します。このアプローチには「ステップの最大高さ (段差)」の概念はないため、急勾配または垂直のサーフェスは正しく処理されません。デフォルトで、エージェントは、navmesh のサーフェスに準拠します。特別な例に関しては、その代わりに BSP や、すべてのワールド ジオメトリに準拠させることもできます。

  • ConformType - エージェントがどのようにサーフェスに準拠するか。
  • GroundOffset - 地面からエージェントの中心までの距離 (足の位置を調節するのに使用)。
  • ConformTraceDist - エージェントを BSP/ワールドに準拠させるのに、どのぐらい遠くまでトレースするか。
  • ConformTraceInterval - 「準拠」ラインチェックが、いくつのフレームごとに行われるか。

クラウド シミュレーション LOD

ビジュアル LOD とは別に、クラウド エージェントは、プレイヤーと可視性からの距離に基づいて、シミュレーションを調節します。現在、エージェント アーキタイプのシミュレーション LOD 微調整を可能にする 2 つのプロパティが公開されています。

  • NotVisibleLifeSpan - このエージェントが見えない場合、抹殺するまでにどれぐらいの時間待つか。
  • NotVisibleTickScalingFactor - エージェントが見えない場合のエージェント tick のスケーリング ファクタ。
  • ProximityLODDist - 非可視性のエージェントの近接チェックを LOD アウトする距離。
  • VisibleProximityLODDist - 可視性のエージェントの近接チェックを LOD アウトする距離。
  • MaxAnimationDistance - このエージェントがアニメーション化されるべきカメラからの最大距離。
  • MaxLOSLifeDistance - エージェントが NotVisibleLifeSpan でレンダーされておらず、まだプレーヤーの視線の中に潜在的に存在している場合にエージェントをそばに置いておくときの最大距離。

カスタム エージェントの挙動

デフォルトのエージェントの挙動は、GameCrowdDestinations 間の移動です。このデフォルトの挙動は、「プラグイン」挙動システムを使用することにより、オーバーライドできます。デザイナーは、GameCrowdAgentBehavior クラス (これは Object サブクラスなので、検索するには、クラス ブラウザで "Actor classes only (Actor クラスのみ)" のチェックをはずしてください) に基づく Behavior Archetypes を作成することにより、さまざまなゲーム イベントに基づいてトリガする挙動を割り当てることができます。ベース クラウド システムには、いくつかの基本的な挙動クラスが実装されており、ゲーム プロジェクトに追加のゲーム固有の挙動を作成することができます。これらの挙動は、挙動アーキタイプでデザイナーがカスタマイズすることができます。詳細は、以下の GameCrowdAgentBehavior 入力を参照してください。

エージェント挙動が完了する、またはストップし、そのエージェントに他の挙動が割り当てられていない場合は、エージェントは、デフォルトの挙動である GameCrowdDestinations 間の移動に戻ります。

挙動アーキタイプは、エージェント アーキタイプ BehaviorEntry 配列に、または GameCrowdDestination ReachedBehavior BehaviorEntry 配列に割り当てられています。適切なゲーム イベントがトリガされると、エージェントは、そのイベントで可能性のある挙動のリストから、挙動を割り当てられます。各 BehaviorEntry には、以下の編集可能なプロパティがあります。

  • BehaviorArchetype - GameCrowdAgentBehavior クラスに基づくアーキタイプ。
  • BehaviorFrequency - この挙動が選ばれる頻度 = BehaviorFrequency/(BehaviorFrequencies の和)。
  • bNeverRepeat - True の場合、エージェントはこの挙動を二度と繰り返さない。

以下の編集可能なプロパティは、エージェントの挙動をコントロールします。

  • EncounterAgentBehaviors - 他のエージェントに遭遇した際に選ぶ挙動 (現在挙動がない場合のみ)。これらの挙動は、エージェントが他のエージェントに両方ともがお互いを向いて(その AwareRadius 範囲で) 遭遇した場合にトリガされる。
  • GroupWaitingBehaviors - 他のグループ メンバーを待っている間に選ぶ挙動。
  • SeePlayerBehaviors - see player (プレイヤーを見つけた) の際に選ぶ挙動。
  • SeePlayerInterval - see player イベントがトリガされる頻度。0 の場合、再トリガされない。
  • SpawnBehaviors - エージェントがスポーンした際に選ぶ挙動。
  • PanicBehaviors - エージェントがパニックした際に選ぶ挙動。
  • RandomBehaviors - RandomBehaviorInterval でランダムに選ぶ挙動。
  • RandomBehaviorInterval - ランダム挙動の試みの間の平均時間 (プレイヤーにとって可視性で、現在の挙動がない場合のみ)。
  • Health - 死亡するまでにどのくらいのダメージにエージェントが耐えられるか。
  • DeathAnimNames - エージェントが死ぬ際に再生する可能性のあるアニメーション名のセット。
  • DeadBodyDuration - 死体が留まる時間。
  • bPreferVisibleDestination - 値がtrueならば、非 L.O.S. (視線)の目的地から出発する場合、プレーヤーへの視線をともなった目的地をエージェントが好む。
  • bPreferVisibleDestinationOnSpawn - 値が true ならば、スポーン後に選択される最初の目的地に、可視性の目的地が好まれる。

さらに、エージェント挙動は Kismet を通してコントロールすることができます (例えば、GameCrowdDestination に到達するエージェントによってトリガされます)。

エージェント挙動のデバッギング

ご自分のゲームの PlayerController クラスが GamePlayerController を派生していると仮定するならば、コンソールコマンドの CrowdDebug 1 によって、近くのエージェントの頭上においてエージェント情報の表示が有効化されます。ShowGameDebug コンソールコマンドによって、クラウド ポピュレーション マネージャーに関する統計情報が表示されます。また、stat crowd (統計クラウド) によって、クラウド システムのパフォーマンス統計情報が表示されます。

クラウド エージェントを破壊

クラウド エージェントを破壊するには、痛みを生じるボリュームを使用したり、 GameCrowdDestination に到達するエージェントを破壊するように設定することができます。エージェントが抹殺されると、 GameCrowdAgentSkeletalDeathAnimNames 配列からアニメーションを再生します。

GameCrowdAgents はダメージを受けることができ、体力がゼロ以下になると死にます。武器衝突を可能にするには、bEnableLineCheckWithBounds オプションを使用してください。これは、メッシュの境界ボックスに対してラインチェックを行います。これは、非常に概算ですが、さらなる CylinderComponent のコストや、よりコストのかかるボーンごとのヒット テストを避けることができます。

GameCrowdAgentBehavior


これは、エージェントのビヘイビアの基本クラスです。これらのビヘイビア クラスは、デザイナーによってカスタマイズされるビヘイビア アーキタイプを作成するための基礎となります。ベースのクラウドシステムには、基本的なビヘイビアが少数含まれています。ゲーム固有の追加ビヘイビアは、ゲームプレイプロ グラマーによって簡単に作成することができます。

ビヘイビア アーキタイプは、エージェントのアーキタイプまたは GameCrowdDestinations において、各種 BehaviorEntry 配列に追加されます。適切な配列から選択されたビヘイビアは、必要なゲームイベントが発生した時に、エージェントに適用されます。

  • bIdleBehavior - True の場合、エージェントはアイドルする (目的地間を移動しない)。
  • MaxPlayerDistance - この挙動を行うには、エージェントはプレイヤーからこの距離以内にいなければならない。
  • bFaceActionTargetFirst - True の場合、挙動を始める前にアクション ターゲットの方を向かなければならない。
  • bIsViralBehavior - True の場合、遭遇したエージェントに譲る。

GameCrowdBehavior_PlayAnimation

  • AnimationList - 再生するアニメーションのリスト。
  • BlendInTime - 次のアニメーションにブレンドする時間。
  • BlendOutTime - アニメーションからブレンド アウトする時間。
  • bUseRootMotion - ルート モーションを使用するかどうか。
  • bLookAtPlayer - True の場合、アニメーションを開始する前にプレイヤーの方を向く。
  • bLooping - True の場合、LoopIndex によって指定されたリストでアニメーションをループする。
  • LoopIndex - bLooping が True の場合、AnimationList でどのアニメーションをループするか。
  • LoopTime - bLooping が True の場合、アニメーションをループする時間。-1.0 == 無限
  • bBlendBetweenAnims - リスト内のアニメーション間でブレンドするべきかどうか。開始/終了でマッチしない場合は、True に設定する。

GameCrowdBehavior_RunFromPanic

これは、エージェントがパニックの原因から逃げ出し、遭遇する他のエージェントにウィルスのように影響を及ぼすような、非常に単純な実装です。このタイプの機能の用例実装として意図されました。

GameCrowdBehavior_WaitInQueue

この挙動は、キュー ポイントを持つ目的地に関連しているので、レベル デザイナーの使用に公開されていません。

GameCrowdBehavior_WaitForGroup

この単純な挙動は、エージェントの GroupWaitingBehaviors に追加されるアーキタイプの土台となるのを目的としています。この挙動を使用するエージェントは、アイドルし、待っている相手のエージェントが十分近づいてくるまで、そのエージェントの方を向きます。

GameCrowdInteractionPoint


以下のすべてのクラウド インタラクション ポイント クラスは、有効化/無効化することができます。

  • bIsEnabled - この interactionpoint が現在有効化されている場合。

GameCrowdDestination

GameCrowdDestinations は、クラウド エージェントの目的地として機能し、またその目的地に到達したエージェントのカスタマイズされた挙動を実装することもできます。エディタで選択された GameCrowdDestinations は、目的地 ( NextDestinations リスト内) に接続されたラインを表示します。複数の GameCrowdDestinations を選択し、[Ctrl] + [Shift] + [L] を押してそれらを接続します (それらをお互いの NextDestinations 配列に追加します)。複数の GameCrowdDestinations を選択し、[Ctrl] + [Shift] + [U] を押すと、接続を切り離します。

  • bKillWhenReached - True の場合、目的地に到達したクラウド メンバーをキルする。
  • NextDestinations - アクティブな目的地のこのリストからランダムに選択し、エージェントの次の目的地とする。
  • bAllowAsPreviousDestination - のリストにある場合、エージェントの以前の目的地が目的地として使用されるかどうか。
  • Capacity - これを同時に目的地とすることができるエージェントの数。
  • QueueHead - 目的地に定員の制限がある場合、並んで待つエージェントの最初の位置。この値を設定するエディタのショートカットは以下を参照。
  • Frequency - 以前の目的地で、リストからこの目的地をエージェントが選択する可能性。
  • bAvoidWhenPanicked - パニックになったら、この目的地に行く。
  • bFleeDestination - この目的地の中心に到達しなければいけない。近くに寄ると移動を強制する。
  • bSkipBehaviorIfPanicked - パニックしていると、この目的地で Kismet またはカスタム挙動を行わない。
  • bMustReachExactly - 常にこの目的地に向かって走る。
  • bSoftPerimeter - エージェントが目的地の半径のエッジに到達する (きちんと到達しなかった場合) と止まるかどうか、または「ソフト」な外周を持つかどうか。
  • InteractionTag - インタラクションのタイプ。
  • InteractionDelay - エージェントがこの種のインタラクションを再び許可されるまでの時間。
  • ReachedBehaviors - この目的地に到達するエージェントは、このリストから挙動を選ぶ。

以下の配列は、どのエージェントが GameCrowdDestination を使用するかに制限をかけるのに使用します。これらの配列に入力が何もない場合、どのエージェントでもこの目的地を使用できます。 SupportedAgentClasses または SupportedAgentArchetypes に何らかの入力がある場合、エージェントは必須条件にマッチする場合のみ、目的地を使用します。「サポートされた」必須条件にパスする場合 (どちらの配列にも入力がない場合は、常にパスします)、これは RestrictedAgentClassesRestrictedArchetypes 配列のクラスやアーキタイプに属していてはいけません。

  • SupportedAgentClasses - 設定されていると、このクラスのエージェントのみが、この目的地を使用できる。
  • SupportedArchetypes - 設定されていると、このアーキタイプからのエージェントが、この目的地を使用できる。
  • RestrictedAgentClasses - 設定されていると、このクラスのエージェントが、この目的地を使用できない。
  • RestrictedArchetypes - 設定されていると、このアーキタイプからのエージェントが、この目的地を使用できない。

また GameCrowdDestination は、目的地でスポーンしたエージェントのスポーン位置を指定するカスタム機能を提供します。

  • bLineSpawner - 円というよりも線でスポーンする。
  • SpawnRadius - エージェントをスポーンするスポーン ポイント場所の半径。
  • bSpawnAtEdge - 円のエッジのみでエージェントをスポーンするか、それとも円内のどこでもスポーンするか。
  • bAllowsSpawning - この目的地において、スポーンがそもそも許可されるかどうか。

GameCrowdInteractionDestination

GameCrowdInteractionDestinations には、独特の機能はありません。これは、カスタムバージョンのインタラクションの目的地に通常必要とされる設定を持つ、 GameCrowdDestination サブクラスです。つまり、最大定員が 1 で、パニック中のエージェントには無視されるものです。

GameCrowdDestinationQueuePoint

GameCrowdDestinationQueuePoints は、限られた定員を持つ目的地で、エージェントが並ぶことを許可するのに使用します。

  • NextQueuePosition - ここから後ろの列の待ち位置。設定のためのエディタのショートカットは以下を参照。
  • AverageReactionTime - 並ぶという行動にエージェントが反応するまでの平均一時停止時間。

複数の GameCrowdDestinationQueuePoints と 1 つの GameCrowdDestination を選択し、[Ctrl] + [Shift] + [L] を押すと、それらを一番近い待ち行列ポイントから一番遠い待ち行列ポイントまで接続します。

SeqEvent_CrowdAgentReachedDestination


この Kismet イベントは、特定の GameCrowdDestination と関連付けられていて、その目的地にエージェントが到達すると発動されます。

SeqAct_PlayAgentAnimation


この Kismet アクションは、エージェントが止まっている間に一連のアニメーションを再生させるのに使用します。エージェントは、このアクションを完了すると、自動的に現在の挙動に戻ります (デフォルトでこれは、目的地間の移動です)。

エージェントのアニメーション再生アクションには、以下の入力があります。

  • Play - 再生されるアニメーションを開始する。
  • Stop - 現在のアニメーションを止める。
  • Target - このアクションが呼び出されたエージェント。
  • Action Focus - このアクションを実行している間にエージェントが向く方向にいるアクタ。

エージェントのアニメーション再生アクションには、以下の出力があります。

  • Finished - アクションが完了する際のイベント。
  • Stopped - アクションが止められる際のイベント。
  • Started - アクションが開始される際のイベント。
  • Out Agent - 一番最近このアクションを実行したエージェント。

エージェントのアニメーション再生アクションには、以下の編集可能なプロパティがあります。

  • AnimationList - このノードにいる間に再生するアニメーションのリスト。
  • BlendInTime - 次のアニメーションにブレンドする時間。
  • BlendOutTime - アニメーションからブレンド アウトする時間。
  • bUseRootMotion - ルート モーションを使用するかどうか。
  • bFaceActionTargetFirst - True の場合、アニメーションを始める前にアクション ターゲットの方を向く。
  • bLooping - True の場合、LoopIndex によって指定されたリストでアニメーションをループする。
  • LoopIndex - bLooping が True の場合、AnimationList でどのアニメーションをループするか。
  • LoopTime - bLooping が True の場合、アニメーションをループする時間。-1.0 == 無限
  • bBlendBetweenAnims - リスト内のアニメーション間でブレンドするべきかどうか。開始/終了で一致しない場合は、True に設定する。

ダウンロード


  • サンプルのマップは、 ここ からダウンロードできます。