UDN
Search public documentation:

CollisionTechnicalGuideKR
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 홈 > 스태틱 메시 > 콜리전 테크니컬 가이드
UE3 홈 > 피직스 > 콜리전 테크니컬 가이드
UE3 홈 > 배경 아티스트 > 콜리전 테크니컬 가이드

콜리전 테크니컬 가이드


문서 변경내역: Collision Reference KR 에서 분리. 홍성진 번역.

개요


그래픽 디테일이 풍부해 짐에 따라 게임 내부적으로는 콜리전을 간단하게 만드는 것이 중요합니다. 두 가지 이유때문에 그렇습니다. 폴리곤이 적어야 콜리전 계산도 빨라지고, 작은 지오메트리에 플레이어가 걸려버리면 짜증이 날테니, 부드러운 플레이 느낌을 위해서도 그렇습니다. 콜리전 반응은 언리얼 콜리전과 PhysX, 두 가지 부분으로 나뉩니다. 여기서는 언리얼 콜리전에 초점을 맞춥니다. PhysX 에 대한 것은 Physics Home KR 페이지를 확인하시기 바랍니다. 콜리전 데이터 생성에 관한 정보는 Collision Reference KR 페이지를 참고하시기 바랍니다.

언리얼스크립트


언리얼 콜리전은 언리얼 엔진 1 때, 대부분의 콜리전 반응을 언리얼스크립트로 처리하던 때로 거슬러 올라갑니다. 언리얼스크립트는 언리얼 콜리전 엔진이 이러한 액터 시뮬레이션 방식을 알 수 있도록 하기 위해 콜리전 프로퍼티 구성을 담당하기도 합니다.

액터 프로퍼티

콜리전 섹션 아래에는 액터 프로퍼티가 많이 있습니다. 이 프로퍼티는 언리얼 콜리전 엔진이 콜리전 반응과 그 액터의 피직스 시뮬레이션을 처리하는 방식을 제어합니다.

  • bCollideComplex 복잡한 콜리전 - 액터 이동 도중 이 액터의 단순화된 콜리전 헐(hull, 테두리)를 무시하고 폴리곤 별로 충돌합니다. 단순화된 콜리전 헐은 언리얼 에디터나 3D 콘텐츠 제작 프로그램 안에서 만듭니다. 폴리곤별 충돌은 총알이 정확히 충돌하도록 하기 위한 non-zero-extent(0규모가 아닌) 트레이스에 좋습니다. 폴리곤별 충돌은 비싸기때문에 액터 이동에는 추천하지 않습니다.
  • BlockRigidBody 리짓 바디 막기 - PhysX 를 사용하는 액터가 이 액터와 충돌할지 입니다.
  • bNoEncroachCheck 침입 검사 없음 - 이 액터를 움직일 때 침입 검사를 끄는 최적화입니다. 이 옵션을 켜면 게임 속도는 빨라지나, 액터는 트리거를 건드리거나, 플레이어를 밀거나, 볼륨에 들어가고 나오거나 하지 못하게 됩니다.
  • bPathColliding 패쓰 충돌 - 언리얼 에디터에서 패쓰를 빌드할 때 이 액터가 패쓰를 막을 수 있는지 입니다.
  • CollisionComponent 콜리전 컴포넌트 - 이 액터의 이동에 사용된 컴포넌트로의 리퍼런스입니다. 액터가 PHYS_Walking 을 사용중이라면, 이 컴포넌트의 축 정렬된 바운딩 박스는 레벨에 대해 충돌합니다. 액터가 PHYS_RigidBody 를 사용중이라면, 이 컴포넌트의 셰이프(형태)나 피직스 애셋이 사용됩니다.
  • CollisionType 콜리전 타입 - 레벨 디자이너에게 여러가지 콜리전 세팅을 단순한 방식으로 노출시키기 위한 방법입니다. 언리얼 에디터에서 이 값을 바꾸면 액터와 그 CollisionComponent 의 CollideActors, BlockActors, BlockNonZeroExtent, BlockZeroExtent, BlockRigidBody 같은 로우 레벨 플랙이 Collision Type 설명에 일치하도록 설정합니다.
    • COLLIDE_CustomDefault 커스텀 디폴트 - 프로그래머 설정 콜리전입니다. 선택하면 콜리전을 default properties 의 디폴트 세트로 복원시킵니다.
    • COLLIDE_NoCollision 콜리전 없음 - 전혀 충돌하지 않습니다.
    • COLLIDE_BlockAll 모두 막기 - 모든 것을 막습니다.
    • COLLIDE_BlockWeapons 무기 막기 - 보통 무기를 말하는 zero-extent(0-규모) 트레이스만 막습니다.
    • COLLIDE_TouchAll 모두 건드리기 - 모두 건드리기는 하지만 막지는 않습니다.
    • COLLIDE_TouchWeapons 무기 건드리기 - 보통 무기를 말하는 0-규모 트레이스만 막습니다.
    • COLLIDE_BlockAllButWeapons 무기 말고 모두 막기 - 보통 무기를 말하는 0-규모 트레이스를 제외한 모든 것을 막습니다.
    • COLLIDE_TouchAllButWeapons 무기 말고 모두 건드리기 - 보통 무기를 말하는 0-규모 트레이스를 제외한 모든 것을 건드립니다. 막지는 않습니다.
    • COLLIDE_BlockWeaponsKickable 찰 수 있는 무기 막기 - 보통 무기를 말하는 0-규모 트레이스만 막습니다. 플레이어 주변으로 이 액터를 드리블할 수 있는 플랙을 켜기도 합니다.

