UDN
Search public documentation:

DevelopmentKitGemsAddingSpritesMeshesParticleEffectsKR
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

UDK 홈 > UDK 젬 > 스프라이트, 메시, 파티클 이펙트를 액터에 추가하는 법

스프라이트, 메시, 파티클 이펙트를 액터에 추가하는 법


문서 변경내역: James Tan 작성. 홍성진 번역.
UDK 2011년 3월 버전으로 최종 테스팅, PC 와 iOS 호환

개요


언리얼 엔진 2 에서 액터는 딱 하나만 렌더링할 수 있었습니다. 그래서 한 액터가 여러 메시나 메시 혼합물과 파티클 이펙트에 의해 표현되게 하려면, 다수의 액터를 동시에 발동시켜야 했습니다. 언리얼 엔진 3 는 태스크를 액터 컴포넌트 속으로 분할시켜 이 문제를 해결했습니다. 액터 컴포넌트는 특정 태스크를 수행하는 액터 내 오브젝트를 말합니다.

그래서 액터가 자체를 스태틱 메시로써 렌더링하게 하려면, StaticMeshComponent 또는 SkeletalMeshComponent 또는 SpriteComponent 또는 ParticleSystemComponent, 이런 것들로 추가해야 합니다. 그러나 딱 이것 아니면 저것일 필요는 없습니다. 액터 내에는 필요한 만큼의 액터 컴포넌트를 둬도 되며, 그들 서로간에 상호작용하게 할 수도 있습니다.

이 젬에서는 액터 내에서 액터 컴포넌트를 사용하는 법에 대해 안내해 드리겠습니다.

관련 토픽

언리얼스크립트 방법


언리얼스크립트 안에 액터 컴포넌트를 추가하는 방법은 둘 있습니다. default properties 안에 서브 오브젝트로써 선언할 수도 있고, 런타임 도중 생성할 수도 있습니다. 다음 예제에서는 스태틱 메시 컴포넌트가 사용되었으나 스켈레탈 메시 컴포넌트, 스프라이트 컴포넌트, 파티클 시스템 컴포넌트 등과 같은 다른 비주얼 컴포넌트로 대체해도 됩니다.

Default properties

언리얼스크립트 내의 default properties 내에 스태틱 메시 서브 오브젝트를 추가하는 방법입니다.

먼저 클래스 전역 변수 목록 내에 스태틱 메시 컴포넌트 변수부터 선언합니다. 이를 통해 클래스가 default properties 내에 정의된 스태틱 메시 컴포넌트로의 참조를 담을 수 있도록 합니다.

default properties 내에 서브 오브젝트를 만듭니다. default properties 내에 서브 오브젝트가 생성된 이후, 액터 내의 컴포넌트 배열에 추가됩니다. 모든 컴포넌트 서브 오브젝트는 컴포넌트 배열에 추가되어야 하며, 안그러고서는 사용되지 않습니다.

MyActor.uc
class MyActor extends Actor;

// 언리얼스크립트 및 언리얼 에디터로 노출
var() StaticMeshComponent StaticMesh;

defaultproperties
{
  // 서브 오브젝트 선언
  Begin Object Class=StaticMeshComponent Name=MyStaticMeshComponent
    StaticMesh=StaticMesh'EditorMeshes.TexPropPlane'
  End Object
  StaticMesh=MyStaticMeshComponent
  Components.Add(MyStaticMeshComponent)
}

이전에 부모 클래스 내에 선언되었던 서브 오브젝트를 재정의하고자 한다면, 그렇게 하겠습니다. 유일하게 다른 점은 클래스 파라미터를 선언할 필요가 없다는 점입니다. 이 방법은 일부 속성, 지금과 같은 경우에는 새 정적 메시 정의를 재정의하고자 할 때 유용합니다.

MySubActor.uc
class MySubActor extends MyActor;

defaultproperties
{
  // 서브 오브젝트 재정의
  Begin Object Name=MyStaticMeshComponent
    StaticMesh=StaticMesh'EngineMeshes.Cube'
  End Object
  StaticMesh=MyStaticMeshComponent
  Components.Add(MyStaticMeshComponent)
}

서브 클래스에서 기존에 선언된 컴포넌트를 제거하고 싶은 경우.

MySubActor.uc
class MySubActor extends MyActor;

defaultproperties
{
  Components.Remove(MyStaticMeshComponent) // Remove a specific actor component
  Components.Empty // Remove all actor components
}

런타임

런타임 도중 언리얼스크립트에 스태틱 메시 컴포넌트를 추가하는 법입니다. 이는 PostBeginPlay 뿐만이 아닌 어느 함수에도 추가시킬 수 있습니다. 액터 컴포넌트를 초기화(initialize)시키거나 다른 속성을 약간 구성(set up)해야 할 수도 있습니다.

