본문바로가기
수학체험활동
로블록스로 재밌는 게임 만드는 법을 배워보아요!
[함께해요, 로블록스 코딩] [함께해요. 로블록스 코딩] 폴짝폴짝 점프맵 만들기 2탄
수학동아 2022.02.24 00:08 조회 583

기사와 게시글을 읽고 폴짝폴짝 점프맵을 만들어보세요. 어렵거나 이해가 안 가는 부분은 댓글로 질문을 남겨주시면 3월 25일 온라인 클래스에서 답변해 드립니다! 댓글로 질문 혹은 자신의 맵 링크를 남겨주세요!

 

--------------------------------------------------------------------------------------------------------

 

로블록스 스크립트 코딩 첫 걸음, 파트 외형 속성 바꾸기

 

지난 시간에는 로븍록스 스튜디오의 파트 생성과 편집 도구를 이용하여 점프 맵의 외형을 제작해 보았습니다. 이번호에는 파트 속성에 대해 알아보고 파트 속성 중 투명도, 재질, 색을 스크립트 코딩으로 변경하는 법을 알아봅시다.

 

[파트 외형을 결정하는 속성 : 투명도, 재질, 색]

 

그림1. 파트 속성

 

파트의 속성은 파트의 외형과 상호작용 특성을 기록한 데이터로 게임에서는 이 값을 통해 파트를 보여주고, 제어합니다. 선택한 파트 속성은 ‘속성’창에서 값들을 알 수 있습니다. 파트 속성 중 Appearance 아래에 있는 투명도(Transparency)는 투명의 정도를 0 ~ 1 값으로 표현하는데 값이 1이면 투명, 0이면 불투명한 상태입니다. 그리고 파트 재질과 파트 색을 변경하기 위해서는 Appearance 아래의 Material 값과 BrickColor 값을 각각 선택하여 변경하면 됩니다.

 

[스크립트의 역할]

 

게임 실행 중에 점프 맵의 발판이 시간에 따라 색, 투명도, 재질이 바뀌도록 하려면 어떻게 해야 할까요 ? 스크립트는 게임의 모든 오브젝트들의 상태가 어떻게 변화될지를 코드로 기술해 놓은 형식입니다. 로블록스 스크립트는 루아(Lua)라는 프로그래밍 언어 문법을 지치면서 로븍록스 게임 제작에 필요한 특화된 명령어들을 조합하여 작성됩니다. 그리고 스크립트가 생성되면 “Hellom world!”를 출력하는 print("Hello world!") 문장을 담고 있습니다. 점프 맵에서는 탐색기→Part 선택→를 눌러 ‘Script’를 추가 해당 차트 아래에 추가됩니다. 또는 ‘탐색기→ServerScriptService 선택→’를 눌러 ‘Script’를 추가할 경우 이 스크립트는 항상 실행됩니다.

 

스크립트를 작성 할때 이름을 짓는 규칙은 다음과 같습니다.

  • 스크립트 이름은 영어 단어를 붙여 의미있게 정의하고 각 단어의 첫 번쨰 글자는 대문자로 한다.
  • 변수, 함수 이름 등은 영어 단어를 붙여 만드는데 첫 번째 글자는 소문자로 그 다음 단어의 첫 글자는 대문자로 한다.

 

 

[파트 투명도 변경]

 

파트의 투명도를 변경하는 코드를 짜 보겠습니다. ‘홈→파트‘로 직사각형 모양의 파트를 만듭니다. 다음으로 탐색기에 추가된 파트를 찾아 마우스를 이동 후 를 눌러 ‘Script’를 추가 합니다. 마지막으로 마우스로 해당 Script를 더블 클릭하여 다음 코드를 한번씩 입력 후 실행해 봅시다.

 

파트 투명도를 0.5로 변경하는 코드

코드1

local part = script.Parent

part.Transparency = 0.5

코드2

script.Parent.Transparency = 0.5

 