콜리전 플랙

언리얼이 레벨에 놓인 액터와의 충돌 처리 방식을 조절하는 플랙은 여럿 있습니다. 가끔 한 플랙이 액터 프로퍼티와 컴포넌트 프로퍼티에 같이 나타나기도 합니다. 이 경우 액터의 것이 다른 것을 덮어씁니다.

  • CollideActors 액터 충돌 - 언리얼 콜리전 감지에 걸리게 할 액터에는 참이어야 합니다.
  • BlockActors 액터 막기 - 이 액터가 다른 액터의 이동을 막을지를 나타냅니다. 트리거를 예로 들면 액터 충돌, 액터 막기거짓 으로 설정해야 합니다. 왜냐면 언리얼이 두 액터간의 접촉을 감지는 하되, 이동하는 액터가 뚫고 지나갈 수 있도록 하기 위해서입니다.
  • BlockZeroExtent 0-규모 막기 - 0-규모 트레이스는 선 검사로, 총알을 나타내는 무기에 흔히 사용됩니다. 이 옵션이 참이면 액터는 언리얼스크립트에서 사용되는 0-규모 트레이스를 막습니다.
  • BlockNonZeroExtent 0-이외-규모 막기 - 0-이외-규모 트레이스는 축 정렬된 바운딩 박스 검사로, 플레이어 이동에 흔히 사용됩니다. 이 옵션이 참이면 액터는 언리얼스크립트에서 사용되는 0-이외-규모 트레이스를 막습니다.

언리얼스크립트 이벤트

언리얼 엔진 3 에서 충돌이 발생할 때, 관계된 액터에서 언리얼스크립트 이벤트가 호출됩니다. 이 이벤트는 서브클래스 액터 안에서 이벤트를 덮어쓸 수 있도록 하기 위해 고안된 것입니다. ALERT! 언리얼스크립트에서 이벤트와 함수는 차이점이 없습니다.

HitWall

HitWall (벽에 닿음)은 액터가 물리적으로 Wall 에 충돌할 때 호출됩니다. (BSP 의 경우 Wall 은 WorldInfo 로 설정됩니다.)
  • HitNormal - 액터에 닿은 벽의 노멀입니다.
  • Wall - 이 액터가 충돌한 액터입니다.
  • WallComp - 이 액터가 충돌한 컴포넌트입니다. BSP 의 경우 WallComp 는 None 으로 설정됩니다.

Actor.uc
event HitWall(Vector HitNormal, Actor Wall, PrimitiveComponent WallComp)

중요한 점 한가지, Pawn 은 이 이벤트 호출 방식을 바꿔도 됩니다. bDirectHitWall 을 참으로 설정하면 항상 폰의 HitWall 이벤트를 직접 호출합니다.

Pawn.uc
var bool bDirectHitWall;

중요한 점 또 한가지, Pawn 의 Controller 역시 HitWall 호출 방식을 바꿔도 됩니다.