MyActor.uc
class MyActor extends Actor;

var() StaticMeshComponent StaticMesh;

function PostBeginPlay()
{
  Super.PostBeginPlay();

  StaticMesh = new () class'StaticMeshComponent';

  if (StaticMesh != None)
  {
    StaticMesh.SetStaticMesh(StaticMesh'EngineMeshes.Cube');
    AttachComponent(StaticMesh);
  }
}

defaultproperties
{
}

관련 토픽

언리얼 에디터 방법


에디터 친화적인 버전을 만드는 법입니다. 이 버전의 단점은, 이것을 사용하는 액터는 게임을 실행해 보지 않고는 에디터 내에서 액터가 어떤 모습이 될 지 시각화시켜 볼 수가 없다는 점입니다. 단순히 PIE 만 실행해도 이런 문제는 덜 수 있긴 합니다.

editinline 및 인스턴싱된 변수를 프리미티브 컴포넌트 변수 선언에 맞춰 변경하는 것은 두 가지가 있습니다. 첫째, editinline 변수 변경자(modifier)는 에디터의 속성 창 내에서 프리미티브 컴포넌트를 편집할 수 있도록 합니다. 둘째, 인스턴싱된 변수 변경자는 액터가 스폰될 때 오브젝트 참조가 자동으로 재성성될 것임을 뜻합니다.

DynamicActorComponent.uc
class DynamicActorComponent extends Actor
   ClassGroup(Common)
   AutoExpandCategories(DynamicActorComponent)
   placeable;

// 언리얼스크립트 및 언리얼 에디터로 노출
var() const EditInline Instanced array<PrimitiveComponent> PrimitiveComponents;

function PostBeginPlay()
{
  local int i;

  // 컴포넌트 배열 속에 컴포넌트를 추가시킬 필요가 있는지 확인하기 위해 프리미티브 컴포넌트 배열을 검사.
  if (PrimitiveComponents.Length > 0)
  {
    for (i = 0; i < PrimitiveComponents.Length; ++i)
    {
      if (PrimitiveComponents[i] != None)
      {
        AttachComponent(PrimitiveComponents[i]);
      }
    }
  }

  Super.PostBeginPlay();
}

defaultproperties
{
  Begin Object Class=SpriteComponent Name=Sprite
    Sprite=Texture2D'EditorResources.S_Actor'
   HiddenGame=True
   AlwaysLoadOnClient=False
   AlwaysLoadOnServer=False
  End Object
  Components.Add(Sprite)
}

DynamicActorComponent 배열 사용하기

콘텐츠 브라우저를 열고 액터 클래스 탭을 클릭합니다. Common 그룹 내에 DynamicActorComponent 가 있을 것입니다. 선택하시고요.

AddingComponents_0_SelectDynamicActorComponent.jpg

월드 내에 단순 BSP 바닥을 만듭니다. 월드에 라이트 액트럴 추가하지 않으면 씬이 제대로 라이팅되지 않는다는 점 잊지 마시고요.

AddingComponents_1_AddBSPFloor.jpg

다이내믹 액터 컴포넌트를 놓고자 하는 월드 뷰포트 내에 우클릭하면 맥락 메뉴가 열립니다. "Add DynamicActorComponent Here" 를 선택합니다.

AddingComponents_2_AddDynamicActorComponent.jpg

생성되면 자동으로 선택되어 있을 것입니다.

AddingComponents_3_AddedDynamicActorComponent.jpg

F4 키를 눌러 속성 창을 엽니다.

AddingComponents_5_DynamicActorComponentProperties.jpg

또는, 선택되지 않았다면 거의 액터 목록 내에서 그 액터를 찾을 수 있습니다.

AddingComponents_4_SearchForDynamicActorComponent.jpg

"Primitive Components" 배열 내의 녹색 + 아이콘을 클릭합니다. 배열 내에 새 항목이 생성됩니다. 그런 다음 파랑 아래 배열을 클릭하고 StaticMeshComponent 를 선택하여 새로운 StaticMeshComponent 오브젝트를 만듭니다.

AddingComponents_6_AddingNewPrimitiveComponent.jpg

콘텐츠 브라우저 내에서 재미있는 스태틱 메시를 찾아 선택합니다.

AddingComponents_7_FindAndSelectCoolStaticMesh.jpg

새 오브젝트 정의를 확장합니다. 그리고 Static Mesh Component 탭도요. 작은 녹색 화살표를 눌러 스태틱 메시를 설정합니다.

AddingComponents_8_SetStaticMesh.jpg

PIE 를 시작하여 액터를 시각화시킵니다.

AddingComponents_9_PIE.jpg

다운로드