본문 바로가기

로블록스 개발 중급

Player Tools 사용하기

목차

 

로블록스 게임에서 플레이어가 들고 다는 총이나 아이템들을 관리하는 간단한 방법으로 Tool을 사용하는 방법이 있다. Tool 오브젝트는 총, 칼, 음식같은 것들이 될 수 있다. 이번 튜토리얼에서는 레이저총의 모양을 한 Tool을 만들고 장착하는 방법, 그리고 장착과 사용할 때 사운드 효과를 내는 방법에 대해서 알아본다.

Tool 오브젝트

로블록스에서 Tool 오브젝트로  장착이나 사용가능한 아이템으로 만들 수 있다. Tool 오브젝트를 만들고 메쉬파트나 파트를 붙혀서 워크스페이스에나 게임내에서 눈으로 확인할 수 있다. 워크스페이스에서 Tool 오브젝트를 하나 추가하자. 그리고 Blaster라고 이름 변경한다.

Blaster 의 자식으로 MeshPart를 추가한다.

메쉬파트의 MeshId 속성을  rbxassetid://92656610 으로 변경한다. 로블록스에서 자체 제공하는 메쉬를 그대로 사용하면 된다. TextureId 속성은 rbxassetid://92658105 으로 변경한다.

그러면 게임 편집창에서 이미 레이저총 오브젝트를 발견할 수 있을 것이다. 찾을 수 없다면, 워크스페이스내에서 Blaster를 선택하고 F키를 누르자.

Tool 에는  Handle 이라는 이름의 파트가 필요하다. 이 Handle이 없으면 플레이어가 장착하려고 할때 땅에 그냥 떨어져 버린다. 방금 만든 MeshPart 의 이름을 Handle 로 변경한다..

Tool 오브젝트 저장

Tool 오브젝트는 collectable tools  starter tools 로 분류할 수 있다.

Collectable Tool

방금 만든 Blaster의 경우,  Workspace 에 그냥 놓여져 있는 상태일 것이다. 이런 스타일의 툴 오브젝트를 collectable tool 이라고 한다. 플레이어가 돌아다니다가 주워서 장착할 수 있는 아이템인 것이다. 플레이어가 장착하게 되면 이 아이템의 Hot Bar에 표시된다.

Starter Tool

탐색기창의 StarterPack에 저장되어 있는 툴 오브젝트는 Starter Tool 이라고 한다. 플레이어가 게임에 합류하거나 재소환될 때 플레이어의 백팩에 들어 있는 채로 시작하게 된다.

탐색기창에서 Blaster를 드래그하여 StartPack 의 자식으로 옮기자. 

이 상태에서 테스트를 해보면 플레이어의 백팩에 이미 Blaster가 들어가 있는 채로 소환되기 때문에 아래쪽의 Hot Bar에도 이미 Blaster가 존재하는 상태인 것을 확인할 수 있다. Hot Bar를 클릭하거나 버튼 1을 눌러서 장착 가능하다.

Collectable 이든 Starter 든지 모든 획득된 툴 오브젝트들은 미장착시에는 플레이어의 백팩(Back Pack)에 들어가게 된다.  그러다가 장착하게 되면 워크스페이스의 플레이어 내로 이동된다. 다시 미장착하게 되면 플레이어의 Backpack으로 되돌아간다. 

Tool 오브젝트의 속성들

Position / Orientation

툴의 속성중에서 grip 속성들에 대해 알아보자. GripPos 속성은 캐릭터 장착시의 툴 오브젝트의 그립의 위치를 설정한다. GripForward, GripRight 와 GripUp 은 캐릭터에 장착시에 툴 오브젝트의 회전과 관련된다. 지금까지의 Blaster는 캐릭터에 장착하면 손잡이 부분이 아니라 Blaster의 가운데를 잡고 있는 모습이었다.