NotifyHitWall 은 폰과 막는 월드 지오메트리 조각이 충돌했을 때 호출되며, 폰에서의 HitWall() 통지를 막기 위해 참을 반환합니다.

  • HitNormal - 액터에 닿은 벽의 노멀입니다.
  • Wall - 이 액터와 충돌한 액터입니다.

Controller.uc
event bool NotifyHitWall(vector HitNormal, actor Wall);

폰이 떨어질 때 월드 지오메트리 막는 조각과 충돌했을 때, NotifyFallingHitWall 이 호출됩니다. Controller 내 bNotifyFallingHitWall 이 참일 때만 호출됩니다.

  • HitNormal - 액터에 닿은 벽의 노멀입니다.
  • Wall - 이 액터와 충돌한 액터입니다.

Controller.uc
event NotifyFallingHitWall(vector HitNormal, actor Wall);

Landed

Landed (착지)는 액터가 FloorActor 에 물리적으로 착지했을 때 호출됩니다. (BSP 의 경우 FloorActor 는 WorldInfo 로 설정됩니다)
  • HitNormal - 착지 지점의 노멀입니다.
  • FloorActor - 이 액터가 착지한 액터입니다.

Actor.uc
event Landed(vector HitNormal, Actor FloorActor);

중요한 점 한가지, Pawn 의 Controller 에서 Landed 호출 방식을 변경해도 됩니다.

NotifyLanded 는 폰이 낙하시 착지할 때 호출되며, 폰의 Landed() 통지를 막기 위해 호출됩니다.

  • HitNormal - 착지 지점의 노멀입니다.
  • FloorActor - 이 액터가 착지한 액터입니다.

Controller.uc
event bool NotifyLanded(vector HitNormal, Actor FloorActor);

PhysicsVolumeChange

이 이벤트는 PhysicsVolume 변수가 바뀔 때 트리거됩니다.
  • NewVolume - PhysicsVolume 이 설정된 볼륨입니다.

Actor.uc
event PhysicsVolumeChange(PhysicsVolume NewVolume);

Touch

Touch (터치)는 Actor 와 Other 가 서로 접할 때 두 액터 모두에서 호출됩니다. Actor 와 Other 둘 다 충돌 가능해야 하며, Actor 나 Other 중 하나는 블로킹 콜리전 이외의 것을 사용해야 합니다.
  • Other - 이 액터와 접한 액터입니다.
  • OtherComp - 이 액터와 접한 컴포넌트입니다.
  • HitLocation - 터치가 발생한 월드 위치입니다.
  • HitNormal - 터치가 발생한 지점의 노멀입니다.

Actor.uc
event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal);

PostTouch

PostTouch (터치 이후)는 피직스 완료 이후 PendingTouch (보류 터치) 액터에서 호출됩니다. PendingTouch 액터는 이동 이벤트 도중 터치된 액터로, 이동이 끝난 후 이펙트를 추가하려는 것을 말합니다. 두 액터 모두 충돌가능해야 하며, 액터 중 하나는 블로킹 콜리전 이외의 것을 사용해야 합니다.
  • Other - PendingTouch 액터입니다.

Actor.uc
event PostTouch(Actor Other);

UnTouch

UnTouch (언터치)는 Other 와 접촉이 떨어진 액터에서 호출됩니다. 예를 들어 플레이어의 폰이 트리거에 처음 접한 경우, 플레이어의 폰과 트리거 모두 Touch 이벤트를 받습니다. 플레이어의 폰이 트리거에서 멀어져 콜리전이 더이상 접하지 않게 된 경우, 플레이어의 폰은 Other 파라미터를 Trigger 로 설정한 채로 UnTouch 를 호출합니다. Actor 와 Other 모두 충돌 가능해야 하며, Actor 나 Other 중 하나는 블로킹 콜리전 이외의 것을 사용해야 합니다.
  • Other - 언터치된 액터입니다.

Actor.uc
event UnTouch(Actor Other);

Bump

Bump (범프)는 Actor 와 Other 가 서로 부딪힐 때 그 둘 다에서 호출됩니다. Actor 와 Other 둘 다 충돌 가능에다 블로킹 콜리전을 사용해야 합니다.
  • Other - 이 액터와 부딪힌 액터입니다.
  • OtherComp - 이 액터와 부딪힌 컴포넌트입니다.
  • HitNormal - 부딪힌 지점의 노멀입니다.

Actor.uc
event Bump(Actor Other, PrimitiveComponent OtherComp, Vector HitNormal);

