안동민 개발노트

본문 시작

기본적인 마법 및 능력 시각화

오라·발사체·충격 이미터의 형태·색상·타이밍을 조합하고 블루프린트로 이동시키는 얼음 파편 마법을 완성합니다.

게임에서 마법(Magic)이나 능력(Ability) 시각화는 플레이어에게 강력한 시각적 피드백을 제공하고, 게임 세계의 판타지적인 요소를 강화하는 데 핵심적인 역할을 합니다.

불꽃 구슬, 얼음 파편, 치유의 빛, 순간이동 효과 등 다양한 마법과 능력은 단순히 아름다움을 넘어, 게임플레이 정보를 전달하는 중요한 수단이기도 합니다.

이 절에서는 나이아가라를 활용하여 기본적인 마법 및 능력 효과를 제작하는 방법을 다룹니다.

앞서 배운 불꽃, 연기, 폭발 이펙트와 달리 색상, 형태, 타이밍으로 추상적인 능력 상태를 표현하는 데 중점을 둡니다.


마법/능력 효과 제작의 핵심 요소

마법 및 능력 효과는 일반적으로 다음과 같은 요소들을 조합하여 시각화됩니다.

  • 에너지 흐름: 마법이 시전되거나 발사될 때 느껴지는 에너지의 움직임과 방향성.
  • 원소적 특성: 불, 얼음, 전기, 자연, 빛, 어둠 등 마법의 속성을 나타내는 색상, 형태, 움직임.
  • 영향 범위: 마법이 미치는 영역이나 폭발 범위.
  • 시전/충격 피드백: 마법이 준비되거나 적중했을 때 발생하는 시각적, 청각적 피드백.

기본적인 마법/능력 효과 제작 가이드

오라(Aura) 또는 버프(Buff) 효과

캐릭터 주변을 감싸거나 특정 위치에서 지속적으로 발생하는 에너지 효과입니다.

  • 스폰/초기화
    • Spawn Rate: 낮거나 중간 (지속적인 흐름)
    • Lifetime: 길게 (오라가 유지되는 시간)
    • Sprite Size: 작게 시작하여 크게 (10 ~ 50)
    • Color: 마법의 속성(예: 치유는 녹색/노랑, 보호막은 파랑/흰색, 저주는 보라/검정)
    • Initial Location: Sphere 또는 Cylinder 형태로 캐릭터 주변에 분포하거나 특정 소켓에 부착.
    • Initial Velocity: Z축으로 천천히 위로 움직이거나, Sphere 형태로 아주 미세하게 퍼지도록.
  • 물리/힘
    • Gravity Force: 약하게 적용하거나 제거.
    • Vector Noise Force: 필요할 때 추가합니다. 오라의 유기적이고 흐르는 듯한 움직임을 만듭니다. Strength와 Frequency를 조절하여 부드러운 흐름이나 번개 같은 파동을 표현합니다.
    • Curl Noise Force: Noise Force보다 더 복잡한 소용돌이 형태의 노이즈를 생성하여 에너지가 휘감기는 듯한 효과를 줍니다.
  • 시간에 따른 변화
    • Scale Color: NormalizedAge에 따라 색상을 시작 색상 -> 밝게 발광 -> 투명하게 사라지도록 변화시켜 오라의 지속 시간과 강도 변화를 표현합니다.
    • Scale Sprite Size: NormalizedAge에 따라 크기를 작게 -> 크게 -> 작게 변화시켜 파티클이 생성되었다가 소멸하는 느낌을 줍니다.
  • 렌더링
    • Sprite Renderer
    • Material: 추상적인 에너지, 빛, 구름 형태의 텍스처를 포함하고 Additive 블렌드 모드, Unlit 셰이딩 모델을 사용합니다. 발광 효과를 위해 머티리얼에서 Emissive Color를 적극 활용합니다.
    • DepthFade: 머티리얼에서 표면과의 교차 경계를 완화합니다.

발사체(Projectile) 효과

