본문 바로가기

로블록스 개발 기초

로블록스 코딩 소개 (2/3)

블럭 사라지게 하기

이제 블럭을 사라지게 해보자. 블럭을 사라지게 하는 방법으로 여기서는 함수를 사용할 것이다. 함수라는 것은 어떤 특정 작업을 하는 소스코드의 그룹을 일컫는 말이다. 변수와 마찬가지로 재사용이 가능해서 자주 사용하게 된다. 함수는 특정 작업의 소스 코드를 다른 코드와 분리해서 따로 그룹화 시켜 주어서 구조적으로 소스 코드를 보기 좋게 해주는 역할도 한다. 

disappear라는 이름의 함수를 만들어보자. lua언어의 함수를 선언하는 문법은 다음과 같다.

local function disappear()
	
end
  • local 은 앞서 변수 선언에서도 나왔듯이, 해당 함수는 이 스크립트 안에서만 사용되는 것임을 알린다.
  • function 은 이제 함수를 만들겠다고 알려주는 키워드이다.
  • disappear 는 함수명이다. 함수명은 개발자가 원하는 이름으로 만들 수 있다. 
  • () 괄호는 함수에 필요한 추가적인 정보에 대한 내용이 들어간다. 추가적인 정보는 파라메타라고 하는데, 여기서는 일단 아무 내용도 보내지 않으므로 추후에 설명한다.
  • end 는 함수를 여기서 끝내겠다는 것을 알려주는 키워드이다.

블럭(Part) 없애기

블럭(Part)를 없애기 위한 방법에 대해 생각해보자. 스튜디오를 사용하면 그냥 탐색기에서 해당 블럭을 선택하고 Delete키를 누르면 삭제된다. 이런 작업은 스튜디오에서 하는 방법으로 게임 진행중에는 사용할 수 없다. 무슨 말이냐면, 소스 코드를 통해서 블럭을 없애야 게임 진행중에 있다가 사라지게 할 수 있다는 말이다.

그렇다면 블럭을 말 그대로 없애야 하는가? 게임요소인 Part를 생성했다가, 없앴다가, 다시 생성하고 이 작업을 반복해야 하는가? 물론 그렇게 해도 이런 간단한 게임에서는 상관없을 것이다. 다만, 게임요소를 생성하고 없애는 작업은 생각보다 리소스를 많이 잡아먹는다. 이런 방식은 실전 게임에서는 사용할 수 없다. 실제 게임 제작은 항상 퍼포먼스를 신경 써줘야 한다. 그래서 실제로 없애고 생성하는 방식이 아니라, 블럭이 보이지 않게 해주는 방식을 사용하자.

Part에는 투명도(Transparency)라는 속성이 있는데 투명도는 기본 0으로써, 1에 가까워 질수록 투명해지다가 1이 되면 아예 투명해진다. 

블럭이 투명해졌어도 보이지 않을 뿐이지, 아바타가 위로 올라서면 떨어지지는 않는다. 블럭위서 떨어지게 만들기 위해서 블럭의 또 다른 속성인 CanCollide를 비활성화하자. CanCollide는 직역하면 충돌가능한가?라는 말로써, 말 그대로 충돌되지 않는 블럭이 된다. 충돌이 없는 기체와 같은 상태라고 생각하자. 이제 게임 아바타는 밑으로 떨어진다. 로블록스의 물리엔진은 CanCollide가 비활성화된 게임오브젝트는 물리엔진 계산에 포함시키지도 않는다.

 

자, Part의 속성 Transparency와 속성 CanCollide의 값을 변경하면 된다는 것을 알았으니 소스코드를 작성해 보자.

local platform = script.Parent
 
local function disappear()
    platform.CanCollide = false
    platform.Transparency = 1
end

속성에 접근할때는 "."을 사용한다.  CanCollide에는 false, Transparency에는 1을 넣어주자.

함수 안의 코드들 앞에는 4칸정도의 스페이스가 보인다. 이 스페이스를 들여쓰기(인덴트, indent)라고 부른다. 읽기를 편하게 해주는 중요한 요소이다. 꼭 신경써주자. 파이썬과 같은 언어에서는 인덴트 조차도 코드 문법의 요소로써 인덴트를 잘못하면 에러가 난다.

함수 호출하기

만들어진 disappear()함수가 제대로 동작하는지 확인해보자. 함수를 작성하고 그 함수명과 괄호를 써넣는 것으로 해당 함수가 실행된다. 선언은 local function 함수명(), 호출은 이미 선언한 함수의 함수명() 이 된다.

local platform = script.Parent
 
local function disappear()
    platform.CanCollide = false
    platform.Transparency = 1
end
 
// 함수 호출!
disappear()

Play 버튼을 눌러서 테스트를 해 보면, 게임 편집창에서는 보이던 해당 블럭이 테스트 시작과 함께 사라지는 것을 확인 할 수 있다.

블럭 나타나게 하기

이번에는 반대로 없어졌던 블럭이 나타나게 만드는 함수, appear() 함수를 작성해보자.

CanCollide는 true, Transparency는 0으로 만들어 주면 될 것이다.

local platform = script.Parent
 
local function disappear()
    platform.CanCollide = false
    platform.Transparency = 1
end
 
local function appear()
    platform.CanCollide = true
    platform.Transparency = 0
end

요약

  • 함수를 만들어서 원하는 기능을 실행하기 만들었다.
  • 함수 선언 방법은 function 함수명 ~~ end로 이루어 진다.
  • 게임요소의 속성 중에 CanCollide와 Transparency에 대해 알아보았다.

다음글

2021.04.15 - [로블록스 개발 기초] - 로블록스 코딩 소개 (3/3)