중요한 점 한가지, Pawn 의 Controller 에서 Bump 호출 방식을 변경해도 됩니다.

NotifyBump 는 폰과 블로킹 플레이어가 충돌했을 때 호출되며, 폰에서의 Bump() 통지를 막기 위해 참을 반환합니다.

Controller.uc
event bool NotifyBump(Actor Other, Vector HitNormal);

BaseChange

BaseChange (베이스 변경)은 액터의 Base 변수가 변경되었을 때 호출됩니다. 여기에는 Base 가 None 으로 설정될 때도 포함되는데, 액터가 공중에 떠 있다든가 하는 경우입니다. Base 변수는 액터가 현재 딛고 서 있는 것을 가리키는 액터 리퍼런스 입니다.

Actor.uc
event BaseChange();

CollisionChanged

CollisionChanged (콜리전 변경)은 액터의 콜리전 프로퍼티가 변경된 것이 있을 때 호출됩니다.

Actor.uc
event CollisionChanged();

EncroachingOn

EncroachingOn (칩임)은 Actor 가 Other 에 침입했는데, Other 를 밀어낼 위치를 찾을 수 없을 때 호출됩니다.
  • Other - 이 액터가 침입하고 있는 액터입니다.
  • Return - 이동을 취소하려면 참을, 허용하려면 거짓을 반환하십시오. ALERT! PHYS_RigidBody 액터의 이동은 취소시키지 않습니다. 언리얼 위치와 피직스 엔진 위치가 틀어지기 때문입니다.

Actor.uc
event bool EncroachingOn(Actor Other);

EncroachedBy

Actor.uc
event EncroachedBy(Actor Other);

RanInto

RanInto 는 침입한 액터가 다른 액터를 성공적으로 밀어냈을 때 호출됩니다.
  • Other - 밀려난 액터입니다.

Actor.uc
event RanInto(Actor Other);

콜리전 검사하기

Trace

월드의 어떤 것과 선에 충돌하는 것이 있는지 감지해 내기 위해 트레이스를 합니다.
  • HitLocation - 월드의 어디에 선이 충돌했는지 입니다.
  • HitNormal - 선이 충돌한 곳의 표면 노멀입니다.
  • TraceEnd - 트레이스가 끝난 곳의 월드 지점입니다.
  • TraceStart - 트레이스가 시작된 월드 지점입니다.
  • bTraceActors - 액터에 대해 트레이스를 할지 말지 입니다.
  • Extent - 이 벡터가 0 (Vect[0.f, 0.f, 0.f]) 이면 트레이스는 0-규모(zero extent)로 간주됩니다. 벡터가 0 이 아니라면, 0-이외-규모(non zero extent) 트레이스를 합니다.
  • HitInfo - 이 구조체에는 트레이스 결과에 대한 정보가 들어 있습니다. 트레이스에 충돌한 것이 아무 것도 없을 땐 무효화되어 있을 수도 있습니다.
    • Material - 트레이스에 맞은 머티리얼입니다.
    • PhysMaterial - 트레이스에 맞은 피지컬 머티리얼입니다.
    • Item - 트레이스에 맞은 것에 대한 추가 정보입니다.
    • LevelIndex - 트레이스가 BSP 에 맞은 경우 레벨 인덱스입니다.
    • BoneName - 트레이스가 스켈레탈 메시 컴포넌트에 맞은 경우 본 이름입니다.
    • HitComponent - 트레이스에 맞은 컴포넌트입니다.
  • ExtraTraceFlags - 트레이스를 어떻게 해야 할 지 알려주는 추가 트레이스 플랙입니다.
    • TRACEFLAG_Bullet - 트레이스는 항상 스태틱 메시의 단순 콜리전을 무시하며, 항상 폴리곤별로 충돌 감지합니다.
    • TRACEFLAG_PhysicsVolumes - 트레이스는 피직스 볼륨을 대상으로 충돌 검사를 합니다.
    • TRACEFLAG_SkipMovers - 트레이스는 InterpActor 를 무시합니다.
    • TRACEFLAG_Blocking - 설정되면, 트레이스는 검사 액터(, 즉 Trace 를 호출한 액터)와 모든 충돌하는 것을 막을 수 있는 액터에 충돌합니다. 모든 충돌하는 것이란, 레벨 지오메트리, 폰, 보간 액터, 다른 종류의 액터, 터레인, 볼륨 등이 포함됩니다.
  • Returned Actor - 트레이스가 액터 리퍼런스를 반환합니다. None 이 반환되면 트레이스에 걸린 것이 없다는 뜻입니다. 트레이스에 BSP 가 걸리면, 반환되는 액터는 WorldInfo 입니다. 그 외의 경우, 트레이스는 걸린 액터를 반환합니다.