마법 구슬, 화살, 에너지 볼 등 플레이어가 발사하는 투사체 효과입니다.

  • 스폰/초기화
    • 중심 입자는 Spawn Burst Instantaneous Count 1로 만들고, 잔상 이미터는 별도의 연속 Rate로 만듭니다.
    • Lifetime: 발사체의 이동 거리에 맞춰 조절 (길게)
    • Sprite Size: 중간 (20 ~ 50)
    • Color: 마법의 속성 (예: 불은 빨강/주황, 얼음은 파랑/흰색, 전기는 노랑/파랑)
    • Initial Location: 총구 또는 시전 위치.
    • 게임플레이 발사체는 Actor의 Projectile Movement로 이동합니다. 부착된 중심 입자에 같은 이동 속도를 다시 주면 시각물과 충돌체가 분리됩니다. 순수 시각 효과일 때만 Particle Spawn의 초기 속도를 별도로 사용합니다.
  • 물리/힘
    • Gravity Force: 중력 영향을 받는지 여부에 따라 조절. (마법 구슬은 무시, 돌멩이는 영향)
    • Drag: 공기 저항이 있는지 여부에 따라 조절.
    • Noise Force / Curl Noise Force: 발사체 주변에 에너지 잔상이나 소용돌이 효과를 추가합니다.
  • 시간에 따른 변화
    • Scale Color: 발사체가 날아가는 동안 색상이 미세하게 진해지거나 밝아지도록 조절합니다.
  • 렌더링
    • Sprite Renderer (주로 구형 또는 추상적인 형태) 또는 Mesh Renderer (화살, 얼음 파편).
    • Material: 발광하는 에너지, 불, 얼음 질감의 텍스처를 포함하고 Additive 블렌드 모드, Unlit 셰이딩 모델을 사용합니다.
    • 잔상(Trail) 효과: Ribbon Renderer를 추가하여 발사체가 지나간 자리에 꼬리처럼 흔적을 남깁니다. 잔상의 색상, 두께, 수명을 조절합니다.
  • 추가 효과: 발사체 주변에서 작은 스파크나 파편을 추가로 스폰하여 움직임을 강조합니다. (자식 이미터 또는 Spawn System Attached 사용)

충격(Impact) 효과

마법이 적중하거나 능력이 발동했을 때 발생하는 순간적인 효과입니다.

  • 스폰/초기화
    • Spawn Burst Instantaneous: 필수. 한 번에 많은 파티클을 스폰합니다. Spawn Count는 효과의 강도에 따라 조절.
    • Lifetime: 매우 짧게 (0.1 ~ 0.5초)
    • Sprite Size: 작게 시작하여 빠르게 확장.
    • Color: 마법의 속성 + 충격에 따른 흰색/검정.
    • Initial Location: 충격 지점.
    • Initial Velocity: Sphere 또는 Cone 형태로 사방으로 강하게 퍼지도록.
  • 물리/힘
    • Gravity Force: 파편/먼지에는 적용, 에너지에는 제거.
    • Drag: 속도를 감쇠합니다. 소멸 시점은 Lifetime과 Particle State가 정합니다.
    • Noise Force: 약하게 적용하여 불규칙성을 줍니다.
  • 시간에 따른 변화
    • Scale Color: 폭발과 유사하게 순간적으로 밝게 터졌다가 어둡고 투명하게 사라지도록.
    • Scale Sprite Size: 폭발과 유사하게 빠르게 확장하고 수축하도록.
  • 렌더링
    • Sprite Renderer (에너지, 빛) 및 Mesh Renderer (파편).
    • Material: 충격파 텍스처, 스파크 텍스처 등을 포함하고 Additive / Translucent 블렌드 모드를 조합하여 사용합니다.
    • Light Renderer: 순간적인 섬광 효과를 위해 추가합니다. (성능 주의)
  • 블루프린트 연동: Spawn System at Location의 Auto Activate를 끄고 위치를 지정합니다. 반환 컴포넌트에 User 강도 값을 설정한 뒤 Activate합니다.

파라미터 기준값 템플릿 (값 -> 현상 -> 튜닝)

마법/능력 이펙트는 예쁜 값보다 일관된 기준값이 중요합니다.

