본문 바로가기

로블록스 개발 중급

(30)
자연스럽게 열리는 문 만들기(2) Constraint 추가하기 constraint는 두 개의 attachment를 연결해서 특정한 방식으로 움직이게 해주는 역할을 한다. 이 도어에서는 사용할 Constraint는 HingeConstraint 인데, 이름에서도 알 수 있듯이 두 개의 attachment를 연결해서 경첩의 움직임과 같은 기능을 가지고 있다. DoorFrame 파트에 HingeConstraint를 추가한다. HingeConstraint의 속성들 중에서 Attahcment0을 찾고 그 안에 DoorAttachment를 넣는다. 같은 방법으로 Attachment1을 찾아서 FrameAttachment를 넣는다. 속성창을 보면 아래의 이미지와 같을 것이다. 플레이를 하여 테스트해보자. 본인도 테스트를 해보니 아래의 동영상처럼 도어가..
자연스럽게 열리는 문 만들기(1) 목차 대다수의 게임엔진들이 가지고 있듯이, 로블록스 게임에서도 3D 물리엔진이 기본 제공된다. 현실성있는 움직임을 보여주기 위해서 물리엔진을 사용하면 꽤 편리할 수 있다. 예를 들어, 캐릭터가 지나가면 자연스럽게 열리는 문을 생각해보자. 물리 엔진없이 구현하려면 여러가지 생각할 것도 많고 무엇보다 현실의 문과 다르게 움직일 것이다. 이런 경우는 물리 엔진을 사용해서 구현하는 것이 편리하다. 캐릭터의 움직임에 반응하여 열리는 문을 만들어 보겠다. 현실의 문의 경첩은 문이 움직이는 회전 운동에도 영향을 주고 최대한 꺽일 수 있는 제한도 정해 준다. 여기서는 최대한 현실의 경첩 움직임을 흉내 내보자. 도어 3D 모델 아래의 이미지와 같은 도어 모델을 준비하자. 로블록스의 정식 튜토리얼에 나오는 모델이므로 분명..
파트에 붙어 있는 GUI 구현 이번 포스팅에서는 실제 3D 게임내에 융합된 UI에 대한 내용이다. 표시판이나 광고판같이 게임과 분리되지 않은 파트에 직접 GUI를 붙이는 방법에 대해 알아보겠다. 이런 GUI를 위해서도 이미 사용될 객체가 미리 존재한다. SurfaceGui라는 객체를 사용하면 로블록스 게임에 존재하는 3D 모델의 표면에 GUI를 붙힐 수 있다. Surface GUI 만들기 파트를 하나 생성하고 이름을 InfoBoard 로 바꾸자. 이 파트에 SurfaceGui를 붙힐 것이다. 사이즈를 15, 18, 1로 만들어서 표지판처럼 넓게 변경. 생성한 파트의 자식으로 SurfaceGui를 추가하여 InfoSurfaceGui 로 이름 붙힌다. 그 안에는 이전 ScreenGui처럼 프레임을 넣어 사용할 수 있다. InfoSurfa..
가까이 가면 나오는 GUI - Proximity Prompts 3D 게임에서 자주 사용하는 GUI로, 어떤 사물에 가까이 다가갔을때 보여주는 GUI가 있다. 예를 들어 화면에 상자가 있다고 하면 처음엔 그냥 상자만 보이지만, 플레이어가 충분히 가까이 다가가면 "Open"이라는 버튼이 나오거나 설명이 나오는 식의 GUI를 많이 접해 봤을 것이다. 이런 방식을 Proximity Prompt라고 한다. 프로젝트 편집 이번 포스팅은 Dungeon Delve라는 로블록스에서 제공하는 데모게임을 편집하면서 진행하겠다. 프롬프트 만들기 위의 동영상에서 보듯 게임상에서 뭔가를 알려주는 GUI창을 프롬프트라고 한다. 로블록스 게임 내에서 제공하는 기본 프롬프트를 만드는 떄는 ProximityPrompt 객체를 통해 구현할 수 있다. 이 근접프롬프트는 Attachment, BaseP..
버튼 만들기 목차 이전 튜토리얼에서 스코어 바 GUI 만들기를 하였다. 이번 포스팅에서는 스크린에 실제 작동하는 버튼을 만들겠다. 버튼은 메뉴에서도 쓰일 수 있고, 스킬 버튼이라든지 GUI에서 다용도로 쓰인다. 참고로 이 튜토리얼에 사용하는 맵은 Gold Rush라는 로블록스에서 제공하는 리소스이다. 링크를 타고 들어가서 편집을 통해 로블록스 스튜디오로 불러 들여서 사용하자. 버튼 타입 버튼 오브젝트는 두가지 타입의 버튼 객체가 있다. 텍스트 기반 버튼과 이미지 기반의 버튼. TextButton : 텍스트 버튼은 텍스트 라벨와 비슷하다. 다만, 텍스트 버튼은 클릭이 가능해서 버튼의 역할을 한다는 점이 다르다 ImageButton : 이미지 버튼도 이미지 라벨과 비슷하고 많은 속성을 공유한다. 버튼 만들기 이 포스팅에..
스코어 바 만들기(2) 목차 이미지 추가 로블록스 GUI에서 이미지는 ImageLabel이라는 객체를 사용한다. 스코어바 프레임에 ImageLabel 객체를 추가한다. 이 이미지라벨을 왕관 아이콘 이미지로 바꾸자. 이미지 라벨의 속성을 살펴보고 Image속성을 선택하자. 디폴트 값은 GuiImagePlaceholder.png 인 Image속성을 찾아서 rbxassetid://5673786644 으로 바꿔주자. 로블록스에서 제공해주고 있는 이미지이다. 그러면 아래의 이미지의 모습을 보일 것이다. 이미지를 추가했으니 사이즈를 조정해주자. Size의 스케일을 아래와 같이 변경하면, 아래의 이미지의 모습을 보이게 된다. X는 가로의 프레임의 길이에 대응하면서 옆을 길게 늘어지게 된 모습이다. 프레임의 가로 길이의 1.25배이므로 프레..
스코어 바 만들기(1) 목차 게임에서 화면에 보여주는 정보나 버튼등, 무엇이든지 플레이어와 게임이 소통할 수 있게 해주는 인터페이스를 UI라고 하고 그것을 화면에 보여주는 식이면 GUI, 풀어서 쓰면 , 그래픽 유저 인터페이스. 이전 튜토리얼에서 로블록스가 기본적으로 제공하는 리더보드의 사용법에 대해 알아본 적이 있다. 이번 튜토리얼에서는 정해진 GUI말고 개발자가 원하는 모양의 GUI를 만드는 방법을 알려준다. 참고로 이 튜토리얼에 사용하는 맵은 Gold Rush라는 로블록스에서 제공하는 리소스이다. 링크를 타고 들어가서 편집을 통해 로블록스 스튜디오로 불러 들여서 사용하자. 아래의 이미지와 같이 가운데 위의 반투명 배경에 왕관이미지와 점수를 보여주는 GUI를 만들자. 로블록스 게임에서 GUI를 만들기 위해서는 ScreenG..
세이브와 로드 목차 로블록스 게임중에 게임상태를 저장하고 읽어오는 방법에 대한 튜토리얼입니다. 게임중에 레벨, 게임머니, 경험치, 아이템 관리를 할려면 데이터 세이브와 로드는 필수적이겠죠. 로블록스 스튜디오에서 접근 허용하기 기본적으로 로블록스 스튜디오에서 로블록스 서버에 데이터를 저장하고 로드를 허용하지 않는다. 스튜디오에서 테스트를 하기 위해서는 셋팅에서 활성화를 시켜줘야 한다. 우선 해당 게임을 로블록스 서버로 배포를 해 놓은 상태에서 아래의 게임셋팅에서 Security 탭에서 API 서비스에 접근을 허용해주자. Enable Studio Access to API Services 를 허용하고 저장. DataStoreService 사용하기 로블록스에서 게임 데이터를 저장/로드를 하기 위해서는 DataStoreServ..
여러 오브젝트 사용되는 스크립트의 관리(1) 로블록스 정식 기초 튜토리얼의 마지막 과정에서 다수의 FadingPlatform 블럭을 사용하였다. 여러 블럭으로 만들기 위해 복제(Ctrl+D)를 하였는데 문제는 이 과정에서 FadingPlatform의 스크립트도 같이 복사되었다는 점이다. 여러 FadingPlatform 갯수만큼의 여러개의 똑같은 스크립트가 존재하게 되었다. 다수의 똑같은 스크립트의 존재는 리소스의 낭비라는 측면도 있고, 버그때문에 혹은 기능추가 삭제를 위해서 소스를 수정하기 했을때... 모든 스크립트를 똑같이 다 수정해 줘야한다. 이 튜토리얼에서는 여러개의 HP물약을 하나의 스크립트로 제어하는 과정을 보여준다. HP물약은 플레이어의 HP를 즉시 가득 채워준다. HP물약의 효과가 발동하면 바로 반투명하게 바뀌고 몇 초후에 다시 불투명..
여러 오브젝트 사용되는 스크립트의 관리(2) HP물약 리스트 반복문에 사용하기 앞선 튜토리얼에서 GetChildren() 함수의 반환값으로 HP물약 리스트를 얻었다. 여기서는 반복문을 사용하여 각 HP물약 오브젝트들에게 Touched 이벤트에 함수를 연결해줄 것이다. 이렇게 하면 게임이 시작하면 HealthPickups 폴더의 모든 게임오브젝트에 대해서 Touched 이벤트에 함수를 연결해줄 수 있다. 루아의 리스트를 for문에서 사용하는 문법은 다음과 같다. Index(인덱스): 1부터 시작해서 리스트의 길이까지의 값을 가진다. 사용하지 않을때는, _ 을 넣어두면 된다. Value(값): 리스트의 해당 인덱스의 값이다. 리스트안에 들어가있는 요소들의 값이므로 각 요소에 대한 이름으로 해두자. Array(리스트): 반복시킬 리스트. ipairs()..