Actor.uc
function Actor Trace(out Vector   HitLocation, out Vector HitNormal, Vector TraceEnd, optional Vector TraceStart, optional bool bTraceActors, optional Vector Extent, optional out TraceHitInfo HitInfo, optional int ExtraTraceFlags);

TraceComponent

InComponent 에 대한 트레이스만 합니다. 트레이스에 맞으면 참을 반환합니다. 액터가 맞았는지 아닌지 더욱 정밀히 결정하고자 할 때 좋습니다.
  • HitLocation - 월드에 선이 충돌한 곳입니다.
  • HitNormal - 선이 충돌한 표면의 노멀입니다.
  • InComponent - 트레이스를 실행할 컴포넌트입니다.
  • TraceEnd - 트레이스가 끝나는 월드 지점입니다.
  • TraceStart - 트레이스가 시작되는 월드 지점입니다.
  • Extent - 이 벡터가 0 (Vect[0.f, 0.f, 0.f]) 이면 트레이스는 0-규모(zero extent)로 간주됩니다. 벡터가 0 이 아니라면, 0-이외-규모(non zero extent) 트레이스를 합니다.
  • HitInfo - 트레이스 결과에 대한 정보가 들어있는 구조체입니다. 트레이스에 충돌한 것이 아무 것도 없을 땐 무효화되어 있을 수도 있습니다.
    • Material - 트레이스에 맞은 머티리얼입니다.
    • PhysMaterial - 트레이스에 맞은 피지컬 머티리얼입니다.
    • Item - 트레이스에 맞은 것에 대한 추가 정보입니다.
    • LevelIndex - 트레이스가 BSP 에 맞은 경우 레벨 인덱스입니다.
    • BoneName - 트레이스가 스켈레탈 메시 컴포넌트에 맞은 경우 본 이름입니다.
    • HitComponent - 트레이스에 맞은 컴포넌트입니다.
  • bComplexCollision - 폴리곤별 콜리전을 사용하려면 참으로 설정하십시오.

Actor.uc
function bool TraceComponent(out Vector HitLocation, out Vector HitNormal, PrimitiveComponent InComponent, Vector TraceEnd, optional Vector TraceStart, optional Vector Extent, optional out TraceHitInfo HitInfo, optional bool bComplexCollision)

FastTrace

월드에 트레이스를 하여 아무 것에도 걸리지 않으면 참을 반환합니다. 한 액터가 다른 액터의 시선상에 있는지 빠르게 확인할 때 좋습니다.
  • TraceEnd - 트레이스가 끝나는 월드 지점입니다.
  • TraceStart - 트레이스가 시작되는 월드 지점입니다.
  • BoxExtent - 이 벡터가 0 (Vect[0.f, 0.f, 0.f]) 이면 트레이스는 0-규모(zero extent)로 간주됩니다. 벡터가 0 이 아니라면, 0-이외-규모(non zero extent) 트레이스를 합니다.
  • bTraceBullet - 트레이스가 총알처럼 작용하게 하려면 참으로 설정하십시오.

Actor.uc
function bool FastTrace(Vector TraceEnd, optional Vector TraceStart, optional Vector BoxExtent, optional bool bTraceBullet);

TraceAllPhysicsAssetInteractions

