본문 바로가기

로블록스 개발 기초

로블록스 코딩 - 서서히 사라지는 블럭(1/2)

이전 코스에서 닿으면 캐릭터가 죽는 용암 블럭을 만들면서 우리는 플레이어의 행동 이벤트(Touched)를 통해 코드가 실행되는 방법에 대해서 배웠다. 이번 코스에서는 시간에 걸쳐서 서서히 사라지는 블럭을 만들어 보겠다.

준비하기

앞서 만든 용암 게임 환경에서 LavaFloor 위에 새로운 블럭을 만들자. 이 블럭의 이름은 FadingPlatform이다. 이 FadingPlatform은 게임 아바타가 닿으면 그 순간부터 서서히 사라지는 블럭이다. 하나씩 천천히 따라하면 된다.

먼저 아래의 이미지 처럼 스튜디오 게임편집창 내에서 Part를 사용하여 판데기를 만들자. Anchored 속성을 활성화 하는 것을 잊지말자.

 

FadingPlatform에 스크립트를 하나 삽입하고 이름을 FadeOnTouch라고 하자.

이 블럭도 캐릭터가 닿으면 사라지는 기능을 하므로 Touched 이벤트를 사용하고 호출될 함수를 만들자

local platform = script.Parent
 
local function fade()
 
end
 
platform.Touched:Connect(fade)

서서히 사라지는 블럭

Platform 을 한국어로 말할려니 적당한 명칭이 떠오르질 않는다. 플랫폼... 이건 한국에서 너무나 다른 의미로 사용되고 있어서 그냥 쓰면 이상하다. 그렇다고 디딤돌이나 버팀판 같은 의역을 할려니 뭔가 어색하고... 그래서 고민끝에 그냥 블럭이라고 통일시켜 버렸으니 그 부분은 이해바란다.

어쨋든, 이제 시간에 걸쳐서 서서히 사라지는 기능을 코딩해야 되는 시간이 왔다.

앞서 사라지는 블럭에 대한 튜토리얼을 통해서 Transparency와 CanCollide 속성을 사용하는 방법을 우리는 알고 있다. While문과 Wait() 함수를 사용하여 사라지고 생기고를 반복하는 블럭이었다. 이 튜토리얼에서는 점점 투명해지다가 결국은 사라지는 블럭을 만들 것이다. 플레이어에게 게임을 조금 쫀득하게 만들어 줄 수 있는 것이다.

이번에는 for문을 사용하겠다. lua언어에서의 for문의 문법은 다음과 같다.

  • Control variable(시작값 설정) - 반복문에 사용될 변수(count)를 초기화한다. 여기서는 count를 1로 설정.
  • End value(마지막값 설정) - count가 10이 될 때까지 반복한다.
  • Step increment(반복에 사용되는 단위, 설정안해도 됨) - 시작값 1에서 부터 마지막값 10까지의 얼마만큼의 단위로 더할지에 대한 값이다. 기본값이 1만큼 커지는 것으로써 여기서는 1이므로 없어도 상관없다.

실제 코드를 확인해보자.

1에서 10까지이므로 10번 반복하게 되고 platform의 Transparency를 0.1씩 증가시키면서 결국은 1로 만든다. 반복 과정중에 Wait()함수로 0.1초씩 기다림을 준다. 이 Wait()함수는 왜 필요할까? Wait() 함수 없이 테스트를 해보면 확인할 수 있다.  기다림없이 반복문이 빠르게 실행되어 Transparency가 너무 빨리 1이 되어서, 서서히 사라지는 모습이 아니라 즉시 사라지는 모습을 보게 될 것이다.

반복문의 반복이 끝나면 투명도가 1이 되어 있을 것이다. 반복문 실행후에 CanCollide 속성을 비활성화 해줘서 게임 아바타가 밑으로 떨어지게 만들어 주었다.

local platform = script.Parent
 
local function fade()
    for count = 1, 10 do
        platform.Transparency = count / 10
        wait(0.1)
    end
    platform.CanCollide = false
end
 
platform.Touched:Connect(fade)

다시 나타나게 하기

플레이어 아바타가 살기 위해서는 블럭이 사라지기 전에 점프를 해서 넘어가야 할 것이다. 그러면 잠시 후에 블럭은 다시 나타나야 한다. 이 경우는 서서히 나타나게 할 필요없이 3초 후에 즉시 나타나게 하자.

CanCollide 는 활성화, Transparency 속성은 0으로 만들어서 완전히 불투명하게 만들자.

local platform = script.Parent
 
local function fade()
    for count = 1, 10 do
        platform.Transparency = count / 10
        wait(0.1)
    end
    platform.CanCollide = false
    wait(3)
    platform.CanCollide = true
    platform.Transparency = 0
end
 
platform.Touched:Connect(fade)

 

다음글

2021.04.16 - [로블록스 개발 기초] - 로블록스 코딩 - 서서히 사라지는 블럭(2/2)