본문 바로가기

로블록스 개발 기초

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

Touched 이벤트에 연결된 fade() 함수는 게임 아바타가 해당 블럭에 올라타면 발동된다. 게임 아바타는 블럭 위를 달리면서 완전히 사라지기 전에 다른 블럭으로 이동해야 한다. 달리는 동안에는 게임 아바타와 FadingPlatform 블럭은 계속 닿아있게 된다. 그러면 Touched 이벤트가 뛰어다닐 동안 연속해서 "계속" 발생하게 된다. 이벤트와 연결된 fade() 함수도 계속 다시 실행되기 때문에, 결국 예상한 실행 결과와는 다르게 FadingPlatform은 사라지지 않게 된다.

그럼 어떻게 해야할까? fade() 함수가 연속으로 다시 실행되기 때문에 생기는 문제이므로... 연속으로 실행되지 않게 만들면 된다. 아바타가 처음 FadePlatform 블럭에 올라탔을 때만 fade() 함수를 실행시키고 그 이후의 이벤트는 무시한다. 그리고 아바타가 다른 곳으로 넘어가면 이벤트를 다시 반응하게 만들어 주자.

연속 실행 방지 변수

Touched 이벤트의 연속 발생 자체를 막는 것은 어렵다. 그렇다면 이벤트에 연결된 fade() 함수의 연속 실행을 방지하면 된다. 그러기 위해서 변수를 하나 사용하자.

fade() 함수의 연속 실행을 방지하기 위한 변수를 하나 선언한다.

-- fade()함수의 연속 실행을 막아줄 변수 선언
local isTouched = false

 

fade() 함수가 실행되기 전에 이 isTouched 변수가 false 인가 true 인가를 확인하고 실행을 하면 된다.

local platform = script.Parent
 
local isTouched = false
 
local function fade()
    -- isTouched가 false 일때만, 실행된다.
    if not isTouched then
        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
end
 
platform.Touched:Connect(fade)

if 문을 사용하여 isTouched가 false 일 때만 사라지는 효과가 생기게 바꾸었다. false의 not은 true 이므로 여기서는 not 연산자를 사용하였다. 

if not isTouched then 
end

이것과 아래의 두개는 lua 언어에서는 논리적으로 같다.

if isTouched == false then 
end

if isTouched ~= true then 
end

isTouched 변수 셋팅/리셋팅하기

isTouched 변수를 이용하여 fade() 함수의 연속 실행을 방지하기 위해서는 적절한 타이밍에 true/false를 셋팅해줘야 한다. 

  • fade() 함수가 실행될 때, isTouched를 true로 만든다.
  • fade() 함수가 실행되고 실행이 완료된 후에는 isTouched를 false로 만든다. 이렇게 만들어 둬야 다시 반복해서 실행될 수 있다.
local function fade()
    if not isTouched then
        isTouched = true
        for count = 1, 10 do
            platform.Transparency = count / 10
            wait(0.1)
        end
        platform.CanCollide = false
        wait(3)
        platform.CanCollide = true
        platform.Transparency = 0
        isTouched = false
    end
end
 
platform.Touched:Connect(fade)

이제 테스트를 통해 코드가 완벽하게 동작하는지 확인해 보자. 게임 아바타가 FadePlatform위에 올라타고 나면 몇초후에는 FadePlatform 은 서서히 사라져야 한다. 사라진 이후 몇초뒤에 FadePlatform 블럭이 다시 나타나는지, 다시 올라타도 똑같이 반응하지 확인하자.

위의 영상처럼 FadePlatform 복사/붙혀넣기하여 여러개를 만들어보자. 탐색기에서 해당 FadePlatform 을 선택하고 마우스 오른쪽클릭을 하면 나오는 메뉴에서 Duplicate(Ctrl+D)을 선택하면 해당 게임오브젝트가 그대로 복제가 된다. 

 

다음글

2021.04.19 - [로블록스 개발 기초] - 로블록스 코딩 - UI로 점수 보여주기(1/3)