스켈레탈 메시 컴포넌트의 피직스 애셋에 대해 월드 안에서 트레이스를 하고, 걸리는 모든 것을 반환합니다.
  • SkelMeshComp - 트레이스 검사 대상 스켈레탈 메시 컴포넌트 입니다.
  • EndTrace - 트레이스가 끝나는 월드 지점입니다.
  • StartTrace - 트레이스가 시작되는 월드 지점입니다.
  • out_Hits - 트레이스 결과에 대한 정보가 담긴 배열을 출력합니다.
    • HitActor - 걸린 액터입니다.
    • HitLocation - 트레이스가 걸린 곳의 월드 위치입니다.
    • HitNormal - 트레이스가 걸린 곳의 노멀입니다.
    • RayDir - 트레이스 방향입니다.
    • StartTrace - 트레이스가 시작된 곳의 월드 위치입니다.
    • HitInfo - 트레이스 결과에 대한 정보가 담긴 구조체입니다. 트레이스에 걸린 것이 아무것도 없으면 무효화될 수도 있습니다.
      • Material - 트레이스에 걸린 머티리얼입니다.
      • PhysMaterial - 트레이스에 걸린 피지컬 머티리얼입니다.
      • Item - 트레이스에 걸린 것에 대한 추가 정보입니다.
      • LevelIndex - 트레이스에 BSP 가 걸린 경우 레벨 인덱스입니다.
      • BoneName - 트레이스에 스켈레탈 메시 컴포넌트가 걸린 경우 본 이름입니다.
      • HitComponent - 트레이스에 걸린 컴포넌트입니다.
  • Extent - 이 벡터가 0 (Vect[0.f, 0.f, 0.f]) 이면 트레이스는 0-규모(zero extent)로 간주됩니다. 벡터가 0 이 아니라면, 0-이외-규모(non zero extent) 트레이스를 합니다.
  • 걸린 것이 있으면 참을 반환합니다.

Actor.uc
function bool TraceAllPhysicsAssetInteractions(SkeletalMeshComponent SkelMeshComp, Vector EndTrace, Vector StartTrace, out Array<ImpactInfo> out_Hits, optional Vector Extent);

IsOverlapping

액터가 A 에 겹치면 참을 반환합니다.
  • A - 겹치는지 확인할 검사 대상 액터입니다.

Actor.uc
function bool IsOverlapping(Actor A);

GetBoundingCylinder

가능하다면 바운딩 실린더의 반경과 높이를 반환합니다.
  • CollisionRadius - 콜리전 반경입니다.
  • CollisionHeight - 콜리전 높이입니다.

Actor.uc
function GetBoundingCylinder(out float CollisionRadius, out float CollisionHeight) const;

IsBlockedBy

Actor 가 Other 에 막혔으면 참을 반환합니다.
  • Other - 이 액터를 막고 있는지 검사할 다른 액터입니다.

Actor.uc
function bool IsBlockedBy(const Actor Other) const;

TouchingActors

이 액터에 접하고 있는 액터를 전부 반환하는 이터레이터(반복처리) 함수입니다.
  • BaseClass - 반환할 액터의 클래스입니다.
  • Actor - 선과 충돌한 액터입니다.

Actor.uc
iterator function TouchingActors(class<Actor> BaseClass, out Actor Actor);

TraceActors

월드의 두 지점 사이의 모든 액터, TranceHitInfo 를 반환하는 이터레이터 함수입니다. 특정 액터 유형이나 다른 조건을 포함 또는 배제시킨 선 검사를 하는 데 좋습니다.
  • BaseClass - 반환할 액터의 클래스입니다.
  • Actor - 선과 충돌한 액터입니다.
  • HitLoc - 선과 충돌한 월드 지점입니다.
  • HitNorm - 선이 충돌한 표면 노멀입니다.
  • End - 트레이스가 끝나는 월드 지점입니다.
  • Start - 트레이스가 시작되는 월드 지점입니다.
  • Extent - 이 벡터가 0 (Vect[0.f, 0.f, 0.f]) 이면 트레이스는 0-규모(zero extent)로 간주됩니다. 벡터가 0 이 아니라면, 0-이외-규모(non zero extent) 트레이스를 합니다.
  • HitInfo - 트레이스 결과에 대한 정보가 담긴 구조체입니다. 트레이스와 충돌한 것이 아무것도 없는 경우 무효화될 수도 있습니다.
    • Material - 트레이스에 맞은 머티리얼입니다.
    • PhysMaterial - 트레이스에 맞은 피지컬 머티리얼입니다.
    • Item - 트레이스에 맞은 것에 대한 추가 정보입니다.
    • LevelIndex - 트레이스가 BSP 에 맞은 경우 레벨 인덱스입니다.
    • BoneName - 트레이스가 스켈레탈 메시 컴포넌트에 맞은 경우 본 이름입니다.
    • HitComponent - 트레이스에 맞은 컴포넌트입니다.
  • ExtraTraceFlags - 트레이스를 어떻게 계산해야 할 지 힌트를 주는 추가 트레이스 플랙입니다.
    • TRACEFLAG_Bullet - 트레이스가 총알처럼 작용합니다.

