본문 바로가기

로블록스 개발 중급

Beam 오브젝트로 레이저 효과

로블록스에서 제공하는 Beam 오브젝트를 이용하면 아래 동영상에 나오는 포스필드, 폭포의 물줄기, 그리고 레이져 빔을 표현할 수 있다. 이번 튜토리얼에서는 Beam 오브젝트를 이용하여 레이저빔을 만드는 방법에 대해 알아본다. Beam 오브젝트는 두 점 사이를 정해주면 그 사이에 텍스쳐를 펼쳐서 보여주는 기능을 한다. speed, width, curve등의 속성을 이용하면 더 다양한 효과를 표현할 수 있다.

레이저 빔을 만들고  레이저 빔에 닿으면 캐릭터의 health는 0이 되어서 죽게 되는 스크립트까지 완성해보자.

Attachment 추가

두개의 Attachment 를 레이저빔이 시작과 끝이 될 곳에 추가한다. 레이저 모델이라면 아래의 이미지처럼 두개의 attachment를 추가하자.

 

레이저무기 모델에 StartAttachment 와 EndAttachment 라는 이름으로 attachment를 추가한다.

attachment를 추가해보면 아무것도 보이지 않는 것이 기본값이다. 로블록스 스튜디오의 Model탭에서 Constraint Details 기능을 활성화하면 녹색원을 표시된다.

Attachment 이동시키기

모델에 attachment를 추가하면 항상 모델의 한가운데에 attachment가 생성된다. 생성된 attachment를 Move 툴로 이동시켜서 위치를 잡아주자. StartAttachment(1)번 위치, EndAttachment(2)번 위치에 이동시킨다.

 

Constraint Details 기능을 활성화시켜도 Attachment가 모델의 파묻혀서 보이지 않아 제대로 위치 파악이 어려울 수 있다. 그럴때는 Model 탭의 Draw On Top 기능을 활성화 시켜주면 모델안에 있는 attachment도 그냥 보여준다. 보인다고 해서 모델의 표면에 있는 상태는 아니므로 카메라를 이동해가면서 위치를 잘 파악하자.

레이저 빔 만들기

LaserTrap (레이저 무기)의 자식으로 Beam(Laser) 오브젝트를 추가한다.

 

추가한 Beam 오브젝트(Laser)의 속성을 살펴보면 Attachment0Attachment1 을 찾을 수 있다. 각각 StartAttachment EndAttachment 를 추가하자. 입력한 내용은 아래의 이미지와 같다.

 

파티클 시스템의 파티클과는 다르게 Beam 오브젝트는 카메라를 항상 향하는 기능이 기본값이 아니다. 그 말은 카메라의 방향에 따라 Beam의 모양이 제대로 안 보일 수 있다는 말이다. 아래의 이미지를 확인해 보자.

 

측면에서 봤을 때의 Beam 오브젝트

 

위쪽에서 봤을 때의 Beam 오브젝트

 

Beam 오브젝트의 FaceCamera 속성을 활성화시켜서 파티클처럼 항상 카메라를 향하게 만들자.

Beam 오브젝트의 속성들

먼저 Beam 오브젝트의 Texture 속성에 이미지를 대입하자. 아래의 이미지들의 asset ID 를 하나 복사해서 넣자. 혹은, 직접 만든 이미지를 넣어도 된다.

  • rbxassetid://6060542252
  • rbxassetid://6060542158
  • rbxassetid://6060542252

하나를 골라서 추가하자.

LightEmission 속성을 0.5으로 변경. 빛이 번쩍하는 느낌을 줄 수 있다. Transparency 속성은 0 (불투명).

레이저의 두께?를 정할 수 있다. 시작점의 두께와 마지막점의 두께. Width0 속성과 Width1 속성을 4로 변경.

TextureSpeed 속성은 으로 변경해서 텍스쳐를 좀더 빠르게 이동시켜서 좀더 레이저닮게 한다.

마지막으로 Color 속성을 바꿔서 붉은 빛의 레이저를 완성하자.

닿으면 캐릭터 사망

Beam 오브젝트로 레이저빔을 만드는 데까지 완성하였다. 여기까지는 비주얼적인 레이저빔이고, 실제 플레이를 하여 캐릭터로 왔다 갔다 해보면 레이저빔의 효과는 아직 없다. 실제 캐릭터의 health를 0으로 만들어서 캐릭터를 죽여버리는 것은 스크립트로 따로 만들어야 한다. 

먼저 LaserTrapCollisionBox 라는 이름으로 파트를 하나 추가한다. 그리고 아래의 이미지처럼 레이저빔의 적용범위를 감싸도록 크기와 길이를 조절한다. 이 파트의 역할은 캐릭터와 레이저빔이 닿았는지를 체크하는 역할이다. 실제 사용시에는 보이지 않도록하고 체크용으로만 쓰인다.

Anchor 속성을 활성화 시켜서 아래로 떨어져버리지 않게 하는 것을 잊으면 안된다.

 

LaserTrap에 이제 스크립트를 추가한다.

local laserTrap = script.Parent
local collisionBox = laserTrap:FindFirstChild("CollisionBox") 
 
-- 충돌 체크 파트를 보이지 않게 한다.
collisionBox.Transparency = 1
 
local function onTouch(otherPart)
  local character = otherPart.Parent
  local humanoid = character:FindFirstChildWhichIsA("Humanoid")
 
  if humanoid then
    humanoid.Health = 0
  end
end
 
collisionBox.Touched:Connect(onTouch)

간단하게 설명하자면,

  1. 이 스크립트의 부모(레이저빔)의 자식인 CollisionBox를 찾아서 보이지 않게 만든다.
  2. CollisionBox 의 Touched 이벤트와 함수를 연결.
  3. 충돌하면 캐릭터의 Humanoid 오브젝트를 찾아서 Health를 0으로 만든다. 

이전 초급 튜토리얼과 많이 겹치는 내용이어서 자세한 설명은 생략한다. 캐릭터가 왜 죽는지 Touched 이벤트가 무엇인지 연결은 무슨 뜻인지 알고 싶으면 용암만들기 포스팅을 참고하길 바란다.