UDN
Search public documentation:

CrowdSystemKR
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 홈 > AI 와 내비게이션 > 크라우드 시스템
UE3 홈 > 레벨 디자이너 > 크라우드 시스템
UE3 홈 > 시네마틱 아티스트 > 크라우드 시스템

크라우드 시스템


문서 변경내역: Steven Polge 작성. James Tan 수정. 홍성진 번역.

개요


이 문서는 GameFramework 패키지에 새로이 구현된 크라우드(Crowd, 군중) 시스템에 대한 설명서입니다. Old Crowd System KR 문서에 설명된 예전 언리얼 엔진 3 크라우드 시스템을 대체합니다.

이 크라우드 시스템은 레벨 디자이너가 맵에 애니메이션 캐릭터 군중을 추가하고, 크라우드 목적지와 키즈멧 상호작용 네트워크를 통해 그 이동이나 애니메이션을 제어할 수 있도록 하기 위함입니다. 에이전트 종류는 아키타입을 사용하여 정의하며, "플러그-인" 행위 시스템을 통해 크라우드 에이전트가 플레이어나 다른 NPC 와 어떻게 상호작용하도록 할지를, 레벨 디자이너가 제어할 수 있습니다.

현재 엔진에는 크라우드 전용 렌더링 최적화가 되어있지 않습니다. 크라우드 구성원 하나마다 별도의 애님트리와 스켈레탈 메시 인스턴스가 들어갑니다. 그러나 캐릭터 시뮬레이션의 가장 비싼 부분, 언리얼 보행 물리나 AI 부분은 사용하지 않습니다. 보행 물리 다음으로 가장 비싼 부분은, 크라우드 메시의 그래픽 버텍스 전부에 스킨을 입히는 작업이므로, 사용되는 스켈레탈 메시의 폴리곤이나 본 수는 가급적 작게 (저희는 보통 폴리곤 1000-1500 개, 본 20 개) 하는 것이 좋습니다. LOD 도 적극적으로 활용해야 할 것입니다.

작동 원리


위에 언급한 대로, 크라우드 '에이전트'는 Pawn (폰)이 아니며, PHYS_Walking 을 사용하지 않습니다. 그 대신 단순한 규칙 집합을 따르는 운동 모델을 사용합니다. 한 가지 꼭 기억해야 할 점은, 레벨 지오메트리에 대해 충돌 처리를 하지 않는다 는 점입니다. 그 대신 맵의 지형을 뚫고 다니지 않도록 내비게이션 메시를 따라 이동합니다. 고르지 않은 표면에 발을 맞출 수 있도록, 저렴한 비용의 0-규모(zero-extent) 선 검사를 하기도 합니다.

모든 게임 전용 구현은 최소한 비-추상형 크라우드 스포너나 파퓰레이션 매니저, 그리고 크라우드 에이전트 클래스를 포함하게 됩니다. 예를 들어 UTGame 에는, UT 전용 크라우드 스포너 키즈멧 SeqAct_UTCrowdSpawner 시퀸스 액션, UT 에이전트 아키타입의 베이스 클래스로 사용되는 크라우드 에이전트 클래스 UTGaemCrowdAgent 등, 크라우드 시스템의 아주 기본적인 구현이 포함되어 있습니다.

Crowd > Population Manager Toggle 키즈멧 시퀸스 액션


이 키즈멧 액션은 크라우드 파퓰레이션 매니저를 켜고 끄는 데 사용됩니다. 한 번에 활성화되는 파퓰레이션 매니저는 딱 하나 뿐입니다. 수초 후 플레이어의 위치를 예상하여 현재 플레이어에게 보이지 않는 GameCrowdDestinations (게임 크라우드 목적지) 사이사이마다 새로운 에이전트를 스폰시켜 플레이어 주변을 에이전트로 채우고, 플레이어에게 더이상 보이지 않게 되거나 관련이 없어진 "오래된" 에이전트를 제거하여 일정한 에이전트 수를 유지합니다.

입력 링크

  • Start 시작 - 파퓰레이션 매니저를 켭니다. 이 토글 액션의 editable (수정가능) 프로퍼티에 따라 그 프로퍼티를 업데이트합니다.
  • Stop 멈춤 - 파퓰레이션 매니저를 끕니다.

스폰할 에이전트 지정

파퓰레이션 매니저는 여러 종류의 에이전트를, 각 종류마다 빈도를 달리하여 스폰시킬 수 있습니다. 스폰시킬 에이전트 종류는 GameCrowd_ListOfAgents 아키타입으로 지정하여, 각기 다른 스포너나 파퓰레이션 매니저에서 그 목록을 쉽게 재사용할 수 있습니다. 이 목록 안에서, 에이전트의 종류는 아키타입을 이용해서 지정하며, 그 방법은 에이전트 아키타입 부분에 설명되어 있습니다. 각 아키타입의 스폰 빈도는 그에 연결된 FrequencyModifier 에 영향을 받습니다. 특정 아키타입이 선택될 확률은 해당 FrequencyModifier 를 모든 FrequencyModifier 총합으로 나눈 것과 같습니다.

에이전트 아키타입 항목에 GroupMembers 가 지정된 경우, 이러한 아키타입을 기반으로 하는 에이전트가 스폰되어 주요 에이전트 그룹으로 묶입니다. 그룹 에이전트는 함께 움직이지, 줄지어 움직이지는 않(기에 목적지에 전체 그룹이 들어갈 공간이 있어야 하겠)습니다.

  • CrowdAgentList 크라우드 에이전트 목록 - 이 파퓰레이션 매니저가 스폰할 에이전트 아키타입 목록입니다.
  • bClearOldArchetypes 예전 아키타입 비우기 - 참이면, 예전 파퓰레이션 매니저 아키타입 목록에 이 토글 액션의 CrowdAgentList 를 더하기 보다는, 그냥 지웁니다.

