Jasontreks Blog

DM 보내기

메세지는 텔레그램 챗봇에 의해 익명으로 전달됩니다. 답장을 받으려면 이메일을 입력하세요.
Send

발사 이펙트, 탄환 궤적 이펙트

발사 이펙트

발사 이펙트는 연기 분출을 표현한 파티클 시스템과 화염 분출을 표현한 파티클 시스템, 발광 효과를 표현하기 위한 포인트 라이트(Point Light)를 조합해 완성했다.

연기 파티클 시스템

포구에서 뿜어져 나오는 연기의 분출을 표현하는 파티클 시스템이다. 연기 입자는 아래 두 가지 텍스처를 활용해 표현했다.

한쪽 방향으로 강한 Initial Velocity 값과 Scale, Alpha 값도 변화를 주어 사실적인 연기 질감을 표현하였다. 또 분출 방향이나 연기 입자의 회전 등을 표현하는 다른 설정들을 조작해 완성하였다.

분출 방향은 플레이어가 발사 액션을 취한 순간에 플레이어 방향(왼쪽, 오른쪽) 및 포신의 각도를 구해 2D 벡터로 계산된다.

화염 파티클 시스템

화염 파티클 시스템은 강하게 연소하는 화염보다는 화약과 함께 강한 금속 마찰에 의해 발생한 스파크와 같은 모습이 좀 더 어울릴 것이므로 아래와 같이 표현하였다.

각 화염 입자는 단순한 원형 그라데이션 텍스처로, 글로우 효과를 적용해 사실적인 느낌을 표현할 수 있다.

발사 순간 광원을 크게 밝힘으로써 역동적인 시각 경험을 이끌어낼 수 있다. 그러기 위해선 Godot 엔진에서 제공되는 PointLight2D 노드를 추가하고 광원의 Texture Scale이 빠르게 커졌다 작아지는 애니메이션을 제작한다.

최종적으로 발사 이펙트가 완성된 모습이다.

탄환 궤적 이펙트

이전 포스트들에서 생략된 내용이 있는데, 바로 연기 이펙트이다. 발사 이펙트 시 발생하는 강한 연기 분출과 달리 무언가가 꾸준히 연소하면서 발생하는 일정한 연기 분출 이펙트도 이 게임에서 필요하다.

다만 이러한 형태의 연기 발산은 가로로 길쭉한 화염 필드에도, 한 지점에서 타는 작은 화염에도, 탄환이 운동한 포물선 경로에도 필요하다. 즉 이 이펙트는 범용성을 높이는 것이 핵심이다.

연기 이펙트는 하나만 만들어 놓고, 생성 시에 발산 범위, 발산 방향, 파티클 밀도 등 파티클 시스템에 필요한 파라미터들을 동적으로 설정하는 방식을 통해 범용적으로 활용할 수 있다.

# 위치를 고정시킬 객체 이름. 
# 설정하면 이동하는 객체를 따라 함께 이동하므로 탄환 궤적 이펙트를 구현할 수 있다.
@export var attatch: String = ""
# 연기 파티클 생성 수. 연기의 밀도를 표현한다.
@export var smokeAmount: int = 50
# 연기가 생성된 후 얼마나 오래 지속되는지
@export var smokeLifetime: float = 3.0
# 생성 범위 박스. 가로로 길게 하면 화염 필드에
# 작은 정사각형으로 하면 한 지점에서 타는 작은 화염에 적용할 수 있다.
@export var spawnBox: Vector2 = Vector2(50, 50)
# 위쪽 방향 가속도(음수). 설정하면 위로 상승하는 연기를 표현할 수 있으며 
# 0으로 하면 생성된 지점에서 천천히 퍼지기만 하므로 탄환 궤적 이펙트에 적합하다.
@export var upAccell: float = -100
# 연기 입자의 크기. 화염의 형태에 맞게 조절할 수 있다.
@export var smokeScaleFactor: float = 1.0 

탄환 생성 직후 이 연기 이펙트를 생성하고 아래와 같이 초기화해주면 탄환 궤적 이펙트를 구현할 수 있다.

if shellType in [0, 1]:
    var fxSmoke: Node2D = game.server_spawn_directly("fx_smoke", "none", {
        "attatch" : shell.name,
        "smokeAmount" : 600,
        "smokeLifetime" : 5.0,
        "upAccell" : 0,
        "smokeScaleFactor" : 2
    })
    shell.attatchedFx.append(fxSmoke.name)

다음 포스트

탄착 이펙트