로블록스 Fading Trap 만들기

728x90

이전에 만들었던 Deadly Larva 배경에 새롭게 추가해주었다. 플레이어가 붉은색 파트를 딛고 반대편으로 넘어갈 수 있도록 할 것이다. 빨강색의 파트를 다음과 같이 만들고 이름은 FadingPlaform으로 바꾼 뒤 Anchored해준다.

 

플레이어가 FadingPlatform을 딛고 넘어가는데 게임성을 부여하기 위해 일시적으로 사라지게 하는 기능을 추가하려고 한다. 이 때 for 반복문을 사용해주면 된다.

 

for 루프문은 특정 시간 동안 어떤 코드가 반복적으로 실행되도록 하는 역할을 수행한다. for문의 문법은 다음과 같다.

1) Contorl variable : 반복문에 사용될 변수 count 초기화, 시작값 설정

2) End value : 루프가 정지할 때의 값, count가 10이 될 때까지 반복

3) Step increment(optional) : 루프가 돌때마다 얼마만큼 변수가 더해질 지를 결정하는 변수, 시작값인 1부터 마지막 값

                                       인 10까지 얼마만큼의 단위로 더해질 것인지 대한 값(디폴트 값은 1)

 

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

Fadingplatform에 플레이어가 닿으면 fade()함수가 실행되어야 하므로 Touched와 connect를 사용해 작성했다.

먼저 플랫폼이 사라지는 효과를 주기 위해서 먼저 count 변수를 1부터 시작해 10번 루프를 돌도록 만들었다. 그리고 플랫폼의 속성인 투명도(Transparency)가 count를 10번 나눈 것으로 설정하고 한 칸씩 루프를 돌 때 시간차를 0.1초씩 두도록 생성했다.

 

루프가 실행되면 count는 매 루프가 반복될 때마다 1씩 증가한다. 이는 플랫폼의 투명도가 매 0.1초마다 0.1씩(1/10) 증가하고, 1초 후에 full transparency에 도달하는 것을 의미한다.

 

 

플랫폼이 사라지고 나면 플레이어는 바닥에 떨어지게 될 것이다. 그리고 몇 초 후 플랫폼이 다시 돌아와야 한다.또한 플레이어가 떨어졌으면 다시 점프를 하지 못하도록 해야 한다. CanCollide 속성은 플레이어가 떨어졌는지 여부를 컨트롤하기 위해 필요하다.

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)

for 루프문이 돈 후에 플랫폼의 CanCollide 속성이 false가 되도록 하고 wait 함수를 사용해 몇 초를 기다리도록 한다. 그리고 Cancollide 속성이 다시 true로 돌아오게 만든 후 Transparency 속성을 0으로 되돌리면 된다.

 

루아 언어는 not을 사용할 수 있는데 위처럼 if조건문에서 많이 사용한다. not이 부정을 의미하기 때문에 왼쪽과 오른쪽이 동일한 코드 결과를 실행한다.

 

local platform = script.Parent

local 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)

플레이어가 플랫폼을 딛은 채 3초가 지나면 사라지도록 만들어야 한다. 하지만 기존의 함수는 Touch가 되면 fade() 함수가 실행되기 때문에 플레이어가 플랫폼 위에 있는 모든 순간에 fade함수가 계속 실행될 것이다. 우리가 원하는 것은 플레이어가 플랫폼 위에 있을 때 fade 함수가 한 번만 실행되는 것이기 때문에 몇가지 코드 수정이 필요했다.

 

먼저 bool타입의 isTouched라는 변수를 하나 생성해주었다. 그리고 if문을 사용하여 isTouched가 false일때만 fade() 함수가 실행되도록 했다. 그리고 fade 함수가 연속적으로 실행되는 것을 막기 위해 적절한 타이밍에 true/false를 세팅했다,

fade() 함수가 실행될 때, isTouched를 true로 만들고 실행이 완료되면 isTouched를 false로 만들었다. 이렇게 해야 플레이어가 플랫폼에 Touched 되었을 때 fade함수가 한번만 실행되게 된다. 

 

전체적인 코드 흐름을 보면 플레이어가 플랫폼에 올라섰을 때 Transparency가 0.1초 간격으로 0에서 1로 변화된 후 CanCollide가 false가 되면서 플랫폼이 완전히 사라지고 아래로 떨어지게 된다. 그리고 3초 후 다시 Cancollide와 Transparency가 원래 상태로 돌아오면서 플랫폼 형태가 다시 생기게 된다.

 

 

728x90