아래 템플릿을 시작점으로 잡으면 장면 간 편차를 줄일 수 있습니다.

  • 오라(Aura)
    • Spawn Rate: 20~40 -> 안정적인 지속 흐름 -> 과밀하면 Lifetime을 먼저 줄이고 Spawn Rate를 나중에 줄입니다.
    • Noise Strength: 15~35 -> 부드러운 요동 -> 난류가 과하면 Frequency를 낮춰 깜빡임을 줄입니다.
  • 발사체(Projectile)
    • Projectile Movement의 예시 속도 3000~6000 cm/s -> 빠른 직진 감각 -> 시각 중심과 충돌체가 다르게 움직이면 먼저 부착·좌표 공간·중복 속도를 바로잡습니다. Ribbon Width는 그다음 가독성을 조절합니다.
    • Trail Lifetime: 0.15~0.35 -> 잔상 인지 가능 -> 화면 번짐이 심하면 0.2 이하로 낮춥니다.
  • 충격(Impact)
    • Burst Count: 20~60 -> 즉시 폭발감 형성 -> 성능이 흔들리면 Count를 줄여 비교합니다. Sprite Size를 키우면 화면 면적과 오버드로우 비용이 늘 수 있으므로 별도로 측정합니다.
    • Lifetime: 0.12~0.35 -> 순간 타격감 유지 -> 길어지면 잔상 누적이 생기므로 0.4 이상은 지양합니다.

마법/능력 시각화의 추가 팁

  • 색상 팔레트: 마법의 원소적 특성을 나타내는 명확한 색상 팔레트를 설정합니다. (예: 불 = 주황/빨강, 얼음 = 파랑/흰색, 번개 = 노랑/하늘색).
  • 발광(Emissive): Unlit 셰이딩 모델과 높은 Emissive Color를 사용하여 마법이 자체적으로 빛을 내는 듯한 느낌을 줍니다. 이는 밤이나 어두운 환경에서 특히 효과적입니다.
  • 렌즈 플레어/블룸(Bloom): 포스트 프로세스 볼륨에서 Bloom 설정을 조절하여 마법 효과의 발광을 더욱 강조합니다.
  • 사인/코사인 함수 활용: 나이아가라 스크립트에서 Sine 또는 Cosine 노드를 사용하여 파티클의 움직임이나 크기에 주기적인 파동을 주어 마법적인 느낌을 더합니다.
  • 오브젝트 풀링: 자주 사용되는 마법 효과(예: 작은 충격, 버프 적용)는 오브젝트 풀링을 통해 성능을 최적화합니다.
  • 캐릭터 애니메이션과의 동기화: 마법 시전 애니메이션의 특정 프레임에 맞춰 파티클 효과를 시작하거나 속성을 변경하도록 애니메이션 노티파이를 활용합니다. (8장 1절, 3절 참조)

직접 해보기: 간단한 얼음 파편 마법 발사체

얼음 속성을 가진 발사체와 충격 효과를 간단하게 만들어 보겠습니다.

얼음 발사체 나이아가라 시스템 (NS_IceProjectile)

Fountain 등 기본 이미터로 시스템을 만들고 중심과 잔상을 별도 이미터로 나눕니다. 중심 이미터의 Spawn Rate를 제거하고 Spawn Burst Instantaneous Count 1, Time 0을 추가합니다. Emitter State는 Once로 설정합니다.

중심 이미터는 Local Space로 설정합니다. Initialize Particle에서 Lifetime 2.0초, Sprite Size 30cm, Color (0.1, 0.5, 1.0, 1.0)을 사용합니다. 위치는 로컬 원점이고 초기 속도는 0입니다. 중력·Drag·Noise는 중심 입자에서 제거하여 Actor의 충돌체를 정확히 따라가게 합니다.

Scale Color는 RGB 배율 1을 유지하고 알파를 수명 끝에서 0으로 낮춥니다. Sprite Renderer에 얼음 또는 추상적 빛 텍스처를 사용하는 Additive·Unlit 머티리얼을 연결합니다. SubUV를 쓴다면 시트 크기와 SubImageIndex 바인딩을 맞춥니다.

잔상 이미터는 World Space에서 컴포넌트의 현재 위치에 연속 생성합니다. 예시 Rate 40/s, Lifetime 0.2초를 사용하고 Ribbon Renderer를 추가합니다. 같은 Ribbon ID와 생성 순서를 유지하고 Ribbon Width·Color·머티리얼을 설정합니다. 한 입자에 렌더러만 추가해서는 길이가 있는 꼬리가 생기지 않습니다.

