본문 바로가기

로블록스 개발 중급

파티클로 전기충격 효과

이번 튜토리얼에서는 로블록스의 파티클 시스템을 이용하여 전기충격으로 터지는 듯한 효과를 만들어 보자. 전기 충격 효과와 더블어 캐릭터가 트랩에 걸려들어 전기충격을 일으키는 과정에 대한 내용, 전기충격에 캐릭터가 죽는 내용까지 다루어 보겠다.

파티클 발생기 준비(ParticleEmitter 준비)

트랩처럼 보이는 파트, 혹은 모델을 준비한다. 튜토리얼을 위해서라면 그냥 파트를 하나 생성하여 바닥에 넓직하게 매트처럼 깔아두고 이름은 ShockTrap으로 하자. ShockTrap에 ParticleEmitter 를 추가하고 이름은 Explosion 이라고 하자. 전기 충격 효과를 담당할 것이다.

Explosion(파티클 발생기)의 속성을 좀 변경하자. 
  • Texture 속성 : rbxassetid://6101261905 , 전기 스파크 형태의 이미지이다.
  • Drag 속성 : 10, 마찰력은 10을 줘서 처음에는 빠르지만 금새 느린 움직임으로 만들어 주자.
  • Lifetime 속성 : 0.2, 0.6, 스파크의 라이프타임은 0.2초에서 0.6초이다.
  • Speed 속성 : 20, 40, 스파크의 속도는 20에서 40. 라이프 타임이 짧은 만큼 빠른 스피드로.
  • SpreadAngle 속성 : 180, 180 , 원뿔각이 180도이면 모든 방향을 뜻하게 된다. 
  • Rotation 속성 : 0, 360 , 파티클이 회전을 완전히 랜덤하게 하여 같은 모양의 파티클인지 알아채지 못하게 하자.

이제 파티클 발생기의  Enabled 속성을 off.로 비활성화 시키자. 이 속성이 on인 상태이면 파티클을 계~~~속해서 발생시키게 된다.

테스트 해보기

위에서 작업한 파티클을 테스트하기 위해서, 로블록스에서 제공하는 플러그인을 한번 써보겠다.

Emit() Plugin이라는 플러그인이다. 이 프로그램을 설치해야 된다. 해당 플러그인 설치 주소로 이동하고 Install하자.

로블록스 스튜디오를 열면서 자동으로 설치를 해준다.

 

Emit() Plugin을 설치하고 나서 설치가 잘 됐는지를 확인하고 싶으면 Explosion(파티클 발생기)를 선택해보면 알 수 있다. 파티클 발생기를 누르면 게임 편집창 오른쪽 위에 아래의 이미지와 같은 GUI 가 생긴다.

 

이떄 100은 발생할 파티클의 수이고 Emit버튼은 누르면 파티클발생기에서 파티클이 방출된다.

 

색상과 투명도 조절

좀더 멋있는 전기 충격 효과를 위해 생상과 투명도를 시퀀스 기능으로 조절해 보자.

파티클 발생기의 Color속성의 시퀀스 창을 열고 아래의 이미지와 비슷하게 조절해 보자. 

꽤 멋있지만 마지막에 크게 보이는 파티클들이 신경쓰인다.

 

마지막에 크게 보이는 파티클을 Transparency(투명도) 속성으로 투명하게 바꾸자. 처음부터 선형으로 투명해지면 효과가 잘 안 보이게 되므로 처음과 중간까지는 불투명하다가 마지막으로 가면서 투명해지는 모습, 즉 아래의 그래프와 같은 투명도를 보여주게 만들자. Transparency 속성의 시퀀스 창을 열어서 아래의 이미지와 비슷한 그래프로 만들어 주자.

 

이제 전기 충격 효과의 비주얼은 완성되었다. 실제 게임에서 사용될 수 있게 스크립트로 트랩이 작동될 때, 동작할 수 있게 하자.

스크립트 추가

ShockTrap 모델에 PlayExplosion 라고 스크립트를 추가하자. 이 스크립트는 캐릭터와 닿으면 파티클 발생기를 동작시키고 캐릭터를 죽게 만드는 기능을 할 것이다.

 

스크립트의 모든 소스 코드는 아래와 같다. 스크립트의 설명은 주석을 참고하자.

-- 해당 스크립트의 부모는 ShockTrap이다.
local trapObject = script.Parent
-- ShockTrap의 자식중에서 Explosion이라는 이름의 자식을 찾는다. 
-- 그것이 파티클 발생기임을 우리는 이미 알고 있다.
local particleEmitter = trapObject:FindFirstChild("Explosion")
 
-- 발생할 파티클의 총수는 100개임
local EMIT_AMOUNT= 100
 
-- 파티클로 전기충격효과를 주고 캐릭터를 죽이는 함수
local function killPlayer(otherPart)
    -- 파트로 캐릭터 모델을 찾음
    local character = otherPart.Parent
    -- 캐릭터 모델에서 휴머노이드 객체를 찾음
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
 
    -- 휴머노이드가 제대로 된것이라면, 즉 ShockTrap과 닿은 것이 플레이어가 맞는다면,
    if humanoid then
        -- Health 속성을 0으로 하면 플레이어는 사망
        humanoid.Health = 0
        -- 위에서 저장해둔 particleEmitter(Explosion)을 동작시킨다.
        particleEmitter:Emit(EMIT_AMOUNT)
    end
end

-- Touched 이벤트와 함수를 연결
trapObject.Touched:Connect(killPlayer)

테스트를 직접 해보면, 위의 동영상처럼 한번에 딱 터지고 끝나지 않고 계속해서 파티클이 생성되는 모습을 볼 수 있다. 캐릭터가 죽고 나서도 Touched 이벤트가 계속 발생해서 파티클이 계속 발생되게 된다. 

보통은 플레이어 오브젝트에 attribute를 추가해서 해당 플레이어가 죽었나 살았나에 따라 트랩의 동작 여부를 살펴야 할 것이다. 여기서는 단순하게 플레이어의 휴머노이드 오브젝트의 Health를 체크하여 0인 상태라면 더이상 트랩을 동작하지 않도록 수정하였다.

local trapObject = script.Parent
local particleEmitter = trapObject:FindFirstChild("Explosion")

local EMIT_AMOUNT= 100

local function killPlayer(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
	
    -- 연속 작동을 방지하도록 조건을 추가.
    if humanoid and humanoid.Health ~= 0 then
        humanoid.Health = 0
        particleEmitter:Emit(EMIT_AMOUNT)
    end
end

trapObject.Touched:Connect(killPlayer)

이 소스 코드로 동작을 확인할 수 있다.