SpawnPoint에서 건너편 파트로 뛰어넘는 과정에서 네온 형태로 빛을 발하는 파트(Deadly Lava)를 만들어 플레이어가 닿는 즉시 사망하는 코드를 작성했다.
Deadly Lava 파트는 Color 값을 [215,115,69]으로, Material을 Neon으로 설정하여 용암 느낌을 연출해주면 된다.
Deadly Lava 파트는 LavaFloor로 이름을 재설정해주었다.
LavaFloor에 KillPlayer라는 스크립트를 생성해 주었다.
local lava = script.Parent 코드를 먼저 작성해준 뒤 Event(이벤트)를 세팅해 주었다.
모든 파트는 무언가가 닿았을 때 Event를 발생시킬 수 있다. 여기서는 Player가 LavaFloor에 닿았을 때 KillPlayer() 함수를 실행시키기 위해 이벤트를 사용한 것이다. 이 때 Connect를 사용해 함수를 연결시켜주면 된다. Touched Event를 적용시키고 싶은 오브젝트에 Dot(.)을 이용해주면 된다.(예 : Lava.Touched)
local function KillPlayer(otherPart)
end
lava.Touched:Connect(KillPlayer)
lavaFloor파트에 어떤 물체가 닿았을 때 KillPlayer()함수가 실행된다. 여기서 Connect를 연결해줄 때는 반드시 colon(:)을 사용해주면 된다.
KillPlayer() 함수 내 otherPart는 Parameter(매개변수)이다. 쉽게 말해 함수가 적용될 대상 변수를 최상위 개념으로 묶은 것이라고 보면 된다. 이 경우 otherPart는 lava에 Touch되어 KillPlayer() 함수가 호출될 무언가를 총칭하는 것을 의미한다.
Player가 lava에 닿았을 때 로블록스는 왼쪽 다리, 오른쪽 발 등 캐릭터 몸 부위가 실제로 닿은 부분을 추적한다. 이러한 세부 파트들을 Character Model이라고 일컫는다.
Character Model은 다음과 같은 특징을 가진다.
1) 머리, 무릎, 상체와 같이 개별 body part를 의미한다.
2) 플레이어가 입고 있는 Clothing과 Accessories를 포함한다.
3) 캐릭터 체력과 같이, Player와 연결된 다양한 속성들을 포함하는 특별한 오브젝트인 Humanoid를 포함한다.
4) Player의 이동을 제어하는 HumanoidRootPart를 포함한다.
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChild("Humanoid")
local function KillPlayer(otherPart) 함수 아래 다음과 같은 코드 블럭을 입력한다.
먼저 otherPart 매개변수를 가져올 partParent라는 지역변수를 선언해준다. 그리고 Player을 죽이기 위해 Humanoid 오브젝트를 가져와야 하는데 여기서 FindFirstChild 메서드를 사용해주면 된다. FindFirstChild 함수는 오브젝트에서 찾고자하는 자식계열을 가져오는 함수라고 생각하면 된다. 즉, Character Model이 가지고 있는 Humanoid 속성을 호출한 것이다.
if humanoid then
humanoid.Health = 0
end
if조건문을 사용해서 humanoid 변수를 조정한다. 루아 언어로 작성되는 조건문 안에서 변수의 값이 주어지지 않거나, 달랑 변수만 있는 경우 True/False로 인식되는 Boolean 로직을 갖게되기 때문에 여기서는 humanoid 변수 자체를 조건으로 가져올 수 있게 된다. 그리고 humanoid가 가지고 있는 health 속성을 호출하고 이를 0으로 만들어 player가 죽게 만들면 된다.
플레이 해보면 lavaFloor에 플레이어가 닿을 경우 Character Model이 각각의 body part로 분리되어 죽는 것을 확인할 수 있다.
local lava = script.Parent
local function KillPlayer(otherPart)
local partParent = otherPart.Parent
local humanoid = partParent:FindFirstChild("Humanoid")
if humanoid then
humanoid.Health = 0
end
end
lava.Touched:Connect(KillPlayer)
'게임 프로그래밍 > 로블록스 프로젝트' 카테고리의 다른 글
로블록스 Fading Trap 만들기 (0) | 2021.12.11 |
---|---|
로블록스에서 간단한 게임 만들기(파트 생기기/사라지기) (0) | 2021.12.09 |