잔상이나 보조 입자에만 필요에 따라 약한 Curl Noise를 적용합니다. 먼저 Noise 없이 궤적을 맞춘 다음 Strength 50, Frequency 0.1 같은 예시 값을 비교합니다. 활성화 중에는 계속 생성하고 Deactivate 후 기존 입자가 수명을 마치도록 수명 주기를 설정합니다.

블루프린트 Actor로 이동과 충돌 연결

BP_IceProjectile Actor에 Sphere Collision을 루트로, Niagara Component를 자식으로, Projectile Movement Component를 추가합니다. Niagara에는 NS_IceProjectile을 할당합니다. Projectile Movement의 Updated Component가 충돌 루트를 가리키도록 합니다.

Projectile Movement의 Initial Speed와 Max Speed를 500cm/s, Projectile Gravity Scale을 0으로 두고 로컬 +X 방향으로 발사합니다. 충돌체의 채널 응답·이벤트를 맞추고 발사자를 무시합니다. 500cm/s로 2초 이동하면 충돌·감속이 없을 때 1,000cm가 예상 이동 거리입니다.

캐릭터의 발사 입력(예: F Pressed 또는 대응 Enhanced Input 액션)에서 Spawn Actor from Class로 BP_IceProjectile을 만듭니다. 위치는 손 소켓, 회전은 발사 방향으로 정합니다. 손 소켓 Forward 축과 실제 발사 축이 같은지 확인합니다.

충돌 또는 2초 비행 종료 시 한 번만 종료 로직을 수행합니다. 충돌이면 유효한 Impact Point·Normal에 별도 NS_IceImpact Burst 효과를 생성합니다. 초기 User 값이 필요하면 Auto Activate false로 생성하고 Set Niagara Variable 후 Activate합니다. 데미지 판정은 게임플레이 충돌 로직에서 처리합니다.

이동을 멈추고 충돌을 비활성화한 뒤 비행 Niagara를 Deactivate합니다. 남은 World Space 잔상이 수명을 마친 후 Actor를 정리합니다. 즉시 Actor를 파괴하면 부착된 Niagara와 잔상도 함께 제거될 수 있습니다. On System Finished를 사용한다면 모든 이미터가 완료 가능한지 확인합니다.

저장·컴파일 후 직선 비행, 장애물 충돌, 미충돌 시간 종료와 반복 발사를 비교합니다. 이 절의 값은 실행 관측값이 아니라 예제 설정과 조건부 예상값입니다.

발사체 이동과 시각 표현의 책임
발사체 이동과 시각 표현의 책임Projectile Movement가 충돌 루트를 이동시킵니다. 자식 Niagara의 로컬 중심은 루트를 따라가지만 월드 공간 잔상은 이전 위치에 남습니다. 충돌은 별도 적중 효과를 만들고 비행 효과를 종료합니다.Projectile MovementActor 이동 · 충돌 루트 갱신Sphere Collision · 루트Niagara Component중심: Local Space추가 이동 속도 = 0잔상: World Space에 이전 위치 보존과거 입자현재 중심충돌 / 비행 시간 종료이동 중지 · Deactivate · 잔상 완료충돌일 때만 별도 Impact 생성

게임 충돌체가 이동을 담당합니다. Actor를 즉시 파괴하면 자식 Niagara의 잔상도 함께 사라질 수 있습니다.


마법 및 능력 시각화는 나이아가라의 표현력을 가장 잘 드러내는 영역 중 하나입니다.

마법 및 능력 효과는 색상, 형태, 움직임, 블루프린트 연동 조건을 조합해 게임플레이 정보를 전달하도록 설계해야 합니다.


오라의 지속 상태, 발사체의 이동, 적중 순간은 각기 다른 수명으로 설계합니다. 색만으로 아군·적군·위험 범위를 구분하지 말고 실루엣과 타이밍도 함께 사용하며, 반복 전투에서 잔상과 컴포넌트가 쌓이지 않는지 확인합니다.