Actor.uc
iterator function TraceActors(class<Actor> BaseClass, out Actor Actor, out Vector HitLoc, out Vector HitNorm, Vector End, optional Vector Start, optional Vector Extent, optional out TraceHitInfo HitInfo, optional int ExtraTraceFlags);

VisibleCollidingActors

(디폴트로 호출자의) 위치에서 그 액터 위치까지의 트레이스가 월드에 걸리지 않은 경우, 일정 반경 내 충돌하는 (bCollideActors 가 참으로 설정된) 액터를 전부 반환하는 이터레이터 함수입니다.
  • BaseClass - 반환할 액터의 클래스입니다.
  • Actor - 선과 충돌한 액터입니다.
  • Radius - 박스의 반경입니다.
  • Loc - 박스나 구체 중심이 있는 월드 위치입니다.
  • bIgnoreHidden - 숨은 액터를 무시할지 입니다.
  • Extent - 이 벡터가 0 (Vect[0.f, 0.f, 0.f]) 이면 트레이스는 0-규모(zero extent)로 간주됩니다. 벡터가 0 이 아니라면, 0-이외-규모(non zero extent) 트레이스를 합니다.
  • bTraceActors - 액터가 호출자에게 보이는지 확인하기 위해 시선 검사를 합니다.
  • InterfaceClass - 이 인터페이스를 구현하지 않는 액터를 제외시킵니다. None 이면 무시됩니다.
  • HitInfo - 트레이스 결과에 대한 정보가 담긴 구조체입니다. 트레이스에 아무것도 걸리지 않은 경우 무효화될 수도 있습니다.
    • Material - 트레이스에 맞은 머티리얼입니다.
    • PhysMaterial - 트레이스에 맞은 피지컬 머티리얼입니다.
    • Item - 트레이스에 맞은 것에 대한 추가 정보입니다.
    • LevelIndex - 트레이스가 BSP 에 맞은 경우 레벨 인덱스입니다.
    • BoneName - 트레이스가 스켈레탈 메시 컴포넌트에 맞은 경우 본 이름입니다.
    • HitComponent - 트레이스에 맞은 컴포넌트입니다.

Actor.uc
iterator function VisibleCollidingActors(class<Actor> BaseClass, out Actor Actor, float Radius, optional Vector Loc, optional bool bIgnoreHidden, optional Vector Extent, optional bool bTraceActors, optional class<Interface> InterfaceClass, optional out TraceHitInfo HitInfo);

CollidingActors

일정 범위 내 충돌하는 (bCollideActors 가 참으로 설정된) 액터를 반환하는 이터레이터 함수입니다. bUseOverlapCheck 는 오브젝트 중심이 구체 안에 있는지 확인하기 위한 검사를 할 때 박스가 아닌 구체 검사를 사용합니다.
  • BaseClass - 반환할 액터의 클래스입니다.
  • Actor - 선과 충돌한 액터입니다.
  • Radius - bUseOverlapCheck 에 따라 박스 또는 구체의 반경입니다.
  • Loc - 박스나 구체 중심이 있는 월드 위치입니다.
  • bUseOverlapCheck - 오브젝트의 중심이 구체 안에 놓이는지 확인하기 위한 검사를 할 때 박스가 아닌 구체 검사를 사용합니다.
  • InterfaceClass - 이 인터페이스를 구현하지 않는 액터를 제외시킵니다. None 이면 무시됩니다.
  • HitInfo - 트레이스 결과에 대한 정보가 담긴 구조체입니다. 트레이스에 아무것도 걸리지 않은 경우 무효화될 수도 있습니다.
    • Material - 트레이스에 맞은 머티리얼입니다.
    • PhysMaterial - 트레이스에 맞은 피지컬 머티리얼입니다.
    • Item - 트레이스에 맞은 것에 대한 추가 정보입니다.
    • LevelIndex - 트레이스가 BSP 에 맞은 경우 레벨 인덱스입니다.
    • BoneName - 트레이스가 스켈레탈 메시 컴포넌트에 맞은 경우 본 이름입니다.
    • HitComponent - 트레이스에 맞은 컴포넌트입니다.