위 코드들은 모두 파트 투명도를 0.5로 바꿉니다. 코드1은 변수를 만들어 사용하였고 코드2에서는 변수를 사용하지 않았습니다. 선택된 파트는 ‘속성’창에서 파트의 속성들을 볼 수 있으며 이 중 Transparency는 0~1의 값으로 투명도를 결정합니다. 파트의 처음 투명도는 ‘속성‘창에서 Transparency 값을 변경해서 바꿀 수 있지만 게임 실행 후에는 스크립트를 통해서만 변경하게 됩니다. 다음은 for 반복문을 이용하여 2초 동안 점진적으로 투명하게 변화하는 코드입니다.

 

반복문을 이용하여 파트 투명도를 2초 동안 점진적으로 변경하는 코드

for 반복문

코드

for count = 1, 10, 1 do

end

 

1부터 10까지 1씩 증가하면서 현재 값을 count 변수에 저장 후 실행한다

local part = script.Parent

 

part.Transparency = 0

for count = 0, 10, 1 do

part.Transparency = count/10

wait(0.2)

end

 

또 다른 반복문인 while 문과 function을 이용하여 깜박이면서 보일떄에만 충돌을 체크하는 코드를 작성해 보겠습니다. ’while true do’는 항상 참이기 때문에 while 문 아래 적힌 ‘2초 대기’, ‘invisible() 함수’, ‘2초 대기’, ‘visible() 함수’ 가 순차적으로 무한히 실행됩니다. 그리고 파트의 CanCollide 속성을 true Ehsms false 로 하여 충돌이 되도록 할지 말지를 정해줍니다.

 

깜빡이면서 보일때에만 충돌 체크가 되는 코드

local part = script.Parent

 

local function invisible()

part.CanCollide = false

part.Transparency = 1

end

 

local function visible()

part.CanCollide = true

part.Transparency = 0

end

 

while true do

wait(3)

invisible()

wait(3)

visible()

end

 

[파트 재질 변경]

 

파트의 재질을 변경하기 위해서는 파트 재질에 해당하는 속성인 Material 에 재질 값을 넣어주어야 합니다. 로블록스에서는 enum이라는 데이터형을 통해 특정 값들의 집합을 정의하는데 재질도 enum 데이터타입 중 하나입니다. 스크립트에서는 Enum 이라는 전역 오브젝트를 통해 재질 값을 선택하여 대입할 수 있습니다. 그리고 GetEnumItems() 함수로 모든 Enum 값을 가지고 올 수 있습니다. 아래는 재질을 Mud로 초기화 한 다음 0.2초 간격으로 재질을 무작위로 바꾸는 코드입니다.

 

재질을 Mud로 초기화 한 다음 0.2초 간격으로 무작위로 재질 변경

local part = script.Parent

local materials = Enum.Material:GetEnumItems()

 

part.Material = Enum.Material.Mud

while wait(0.2) do

part.Material = materials[math.random(1, #materials)]

end

 

[파트 색 변경]

 

파트의 색은 BrickColor 또는 Color 속성 값에 의해 결정됩니다. BrickColor는 BrickColor.new 생성자를 통해 정해진 색 이름 또는 0 ~ 255 값을 각각 가지는 R, G, B 값들 지정하여 변경합니다. Color는 Color3.new 생성자로 0 ~ 1 값을 각각 가지는 R, G, B 값들을 지정하여 색을 변경합니다. 아래 코드는 Pastel Blue, Black, 무작위 색으로 변경하는 스크립트 코드입니다.

 

BrickColor.new 또는 Color3.new 생성자를 이용한 색 변경

local part = script.Parent

 

part.BrickColor = BrickColor.new("Pastel Blue")

wait(0.5)

part.Color = Color3.new(0, 0, 0)

wait(0.5)

 

while wait(0.2) do

part.BrickColor = BrickColor.Random()

end

 

[점프맵 레벨디자인]

 

점프 맵의 각 파트의 투명도, 재질, 색을 스크립트 코딩을 통해 여러분만의 점프 맵을 만들어 봅디다. 캐릭터 아래의 발판이 사라지면 게임 오버가 될 수도 있겠죠 ? 다음 호에서는 캐릭터와 발판이 상호작용하는데 사용되는 이벤트에 대헤 알아보도록 하겠습니다.

  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911