GripPos 속성을 0, -0.4, 1.1 으로 변경한다. 변경후에는 캐릭터가 Blaster의 손잡이부분을 잡고 있는 것을 확인할 수 있다.

Hotbar 아이콘

기본값으로 Hotbar 에 툴 오브젝트가 표시되는 방법은 툴 오브젝트의 이름이 표시된다. 이것을 이미지로 바꿔보자. TextureId 속성을 rbxassetid://92628145 으로 변경하자. 그럼 아래 이미지처럼 이름 뿐이었던 핫바의 아이콘이 바뀌게 된다.

Blaster의 아이콘으로 바뀐 것을 확인해 보자.

Tooltip - 툴 오브젝트의 팁을 표시해보자

tooltip 은 툴오브젝트를 간단하게 설명하는 작은 텍스트이다. HotBar의 아이콘에 마우스를 가져다 놓으면 아이콘 위로 작게 표시된다. ToolTip 속성에 내용을 써 놓으면 툴팁을 표시할 수 있다. ToolTip 속성에  Blaster 라고 써 놓자

 

이벤트

툴 오브젝트는 대표적으로  Equipped, Unequipped, Activated 라는 세가지의 이벤트를 가지고 있다. 각각 이벤트에 대해 설명하자면, 

  •  Equipped 이벤트 : 툴이 캐릭터에 장착될 때 발생
  • Unequipped 이벤트 : 캐릭터에 장착된 툴이 해제될 때 발생
  • Activated 이벤트 : 툴이 동작될 때 발생. 예> Blaster에 레이저가 발사될 때. 장착하고 마우스 왼쪽 클릭으로 발사된다.

이 이벤트은 모두 LocalScript에서만 동작한다. 세가지 이벤트 모두 플레이어의 디바이스 클릭이나 터치에 의한 이벤트이므로 다른 플레이어와는 상관없는 이벤트이기 때문이다. 로블록스에서 입력 이벤트는 모두 로컬스크립트에서 처리한다.  물론 로컬 스크립트에서 처리된 입력 이벤트는 결과적으로 다른 플레이어에게 영향을 미칠 수 있다. 그럴 때에는 로컬 스크립트에서 입력 이벤트를 처리하고 나서 필요한 정보만 서버에 전달하는 방식으로 처리한다.

툴 오브젝트의 이벤트에 사운드 입히기

툴 오브젝트의 이벤트에서 사운드가 나오게 해보자. 장착시, 해제시, 발동시에 사운드가 출력되게 하는 것이다. 사운드가 출력되게 하기 위해서 먼저, 사운드 오브젝트를 만들자. Handle에 Equip 라는 이름의 사운드 오브젝트를 추가한다. SoundId 속성을 찾아서 rbxassetid://282906960 으로 변경한다. 이번에는 Activate 라는 이름의 사운드 오브트를 추가해서  SoundId 속성을 rbxassetid://130113322 으로 바꾼다.

코드 추가하기

앞서 추가한 Equip 사우드와 Activate 사운드를 컨트롤할 스크립트를 추가해 보자.

Blaster에 LocalScript 를 추가하고 ToolController 으로 이름을 변경하자.

 

로컬 스크립트의 내용은 아래와 같다.

local tool = script.Parent
 
local function toolEquipped()
    tool.Handle.Equip:Play()
end
  
local function toolActivated()
    tool.Handle.Activate:Play()
end
 
tool.Equipped:Connect(toolEquipped)
tool.Activated:Connect(toolActivated)
  1. local tool = script.Parent  :  script의 Parent는 Blaster를 뜻한다. tool 은 곧 Blaster.
  2. Equipped 이벤트는 toolEquipped () 함수에 연결되고, Activated 이벤트는 toolAcitvated() 함수에 연결된다.
  3. Blaster의 Handle의 Equip 사운드를 출력하기 위해서 tool.Handle.Equip 사운드의 Play() 함수를 사용하였다.

테스트를 해보고 사운드를 체크해보자.