스폰

에이전트 스폰은 파티클 시스템과 비슷한 식으로 이루어지나, 레벨에 하나 이상의 액터를 사용하여 에이전트 스폰 위치를 지정해야 합니다. 그 액터는 보통 GameCrowdDestinations 이지만, (에이전트가 지정된 위치 사이를 왔다갔다하게 할 것이 아니라면) 어떤 종류의 액터도 괜찮습니다.

  • SpawnRate 스폰 속도 - 초당 몇 마리의 에이전트를 스폰시킬지 입니다.
  • MaxAgents 최대 에이전트 - 최대 몇 마리의 에이전트가 나오도록 할지 입니다. 에이전트가 소멸되면 소멸된 만큼, 이 수치를 맞추기 위해 추가 스폰됩니다.
  • WarmupPct 워밍업 퍼센트 - 파퓰레이션 매니저를 켰을 때, 최대 수치의 몇 퍼센트까지 (표시여부 검사를 따르지 않고) 즉시 스폰시킬지 입니다. 범위는 0.0 에서 1.0 까지 입니다.
  • bKillAgentsInstantly 에이전트 즉시 죽임 - 참이면, 연관성을 잃는 에이전트가 서서히 죽도록 내버려 두지 않고, 파퓰레이션 매니저가 꺼짐과 동시에 모든 크라우드 에이전트를 즉시 소멸시킵니다.
  • MaxSimulationDistance 최대 시뮬레이션 거리 - 카메라에서 최대 이 거리까지 파퓰레이션을 시뮬레이션합니다.

그래픽과 애니메이션

크라우드 에이전트는 표준 UE3 애니메이션 시스템을 사용합니다. 라이팅에는 (폰과 마찬가지로) 라이트 인바이언먼트를 사용하나, 속도상의 이유로 크라우드 스포너로 덮어쓰지 않는 이상 기본적으로 동적인 그림자를 드리우지 않습니다. 에이전트가 사용하는 메시와 애니메이션은 그 아키타입으로 정의하며, 그에 대해서는 나중에 설명하겠습니다.

  • bEnableCrowdLightEnvironment 크라우드 라이트 인바이언먼트 켜기 - 크라우드 멤버에 라이트 인바이언먼트를 사용하도록 할지 입니다.
  • bCastShadows 그림자 드리우기 - 크라우드 멤버가 그림자를 드리우도록 할지 입니다.

Crowd Spawner 키즈멧 액션


이는 잠복성(latent) 키즈멧 액션으로, 크라우드 에이전트를 스폰하는 데 사용됩니다. 스폰할 에이전트 아키타입에 대한 파라미터가 들어 있습니다.

입력 링크

  • Start 시작 - 크라우드 에이전트 스폰을 시작합니다.
  • Stop 멈춤 - 새 에이전트 스폰을 멈춥니다.
  • Destroy All 모두 소멸 - 이 액션이 스폰한 모든 에이전트를 (사망 애니메이션 재생 없이) 소멸시킵니다.
  • Spawn Points 스폰 지점 - 에이전트를 스폰시킬 위치입니다. 보통 GameCrowdDestination 이지만, (에이전트가 지정된 위치 사이를 왔다갔다하게 할 것이 아니라면) 어떤 종류의 액터도 괜찮습니다.

출력 링크

  • Agent Spawned 에이전트 스폰됨 - 에이전트 스폰시 발동됩니다.
  • Spawned Agent 스폰된 에이전트 - 지난 번 스폰된 에이전트를 출력합니다.

스폰할 에이전트 지정

크라우드 스포너는 각 에이전트 종류마다 빈도를 달리하여 여러 종류의 에이전트를 스폰시킬 수 있습니다. 스폰시킬 에이전트 종류 집합은 GameCrowd_ListOfAgents 으로 지정하며, 그 덕에 각기 다른 스포너나 파퓰레이션 매니저에서 목록을 쉽게 재사용할 수 있습니다. 이 목록 안에는 아키타입을 사용하여 에이전트 종류가 지정되며, 그 방법은 에이전트 아키타입 부분에 설명되어 있습니다. 각 아키타입의 스폰 빈도는 그와 연관된 FrequencyModifier 에 영향을 받습니다. 특정 아키타입이 선택될 확률은, 그 FrequencyModifier 를 전체 FrequencyModifier 총합으로 나눈 것과 같습니다.

에이전트 아키타입 항목에 GroupMembers 가 지정된 경우, 이 아키타입에 따라 에이전트를 스폰하여 주요 에이전트 그룹으로 묶습니다. 그룹 에이전트는 함께 이동하지, 줄을 지어 이동하지 않(기에, 목적지에 전체 그룹이 들어갈 공간이 있어야 하겠)습니다.

  • CrowdAgentList 크라우드 에이전트 목록 - 이 크라우드 스포너가 스폰한 에이전트 아키타입 목록입니다.

그래픽과 애니메이션

크라우드 에이전트는 표준 UE3 애니메이션 시스템을 사용합니다. 라이팅에는 (폰과 마찬가지로) 라이트 인바이언먼트를 사용하나, 속도상의 이유로 크라우드 스포너로 덮어쓰지 않는 이상 기본적으로 동적인 그림자를 드리우지 않습니다. 에이전트가 사용하는 메시와 애니메이션은 그 아키타입으로 정의하며, 그에 대해서는 나중에 설명하겠습니다.

  • AgentLightingChannel 에이전트 라이팅 채널 - 에이전트를 넣을 라이팅 채널입니다.
  • bEnableCrowdLightEnvironment 크라우드 라이트 인바이언먼트 켜기 - 크라우드 멤버에 라이트 인바이언먼트를 사용하도록 할지 입니다.
  • bCastShadows 그림자 드리우기 - 크라우드 멤버가 그림자를 드리우도록 할지 입니다.