Actor.uc
iterator function CollidingActors(class<Actor> BaseClass, out Actor Actor, float Radius, optional Vector Loc, optional bool bUseOverlapCheck, optional class<Interface> InterfaceClass, optional out TraceHitInfo HitInfo);

OverlappingActors

Loc 위치와 Radius 반경에서 구체와 겹치는 충돌 (bCollideActors 가 참으로 설정된) 액터를 반환하는 이터레이터 함수입니다.
  • BaseClass - 반환할 액터의 클래스입니다.
  • out_Actor - 각 반복처리마다 반환된 액터입니다.
  • Radius - 겹침 검사용 구체 반경입니다.
  • Loc - 겹침 검사용 구체 중심입니다. (옵션이며, 지정되지 않으면 호출자의 위치가 사용됩니다)
  • bIgnoreHidden - 참이면 bHidden 설정된 액터는 무시합니다.

Actor.uc
iterator function OverlappingActors(class<Actor> BaseClass, out Actor out_Actor, float Radius, optional Vector Loc, optional bool bIgnoreHidden);

콜리전 타입


게임에서 사용할 수 있는 콜리전 타입은 몇 됩니다. 그 대부분에서는 콜리전 헐로 닫힌 메시를 사용합니다.

스켈레탈 메시 콜리전 헐 만들기

스켈레탈 메시가 사용하는 콜리전 헐 제작법에 대해서는 PhAT User Guide KR 페이지를 참고하시기 바랍니다.

스태틱 메시 콜리전 헐 만들기

스태틱 메시 콜리전 헐은 스태틱 메시 일부로 저장됩니다. 스태틱 메시 콜리전 헐은 스태틱 메시와 같은 식으로 인스턴싱되므로, 블로킹 볼륨보다 메모리 측면에서 더욱 효율적입니다.

스태틱 메시 브라우저에서 콜리전 헐이 사용되는 방식에 대한 프로퍼티를 약간 바꿀 수 있습니다:

  • UseSimpleRigidBodyCollision 심플 리짓 바디 콜리전 사용 - 디폴트는 참입니다. 이 옵션이 참이고 콜리전 헐이 존재하면, 콜리전 헐은 컨벡스 헐 세트로 변환되어, 이 스태틱 메시에 대한 (비히클이나 래그돌 등) 피직스 오브젝트의 콜리전 계산에 사용됩니다. 심플 리짓 바디 콜리전 사용 옵션이 참이고 콜리전 헐이 없으면, 리짓 바디는 이 스태틱 메시와 충돌하지 않습니다. 심플 리짓 바디 콜리전 사용 을 거짓으로 하면, 피직스 엔진은 스태틱 메시의 폴리곤 별로 충돌시킵니다. 스태틱 메시 폴리곤이 꽤 클 경우에만 이 옵션을 사용하십시오.
  • UseSimpleBoxCollision 심플 박스 콜리전 사용 - 디폴트는 참입니다. 이 옵션이 참이면 콜리전 헐은 (있을 경우) 0-이외-규모(non zero extent) 선 검사에 사용됩니다. 플레이어 이동같은 것은 포함되지만, 무기 발사는 아닙니다. 이 옵션이 참이고 콜리전 헐이 있는 경우 폴리곤별 콜리전은 사용되지 않습니다. 심플 박스 콜리전 사용 을 거짓으로 설정하면, 폴리곤별 콜리전은 머티리얼에 따라 사용됩니다. 머티리얼에 대한 콜리전을 끄는 방법은, Materials 배열을 끌어내리고 EnableCollision 을 거짓으로 설정하면 됩니다. 콜리전 헐이 없을 때는 심플 박스 콜리전 사용 을 참으로 설정해도 콜리전이 없습니다.
  • UseSimpleLineCollision 심플 라인 콜리전 사용 - 디폴트는 참입니다. 이 옵션이 참이면 콜리전 헐은 (있을 경우) 0-규모(zero extent) 선 검사에 사용됩니다. 여기에는 대부분의 무기 발사, 렌즈 플레어 트레이스 등이 포함됩니다. 콜리전 헐이 없는데 이 옵션을 참으로 설정하거나 그냥 거짓으로 설정한 경우, 머티리얼 세팅에 따라 폴리곤별 콜리전이 사용됩니다. 머티리얼에 대한 콜리전을 끄는 방법은 Materials 배열을 끌어내리고 EnableCollision 을 거짓으로 설정하면 됩니다.