본문 바로가기

로블록스 개발 기초

로블록스 코딩 - 용암 만들기(1/2)

앞선 글에서 게임 진행중에 블럭이 시간에 걸쳐서 속성을 반복해서 변경하는 코드에 대해 알아봤다. 이번 튜토리얼에서는 플레이어의 행위를 트리거로 어떤 기능이 작동되는 스크립트, 구체적으로 플레이어 캐릭터가 닿으면 죽는 용암 블럭을 만들어 보겠다.

준비하기

먼저 용암 블럭의 외관에 대해서 알아보자.

블럭을 생성하고 그 이름을 LavaFloor로 바꾸자. 그리고 속성창에서 메터리얼을 Neon으로 바꾸고 색은 오렌지 색으로 바꾸자.

이렇게 바꾼 블럭을 아래 이미지와 같이 배치하자.

해당 블럭에 스크립트를 추가하여 KillPlayer로 이름을 바꾸자. 이 블럭에 닿으면 게임 아바타를 죽이는 기능이 들어있는 스크립트이다.

이벤트 연결하기

LavaFloor 블럭에 닿는 순간에 플레이어는 죽는 기능을 구현한다. 블럭에 닿으면 발생하는 이벤트(Event)에 기능을 연결한다. 모든 Part에는 Touched라는 이벤트가 존재하는데, 이 이벤트는 게임중에 다른 게임 오브젝트가 닿았을 때 자동으로 발생한다. killPlayer() 함수를 선언하고 Touched 이벤트와 연결하면, Touched 이벤트가 발생할 때 killPlayer() 함수를 호출한다. 이벤트와 함수를 방법은 이벤트내의 함수 Connect()를 사용한다.

-- LavaFloor 을 lava 변수에 대입
local lava = script.Parent
 
-- 이벤트 발생에 연결될 함수
local function killPlayer()
  
end
 
-- Touched 이벤트의 Connect()함수로 KillPlayer()함수를 연결
lava.Touched:Connect(killPlayer)
Touch이벤트의 함수를 호출하기 위한 방법으로 콜론":"이 사용된다. 루아언어에는 명시적으로 클래스라는 문법이 존재하지 않지만, 테이블을 사용해서 클래스와 비슷한 구현이 가능하다. 루아 특유의 클래스 메소드 사용법이라고 생각하면 된다. 여기서는 얘기가 길어지니, 그냥 ":"을 사용했다라고 넘어가자.  

닿은 블럭 받아오기

KillPlayer()함수에서 플레이어를 죽이기 위해서는 그 함수내에서 플레이어를 접근할 수 있어야 한다. 그러기 위해 파라메타(parameter)로 Touched 이벤트를 발생시킨 오브젝트를 보낸다. Touched 이벤트를 발생시킨 오브젝트라는 말은, 쉽게 말해 용암 블럭에 닿은 오브젝트라는 말이다. 밟았으면 발 오브젝트가 될 것이고, 넘어졌으면 몸통이나 머리 오브젝트도 될 수 있을 것이다. 이 발, 몸통, 머리 등등의 오브젝트는 캐릭터 모델의 일부이다. 쉽게 말해 머리부터 발까지의 파트들이 모여서 캐릭터 모델을 이뤘다고 생각하면 된다.  

파라메타란 함수가 호출될 때, 같이 보내는 정보의 선언이다. 표현이 어려운데, 이 경우에 KillPlayer()함수를 호출할 때, 괄호 안에 Touched 이벤트를 발생시킨 Part가 파라메타가 된다. 파라메타는 그 함수안에서 다른 변수들처럼 사용된다.

local lava = script.Parent
 
-- killPlayer() 함수의 파라메타 otherPart를 전달하게 된다.
local function killPlayer(otherPart)
	
end
 
lava.Touched:Connect(killPlayer)

이렇게 Touched 이벤트와 연결된 killPlayer(otherPart) 함수는 아바타가 그 블럭에 닿는 순간 자동으로 호출된다. 그때 otherPart라는 파라메타를 통해 플레이어의 캐릭터 모델로 접근이 가능하게 된다.

물론 캐릭터 모델로의 접근이 끝이 아니다. 플레이어를 죽이기 위한 여정은 Touched 이벤트를 발생시킨 캐릭터 모델의 한 파트에서 시작되는 점을 염두해두자. 

요약

  • 이벤트와 함수의 연결하여 이벤트 발생시에 자동으로 호출시키자.

다음글

2021.04.15 - [로블록스 개발 기초] - 로블록스 코딩 - 용암 만들기(2/2)