스폰

에이전트 스폰은 파티클 시스템과 비슷한 식으로 이루어지나, 레벨에 하나 이상의 액터를 사용하여 에이전트 스폰 위치를 지정해야 합니다. 그 액터는 보통 GameCrowdDestinations 이지만, (에이전트가 지정된 위치 사이를 왔다갔다하게 할 것이 아니라면) 어떤 종류의 액터도 괜찮습니다.

  • SpawnRate 스폰 속도 - 초당 몇 마리의 에이전트를 스폰시킬지 입니다.
  • SpawnNum 스폰 수 - 한 번에 살아있는 에이전트 최대 수입니다. 에이전트가 소멸되면, 이 수치를 맞추기 위해 추가 스폰됩니다.
  • SpawnRadius 스폰 반경 - 타겟 액터 주변에 액터를 스폰시킬 반경입니다.
  • bOnlySpawnHidden 숨긴 상태로만 스폰 - 참이면, 플레이어가 스폰 지점을 볼 수 없을 때만 에이전트를 스폰합니다.
  • AgentWarmupTime 에이전트 워밍업 시간 - 렌더링되지 않는 에이전트를 평균적으로 얼마나 워밍업 시키다가 재울 것인지 입니다.
  • bRespawnDeadAgents 죽은 에이전트 다시 스폰 - 참이면, (날라가거나 해서) 완전히 제거된 에이전트를 다시 스폰시킵니다.
  • SplitScreenNumReduction 분할 화면 수 감소 - 분할화면에서 개체 수를 얼마나 줄일 것인지 입니다.
  • bCycleSpawnLocs 스폰 위치 순환 - 참이면, 스포너는 아무 스폰 위치에서가 아니라 돌아가면서 스폰시킵니다.
  • bWarmupPosition 위치 워밍업 - 참이면, 에이전트는 초기 스폰 위치와 초기 목적지 위치 사이 중 플레이어의 시선상에 있지 않은 임의의 지점에 시작 위치를 잡아 봅니다.

목적지로 이동

새로이 스폰되는 에이전트는 이동할 GameCrowdDestination (게임 크라우드 목적지)를 선택합니다. 이 목적지는 스폰 위치로 사용되는 GameCrowdDestination 내의 목적지 목록에서, 또는 크라우드 스포너의 Destinations 입력에 붙은 GameCrowdDestinations 중 하나에서 선택됩니다. 크라우드 스포너는 에이전트 아키타입의 기본 세팅을 덮어써, 강제로 (더 비싼) 내비게이션 메시 길찾기(path finding)와 장애물 가로막기(obstacle blocking)가 사용되도록 할 수도 있습니다.

ALERT! 주: 장애물 가로막기에는 현재 문제가 조금 있어, 사용하지 않는 것이 좋습니다. 장애물 가로막기가 없으면 길찾기를 사용해도 에이전트가 가끔 벽을 통과하거나 벽의 돌출부(ledge)에서 떨어지는 것이 보일 수가 있습니다.

  • bForceObstacleChecking 강제 장애물 검사 - 참이면, 이 스포너의 모든 에이전트에 장애물 검사를 강제로 시킵니다.
  • bForceNavMeshPathing 강제 내비 메시 길찾기 - 참이면, 이 스포너의 모든 에이전트에 내비 메시 길찾기를 강제로 켭니다.

GameCrowdAgent


크라우드 에이전트의 베이스 Actor 클래스입니다. 아티스트나 레벨 디자이너가 만들 수 있는 에이전트 아키타입은, GameCrowdAgent 의 게임 전용 서브클래스를 기반으로 합니다. 에이전트 아키타입에는 수정가능 프로퍼티가 다수 있습니다.

그래픽과 애니메이션

에이전트의 시각적인 면은 아키타입으로 지정합니다. 전형적인 크라우드 멤버는 GameCrowdAgentSkeletal 서브클래스 기반 아키타입으로 스켈레탈 애니메이션 메시를 사용합니다.

  • SkeletalMeshComponent 스켈레탈 메시 컴포넌트 - 크라우드 멤버 메시에 사용되는 스켈레탈 메시 컴포넌트입니다. 에이전트가 사용하는 메시, 애님트리 템플릿, 애니메이션 세트를 설정해 주어야 합니다.
  • WalkAnimNames 걷기 애님 이름 - 천천히 움직일 때 사용할 애니메이션 루프 이름입니다.
  • RunAnimNames 뛰기 애님 이름 - 빠르게 움직일 때 사용할 애니메이션 이름입니다.
  • MeshMinScale3D, MeshMaxScale3D 메시 최소/최대 스케일 3D - 에이전트 메시에 적용할 3D 드로스케일 범위입니다.
  • AmbientSoundCue 배경음 사운드큐 - 이 에이전트에 재생할 배경음 사운드큐 입니다.

루트 모션 속도(아래 설명된 bUseRootMotionVelocity) 를 사용하지 않고, 에이전트의 애님트리에 SpeedBlendNode 가 있을 때만 에이전트 애니메이션에 효과를 발휘하는 프로퍼티입니다.

  • SpeedBlendStart 블렌딩 시작 속도 - 이 속도보다 느려지면 걷기 애니메이션을 사용합니다.
  • SpeedBlendEnd 블렌딩 끝 속도 - 이 속도보다 빨라지면 뛰기 애니메이션을 사용합니다. SpeedBlendStart 와 SpeedBlendEnd 사이에서 애니메이션이 블렌딩됩니다.
  • AnimVelRate 애님 속도 비율 - 에이전트의 속력에 따른 애니메이션 재생 속도 변화율을 조절합니다.
  • MaxSpeedBlendChangeSpeed 최대 속력 블렌딩 변화 속도 - 뛰기와 걷기 사이의 블렌딩 최대 속도를 제한합니다.
  • MoveSyncGroupName 이동 싱크 그룹 이름 - 속도 스케일이 조절되는 이동 싱크 그룹 이름입니다.

에이전트 애니메이션 코드는 에이전트의 애님트리 구성에 있어 일정한 가정을 합니다. SpeedBlendNode, ActionBlendNode, ActionSeqNode, WalkSeqNode, RunSeqNode 라는 이름의 애니메이션 노드와 아울러, 모든 지원 기능 구현을 위해 bIsPanicked AnimNodeBlendByProperty 노드 역시도 있을 것으로 기대합니다.

에이전트 부착(attachment)

에이전트 아키타입은 Attachments 배열에 지정된 임의의 부착물을 포함시켜 스폰시킬 수도 있습니다.

  • Attachments 부착 - 에이전트에 붙일 메시 집합 목록입니다.
    • SocketName 소켓 이름 - 메시를 붙일 소켓 이름입니다.
      • List 목록 - 이 소켓에 붙일 수 있는 메시 목록입니다.
        • StaticMesh 스태틱 메시 - 붙일 메시입니다.
        • Chance 확률 - 이 부착물이 선택될 확률입니다.
        • Scale3D 스케일 3D - 붙일 때 메시에 적용할 스케일입니다.

이동

크라우드 에이전트가 따를 규칙으로, 각 세팅은 각각에 관계된 에이전트 아키타입에 있습니다. 각 규칙은 에이전트에 적용되는 힘을 만들어 냅니다. 현재 에이전트 이동 시스템은 에이전트를 집단 이동하는 파티클로 취급합니다. 앞으로 에이전트 이동은 역(reciprocal) 속도 장애물을 사용하는 시스템으로 옮겨 갈 것입니다 (http://gamma.cs.unc.edu/RVO/icra2008.pdf).

장애물 회피

에이전트는 일반적인 충돌 검사를 하지 않으므로, 레벨 지오메트리를 뚫고 지나다닙니다. 내비게이션 메시를 사용하여 장애물 검사를 하게 하는 옵션이 있는데, 에이전트가 지오메트리를 뚫고 다니거나 돌출부에서 떨어지는 것을 방지할 수 있습니다. 내비게이션 메시 길찾기를 사용한다면, 장애물 검사 없이도 보통 에이전트는 잘 돌아다닙니다.

  • bCheckForObstacles 장애물 확인 - 장애물 메시가 에이전트를 막게 할 것인지 입니다.

속도 제한

루트 모션 속도를 사용하면 시각적으로 최적의 결과물을 얻을 수 있습니다. 루트 모션을 필요로 하지요. 이 옵션을 통해 에이전트의 운동은 일반적으로 그 애니메이션에 일치되며, 장애물이나 급회전 때문에 더 느리게 이동해야 하는 경우는 예외입니다.

  • bUseRootMotionVelocity 루트 모션 속도 사용 - 참이면, 운동 애니메이션 내 루트 모션에 따라 속도를 제한시킵니다.

다음 프로퍼티는 루트 모션 속도를 사용하지 않을 때만 효과가 있습니다.

  • bClampMovementSpeed 이동 속력 제한 - 이동 속력을 제한할 것인지 입니다.
  • MaxWalkingSpeed 최대 걷기 속력 - 최대 걷기 속력입니다.
  • MaxRunningSpeed 최대 뛰기 속력 - 최대 뛰기 속력입니다.
  • VelocityDamping 속도 제동 - 에이전트의 최대 속력 제한을 위해 적용할 힘입니다. '마찰력' 으로 생각해도 됩니다.

인접 에이전트 회피

에이전트는 인접한 에이전트와 폰을 모두 피합니다. 현재, 에이전트 사이의 충돌을 피하는 데는 단순한 스프링 힘을 사용합니다. bWarnCrowdMembers 가 참으로 설정된 플레이어 콘트롤러에서 파생된 GamePlayerController 를 사용하는 플레이어는, 에이전트의 보다 정확한 회피를 위해 매 틱마다 크라우드 멤버의 위치를 업데이트합니다.

  • AwareRadius 인지 반경 - 주변 얼마만큼의 에이전트를 통해 평균 속력을 구할지를 조절합니다.
  • AvoidOtherStrength 타인 회피 세기 - 에이전트가 겹칠때 얼마나 세게 밀어낼지 입니다.
  • AvoidPlayerStrength 플레이어 회피 세기 - 에이전트가 플레이어한테 밀렸을 때 얼마나 세게 밀려날지 입니다.
  • AvoidOtherRadius 타인 회피 반경 - 에이전트가 겹쳤는지 검사하는 데 사용할 반경 (즉 에이전트의 크기)입니다.
  • AwareUpdateInterval 인지 갱신 주기 - 에이전트의 (어트랙터나 다른 에이전트) '인지력' 을 몇 프레임마다 업데이트시킬지 입니다.

주변 속도로 이동

에이전트는 주변 에이전트의 평균 속도로 이동을 시도합니다.

  • MatchVelStrength 일치 속도 세기 - 에이전트가 주변 속력에 얼마나 적극적으로 보조를 맞출지 입니다.

그룹 유지

그룹 에이전트는 (SeqAct_GameCrowdSpawner 의 GroupMembers 참고) 같이 뭉쳐 있으려 하며, 그를 조정하는 것은 다음 두 프로퍼티와 GroupWaitingBehaviors 를 통해서입니다 (커스텀 에이전트 행위 참고).

  • GroupAttractionStrength 그룹 인력 세기 - DesiredGroupRadius 을 넘어간 그룹 구성원을 얼마나 세게 잡아당길지 입니다.
  • DesiredGroupRadius 바라는 그룹 반경 - 그룹 구성원을 이 범위 안에 있도록 합니다.

에이전트 길찾기

크라우드 에이전트는 플레이어처럼 레벨에 충돌 검사를 하지 않기 때문에, 지형을 뚫고 다니지 못하도록 하려면 내비게이션 메시를 통한 길찾기에 의존해야 합니다. 길찾기에는 약간의 퍼포먼스 비용이 있으니, 직접 도달할 수 있는 목적지를 이동하는 에이전트에 대해서는 길찾기를 끄는 것이 좋습니다.

  • bUseNavMeshPathing 내비 메시 길찾기 사용 - 참이면, 길찾기에 내비 메시를 사용합니다.
  • FollowPathStrength 길 따라가기 세기 - 에이전트가 (타겟 방향으로) 경로를 따라갈 때의 가속도입니다.

에이전트 로테이션

다음 프로퍼티는 에이전트 이동시의 로테이션을 제어합니다.

  • MaxYawRate 최대 요 비율 - 크라우드는 이동 방향을 향하도록 회전합니다. 이 값은 그 과정의 속도를 제한시켜, 너무 빨리 돌지 않도록 합니다.
  • bAllowPitching 피치 허용 - 에이전트가 현재 이동 방향으로 회전하는 와중에도 피치(상하) 조정을 허용할지 입니다.

다음 프로퍼티는 GameCrowdDestination 에 멈췄을 때의 에이전트 로테이션을 제어합니다.

  • RotateToTargetSpeed 타겟으로 회전 속력 - 에이전트가 타겟을 향하기 위해 회전하는 속도를 제어합니다.
  • MaxTargetAcquireTime 최대 타겟 포착 시간 - 최대 이 기간만큼 타겟으로 회전해 보다가 애니메이션을 재생합니다.

땅에 맞추기

앞서 말한 바대로, 옵션을 통해 수직 0-규모(zero-extent) 선 검사를 사용하여 에이전트를 고르지 않은 표면에 맞출 수 있습니다. 참고로 이 접근법에는 '최대 단 높이'(max step height) 개념이 없으므로, 아주 가파르거나 수직인 표면을 제대로 처리하지 못합니다. 기본적으로 에이전트는 내비메시의 표면에 맞추지만, 일부 특별한 경우 월드 지오메트리에 대신 맞추도록 하는 것도 가능합니다.

  • ConformType 일치 유형 - 에이전트를 표면에 맞추는 방식입니다.
  • GroundOffset 땅 이격 - 땅에서 에이전트 중심까지 (발 위치 조절에 사용되는) 거리입니다.
  • ConformTraceDist 일치 추적 거리 - 에이전트를 월드 지오메트리에 맞추기 위해 얼마나 멀리까지 추적할 것인지 입니다.
  • ConformTraceInterval 일치 추적 주기 - '일치' 선 검사를 몇 프레임마다 실시할지 입니다.

크라우드 시뮬레이션 LOD

시각 LOD 와는 별도로, 크라우드 에이전트는 플레이어와의 거리와 보이는지에 따라 시뮬레이션을 조절합니다. 현재 에이전트 아키타입의 시뮬레이션 LOD 트윅을 위해 노출된 프로퍼티는 여섯입니다.

  • NotVisibleLifeSpan 보이지 않을 때의 수명 - 이 에이전트가 보이지 않게 되고서 이만큼이 지나면 죽입니다.
  • NotVisibleTickScalingFactor 보이지 않을 때의 틱 스케일 인수 - 보이지 않게 된 에이전트의 틱에 적용할 스케일 인수입니다.
  • ProximityLODDist 근접성 LOD 거리 - 보이지 않는 에이전트에 대한 근접성 검사시 LOD 를 빼낼 거리입니다.
  • VisibleProximityLODDist 보이는 근접성 LOD 거리 - 보이는 에이전트에 대한 근접성 검사시 LOD 를 빼낼 거리입니다.
  • MaxAnimationDistance 최대 애니메이션 거리 - 카메라와의 거리가 최대 이 안에 있는 에이전트는 애니메이션을 재생시킵니다.
  • MaxLOSLifeDistance 최대 시선 수명 거리 - NotVisibleLifeSpan 만큼 렌더되지는 않았어도 여전히 플레이어의 시선에 있을 수 있는 에이전트를, 최대 어느 거리까지 살려둘 것인지 입니다.

커스텀 에이전트 행위

에이전트의 기본 행위는 GameCrowdDestination 사이를 움직이는 것입니다. 이러한 기본 행위는 "플러그-인" 행위 시스템을 사용하여 덮어쓸 수 있습니다. 디자이너는 GameCrowdAgentBehavior 클래스를 기반으로 Behavior Archetype 을 만들어서, 여러가지 게임 이벤트 발생시 특정 행위가 발동되도록 할당할 수 있습니다. (참고로 GameCrowdAgentBehavior 클래스는 Object 의 서브클래스이므로, 클래스 브라우저에서 찾으려면 "액터 클래스만?" 체크를 해제해야 합니다.) 기본 크라우드 시스템에는 여러가지 기본적인 행위 클래스가 구현되어 있으며, 일정한 게임 프로젝트에 대해 전용 행위를 추가할 수도 있습니다. 그리고나서 이러한 행위는 아키타입으로 디자이너가 커스터마이징 가능합니다. 자세한 것은 아래 GameCrowdAgentBehavior 부분을 참고하시기 바랍니다.

에이전트의 행위가 끝나거나 중지되었는데, 별달리 할당된 행위가 없는 경우, 에이전트는 GameCrowdDestination 사이를 돌아다니는 기본 행위로 돌아갑니다.

행위 아키타입은 에이전트 아키타입 BehaviorEntry 배열이나, GameCrowdDestination ReachedBehavior BehaviorEntry 배열에 할당됩니다. 적합한 게임 이벤트가 발동되면, 에이전트는 해당 이벤트에 대해 가능한 행위 목록에서 행위를 할당받습니다. 각 BehaviorEntry 에는 다음과 같은 수정가능 프로퍼티가 있습니다:

  • BehaviorArchetype 행위 아키타입 - GameCrowdAgentBehavior 클래스를 기반으로 하는 아키타입 입니다.
  • BehaviorFrequency 행위 빈도 - 이 행위의 선택 빈도입니다. = BehaviorFrequency/(모든 BehaviorFrequency 합계).
  • bNeverRepeat 반복 안함 - 참이면, 에이전트는 절대 이런 행위를 하지 않습니다.

다음 수정가능 프로퍼티는 에이전트의 행위를 제어합니다.

  • EncounterAgentBehaviors 에이전트 조우 행위 - (현재 다른 행위가 없을 때만) 다른 에이전트를 만났을 때 선택할 행위입니다. 이 행위는 다른 에이전트를 서로 마주본 상태로 (AwareRadius (인지 반경) 안에서) 만났을 때 발동됩니다.
  • GroupWaitingBehaviors 그룹 대기 행위 - 다른 그룹 구성원을 기다릴 때 선택할 행위입니다.
  • SeePlayerBehaviors 플레이어 목격 행위 - 플레이어를 볼 때 선택할 행위입니다.
  • SeePlayerInterval 플레이어 목격 주기 - 플레이어 목격 이벤트가 얼마나 자주 발동되게 할 것인가 입니다. 0 이면 다시 발동되지 않습니다.
  • SpawnBehaviors 스폰 행위 - 에이전트가 스폰될 때 선택할 행위입니다.
  • PanicBehaviors 공포 행위 - 에이전트가 공포, 패닉에 빠졌을 때 선택할 행위입니다.
  • RandomBehaviors 랜덤 행위 - RandomBehaviorInterval 마다 임의로 선택할 행위입니다.
  • RandomBehaviorInterval 랜덤 행위 주기 - (플레이어에게 보이고 현재 행위가 없을 때만) 평균 이 만큼의 기간마다 랜덤 행위를 재시도합니다.
  • Health 체력 - 에이전트가 죽기 전까지 버틸 수 있는 피해량입니다.
  • DeathAnimNames 사망 애님 이름 - 에이전트가 죽을 때 재생할 수 있는 애니메이션 이름 집합입니다.
  • DeadBodyDuration 사체 지속 기간 - 사체가 얼마나 나뒹굴도록 할지 입니다.
  • bPreferVisibleDestination 보이는 목적지 선호 - 참이면, 에이전트는 플레이어의 시선 밖 목적지에서 시작한 경우 플레이어 시선상의 목적지를 선호합니다.
  • bPreferVisibleDestinationOnSpawn 스폰시 보이는 목적지 선호 - 참이면, 스폰 직후 첫 목적지 선택에 보이는 목적지를 선호합니다.

에이전트 행위는 키즈멧을 통해서도 (예를 들어 GameCrowdDestination 에 도착하는 에이전트에 의해 발동되는 키즈멧 액션으로) 추가 제어 가능합니다.

에이전트 행위 디버깅

게임의 PlayerController 클래스가 GamePlayerController 에서 파생되었다 가정할 때, 'CrowdDebug 1' 콘솔 명령은 근처 에이전트의 머리 위에 에이전트 정보 표시를 켭니다. 'ShowGameDebug' 콘솔 명령은 크라우드 파퓰레이션 매니저에 대한 통계 정보를, 'stat crowd' 는 크라우드 시스템 퍼포먼스 통계를 표시합니다.

에이전트 죽이기

크라우드 에이전트를 없애려면 피해를 입히는 볼륨을 사용하거나, GameCrowdDestination 의 설정을 통해서도 도달하는 에이전트를 없앨 수 있습니다. GameCrowdAgentSkeletal 은 죽을 때 그 DeathAnimNames 배열에서 애니메이션을 재생합니다.

GameCrowdAgents 역시 피해를 입을 수 있으며, 체력이 0 아래로 내려가면 죽습니다. 무기 충돌을 위해 bEnableLineCheckWithBounds (바운드 선 검사 켜기) 옵션을 사용하는데, 메시의 바운딩 박스를 대상으로 선 검사를 하는 옵션입니다. 이는 아주 대략적인 추정치이지만, 실린더 컴포넌트 비용이 추가되거나 좀 더 비싼 본-단위 적중 검사를 하지 않아도 됩니다.

GameCrowdAgentBehavior


에이전트 행위에 대한 베이스 클래스입니다. 이 행위 클래스는 디자이너가 커스터마이징 행위 아키타입을 만드는 데 있어 기본이 됩니다. 베이스 크라우드 시스템에도 기본 행위가 약간 포함되어 있으며, 게임플레이 프로그래머가 게임에서 쓰이는 행위를 쉽게 만들 수 있습니다.

행위 아키타입은 에이전트 아키타입이나 GameCrowdDestinations 안의 다양한 BehaviorEntry 배열에 추가됩니다. 필요한 게임 이벤트 발생시 적합한 배열에서 선택된 행위가 에이전트에 적용됩니다.

  • bIdleBehavior 빈둥 행위 - 참이면, 에이전트는 (목적지 사이를 오가지 않고) 빈둥거립니다.
  • MaxPlayerDistance 최대 플레이어 거리 - 에이전트는 플레이어와의 거리가 이 안에 있을 때만 이 행위를 합니다.
  • bFaceActionTargetFirst 먼저 액션 타겟 향하기 - 참이면, 행위 시작 전 액션 타겟 쪽을 향하고 있어야 합니다.
  • bIsViralBehavior 전염 행위 - 참이면, 만난 에이전트에게 전달합니다.

GameCrowdBehavior_PlayAnimation

  • AnimationList 애니메이션 리스트 - 재생할 애니메이션 목록입니다.
  • BlendInTime 블렌드 인 시간 - 다음 애니메이션으로 블렌딩해 들어갈 시간입니다.
  • BlendOutTime 블렌드 아웃 시간 - 애니메이션에서 블렌딩해 나올 시간입니다.
  • bUseRootMotion 루트 모션 사용 - 루트 모션을 사용할지 입니다.
  • bLookAtPlayer 플레이어 바라보기 - 참이면, 애니메이션 시작 전 플레이어를 향합니다.
  • bLooping 루핑 - 참이면, LoopIndex 에 지정된 목록의 애니메이션을 되풀이합니다.
  • LoopIndex 루프 인덱스 - bLooping 이 참일 때, AnimationList 중 어느 것을 되풀이시킬지 입니다.
  • LoopTime 루프 시간 - bLooping 이 참일 때, 애니메이션을 되풀이시킬 기간입니다. -1.0 == 무한입니다.
  • bBlendBetweenAnims 애니메이션끼리 블렌딩 - 목록에 있는 애니메이션끼리 블렌딩을 할지 입니다. 시작과 끝이 일치하지 않는 경우 참으로 설정하십시오.

GameCrowdBehavior_RunFromPanic

에이전트가 공포 진원지에서 달아나면서 그 와중에 만난 다른 에이전트에게 전염시키는 것을 매우 단순화시켜 구현한 것입니다. 이런 종류의 기능에 대한 구현 예제로 의도된 것입니다.

GameCrowdBehavior_WaitInQueue

이 행위는 큐 포인트가 있는 목적지에 묶여 있어, 레벨 디자이너가 사용할 수 있게끔 노출되지 않습니다.

GameCrowdBehavior_WaitForGroup

에이전트의 GroupWaitingBehaviors 에 추가시킬 아키타입에 대한 기반으로 의도된 단순 행위입니다. 이 행위를 사용하는 에이전트는, 기다리는 에이전트가 가까이 올 때가지 그 쪽을 향한 채 빈둥거립니다.

GameCrowdInteractionPoint


다음 크라우드 상호작용 지점 클래스는 모두 켜고 끌 수 있습니다.

  • bIsEnabled 켜졌는지 - 이 상호작용 지점이 현재 켜졌는지 입니다.

GameCrowdDestination

GameCrowdDestinations 는 크라우드 에이전트의 목적지 역할을 하며, 도착한 에이전트에 대한 커스텀 행위를 구현할 수도 있습니다. 에디터에서 GameCrowdDestinations 가 선택되면 (NextDestinations 목록의 다음) 연결된 목적지에 선이 그려집니다. 여러 개의 GameCrowdDestinations 를 선택하고 ctrl-shift-L 키를 치면 (각각을 서로의 NextDestinations 배열에 넣어) 연결합니다. 여러 개의 GameCrowdDestinations 를 선택하고 ctrl-shift-U 키를 치면 연결을 끊습니다.

  • bKillWhenReached 도착시 죽임 - 참이면, 이 목적지에 도착한 크라우드 구성원을 죽입니다.
  • NextDestinations 다음 목적지 - 에이전트의 다음 목적지로 이 유효 목적지 목록에서 아무거나 선택합니다.
  • bAllowAsPreviousDestination 예전 목적지 허용 - 에이전트의 예전 목적지가 NextDestinations 에 있는 경우 다시 목적지로 사용할 수 있도록 할지 입니다.
  • Capacity 정원 - 최대 몇 마리의 에이전트가 동시에 이 목적지를 가질 수 있는지 입니다.
  • QueueHead 큐 선두 - 목적지에 정원이 있을 때 에이전트가 대기할 큐의 첫 번째 위치입니다. 에디터에서 이 값을 빠르게 설정하는 방법에 대해서는 아래 부분을 참고하십시오.
  • Frequency 빈도 - 에이전트가 전 목적지에서 다음 목적지로 이 목적지를 선택할 확률입니다.
  • bAvoidWhenPanicked 공포시엔 피함 - 공포시엔 이 목적지로 가지 않습니다.
  • bFleeDestination 도망 목적지 - 항상 이 목적지 쪽으로 도망갑니다.
  • bSkipBehaviorIfPanicked 공포시 행위 생략 - 이 목적지에서는 공포시 키즈멧이나 커스텀 행위를 하지 않습니다.
  • bMustReachExactly 반드시 정확히 도착 - 반드시 이 목적지의 중앙에 정확히 도착해야 하며, 가까이 가면 강제로 이동됩니다.
  • bSoftPerimeter 부드러운 경계 - 에이전트가 (정확히 도착이 아닌 경우) 목적지 반경에 도착하면 가장자리에 딱 멈추게 할지, 대충 그쯤 멈추게 할지 입니다.
  • InteractionTag 상호작용 태그 - 상호작용 유형입니다.
  • InteractionDelay 상호작용 지연 - 에이전트가 이런 유형의 상호작용을 재시도하기 위해 기다려야 하는 시간입니다.
  • ReachedBehaviors 도착 행위 - 이 목적지에 도착한 에이전트는 이 목록에서 행위를 선택합니다.

다음 배열은 GameCrowdDestination 를 사용할 수 있는 에이전트를 제한시키는 데 사용할 수 있습니다. 이 배열 중 어느 것에도 항목이 없으면, 어느 에이전트도 이 목적지를 사용할 수 있습니다. SupportedAgentClassesSupportedAgentArchetypes (지원 에이전트 클래스나 아키타입) 배열에 항목이 있는 경우, 조건이 맞는 에이전트만 이 목적지를 사용할 수 있습니다. "Suppoerted", 지원 조건을 통과한 경우 (두 배열에 항목이 없다면 항상 그렇겠죠), RestrictedAgentClassesRestrictedArchetypes (제한 에이전트 클래스나 아키타입) 배열에 있는 클래스나 아키타입에 속해서는 안됩니다.

  • SupportedAgentClasses 지원 에이전트 클래스 - 설정되면, 이 클래스의 에이전트만 이 목적지를 사용할 수 있습니다.
  • SupportedArchetypes 지원 아키타입 - 설정되면, 이 아키타입에서의 에이전트만 이 목적지를 사용할 수 있습니다.
  • RestrictedAgentClasses 제한 에이전트 클래스 - 설정되면, 이 클래스의 에이전트는 이 목적지를 사용할 수 없습니다.
  • RestrictedArchetypes 제한 아키타입 - 설정되면, 이 아키타입에서의 에이전트는 이 목적지를 사용할 수 없습니다.

GameCrowdDestination 에는 목적지에서 스폰되는 에이전트의 스폰 위치를 지정하는 커스텀 함수성도 약간 제공됩니다.

  • bLineSpawner 선 스포너 - 원 보다는 선 모양으로 스폰합니다.
  • SpawnRadius 스폰 반경 - 에이전트를 스폰시킬 스폰 지점 위치 주변 반경입니다.
  • bSpawnAtEdge 가장자리에 스폰 - 에이전트 스폰 위치를 원 가장자리에 할지, 원 안 아무 곳에나 할지 입니다.
  • bAllowsSpawning 스폰 허용 - 이 목적지에 스폰 자체를 허용할지 말지 입니다.

GameCrowdInteractionDestination

GameCrowdInteractionDestinations 는 독특한 함수성이 없습니다. 단순히 GameCrowdDestination 의 서브클래스로, 목적지의 정원이나 공포 에이전트에 무시되는 목적지 등과 같은 커스텀 상호작용에 전형적으로 필요한 세팅이 들어 있습니다.

GameCrowdDestinationQueuePoint

GameCrowdDestinationQueuePoints 는 에이전트가 정원이 있는 목적지의 큐(대기열) 기능을 합니다.

  • NextQueuePosition 다음 큐 위치 - 직선상에 이 지점 뒤의 큐 위치입니다. 에디터에서 이 값을 빠르게 설정하는 법에 대해서는 아래 부분을 참고하십시오.
  • AverageReactionTime 평균 반응 시간 - 에이전트가 큐 이동에 반응하기 전의 평균 일시정지 시간입니다.

여러 개의 GameCrowdDestinationQueuePoints 와 하나의 GameCrowdDestination 를 선택한 다음 ctrl-shift-L 키를 치면, 가장 가까이서부터 가장 멀리 있는 지점까지 큐로 연결됩니다.

SeqEvent_CrowdAgentReachedDestination


이 키즈멧 이벤트는 특정 GameCrowdDestination 와 관련되어, 에이전트가 그 목적지에 도착하면 발동됩니다.

SeqAct_PlayAgentAnimation


이 키즈멧 액션은 에이전트가 멈춰 있을 때 애니메이션 시리즈를 재생하도록 하는 데 사용됩니다. 에이전트는 이 액션을 마치면 자동으로 현재(, 기본으로는 목적지 사이를 오가는) 행위로 돌아갑니다.

Play Agent Animation 액션의 입력은 다음과 같습니다.

  • Play 재생 - 재생중인 애니메이션을 시작합니다.
  • Stop 중지 - 현재 애니메이션을 중지합니다.
  • Target 타겟 - 이 액션을 호출하고 있는 에이전트입니다.
  • Action Focus 액션 포커스 - 에이전트가 이 액션을 하고 있을 때 바라봐야 하는 액터입니다.

Play Agent Animation 액션의 출력은 다음과 같습니다.

  • Finished 완료됨 - 액션 완료시의 이벤트입니다.
  • Stopped 중지됨 - 액션 중지시의 이벤트입니다.
  • Started 시작됨 - 액션 시작시의 이벤트입니다.
  • Out Agent 출력 에이전트 - 가장 최근에 이 액션을 하던 에이전트입니다.

Play Agent Animation 액션의 수정가능 프로퍼티는 다음과 같습니다.

  • AnimationList 애니메이션 리스트 - 이 노드에 있을 때 재생할 애니메이션 목록입니다.
  • BlendInTime 블렌드 인 시간 - 다음 애니메이션으로 블렌딩해 들어갈 시간입니다.
  • BlendOutTime 블렌드 아웃 시간 - 애니메이션에서 블렌딩해 나올 시간입니다.
  • bUseRootMotion 루트 모션 사용 - 루트 모션을 사용할지 입니다.
  • bFaceActionTargetFirst 먼저 액션 타겟 향하기 - 참이면, 행위 시작 전 액션 타겟 쪽을 향하고 있어야 합니다.
  • bLooping 루핑 - 참이면, LoopIndex 에 지정된 목록의 애니메이션을 되풀이합니다.
  • LoopIndex 루프 인덱스 - bLooping 이 참일 때, AnimationList 중 어느 것을 되풀이시킬지 입니다.
  • LoopTime 루프 시간 - bLooping 이 참일 때, 애니메이션을 되풀이시킬 기간입니다. -1.0 == 무한입니다.
  • bBlendBetweenAnims 애니메이션끼리 블렌딩 - 목록에 있는 애니메이션끼리 블렌딩을 할지 입니다. 시작과 끝이 일치하지 않는 경우 참으로 설정하십시오.

내려받기