본문 바로가기

분류 전체보기

(52)
여러 오브젝트 사용되는 스크립트의 관리(1) 로블록스 정식 기초 튜토리얼의 마지막 과정에서 다수의 FadingPlatform 블럭을 사용하였다. 여러 블럭으로 만들기 위해 복제(Ctrl+D)를 하였는데 문제는 이 과정에서 FadingPlatform의 스크립트도 같이 복사되었다는 점이다. 여러 FadingPlatform 갯수만큼의 여러개의 똑같은 스크립트가 존재하게 되었다. 다수의 똑같은 스크립트의 존재는 리소스의 낭비라는 측면도 있고, 버그때문에 혹은 기능추가 삭제를 위해서 소스를 수정하기 했을때... 모든 스크립트를 똑같이 다 수정해 줘야한다. 이 튜토리얼에서는 여러개의 HP물약을 하나의 스크립트로 제어하는 과정을 보여준다. HP물약은 플레이어의 HP를 즉시 가득 채워준다. HP물약의 효과가 발동하면 바로 반투명하게 바뀌고 몇 초후에 다시 불투명..
여러 오브젝트 사용되는 스크립트의 관리(2) HP물약 리스트 반복문에 사용하기 앞선 튜토리얼에서 GetChildren() 함수의 반환값으로 HP물약 리스트를 얻었다. 여기서는 반복문을 사용하여 각 HP물약 오브젝트들에게 Touched 이벤트에 함수를 연결해줄 것이다. 이렇게 하면 게임이 시작하면 HealthPickups 폴더의 모든 게임오브젝트에 대해서 Touched 이벤트에 함수를 연결해줄 수 있다. 루아의 리스트를 for문에서 사용하는 문법은 다음과 같다. Index(인덱스): 1부터 시작해서 리스트의 길이까지의 값을 가진다. 사용하지 않을때는, _ 을 넣어두면 된다. Value(값): 리스트의 해당 인덱스의 값이다. 리스트안에 들어가있는 요소들의 값이므로 각 요소에 대한 이름으로 해두자. Array(리스트): 반복시킬 리스트. ipairs()..
로블록스의 클라이언트 서버 통신에 대하여 (3) 로블록스내에서 RemoteEvent, RemoteFunction 사용방법 앞선 내용에서 이미 RemoteEvent와 RemoteFunction은 ReplicatedStorage의 자식 오브젝트로 추가하는 방식이 일반적이라고 밝혔다. 그 이유로는 서버와 클라이언트 양쪽에서 접근이 가능해야 하기 때문에, 그 역할에 가장 알맞는 서비스가 ReplicatedStorage 이기 때문이다. Remote Event 사용법 Remote Event 를 사용하기 위해서는 RemoteEvent의 객체를 생성해야 한다. 이 RemoteEvent 객체는 서버와 클라이언트양쪽에서 접근이 가능해야 한다. 즉 ReplicatedStorage의 자식으로 RemoteEvent를 추가한다. ReplicatedStorage를 탐색기 창(E..
로블록스의 클라이언트 서버 통신에 대하여 (2) 실제 로블록스에서는 클라이언트와 서버는 어떻게 통신하나? 앞선 글에서 일반적인 클라이언트-서버 모델의 내용을 살펴봤다. 그럼 이제부터 로블록스에서는 위에서 말한 내용들을 어떻게 구현되어져 있는지에 대해 알아보자. 위의 내용은 일반적 프로그래밍에 대한 내용이라면 이제부터는 로블록스가 제공하는 방식에 대한 내용이다. 로블록스에서는 기본적으로 서버 스크립트와 로컬 스크립트를 다 작성해줘야 한다. 게임 내에서 어떤 행위는 서버에서만 처리되고 어떤 행위는 클라이언트에서만 처리된다. 양쪽 모두에서 처리가 필요한 행위도 있다. 예를 들어, 유저가 버튼을 눌렀고 그 행위가 게임 전반에 어떤 변화를 줘야 하는 것이라고 하자. 그럼 이제 로컬 스크립트와 서버 스크립트와의 통신이 필요하게 된다. 그때 사용되는 것이 Remo..
로블록스의 클라이언트 서버 통신에 대하여 (1) 클라이언트-서버 모델 로블록스는 많은 유저가 동시에 같이 플레이할 수 있는 멀티 플레이어 게임을 쉽게 만들 수 있게 해준다. 클라이언트-서버 모델을 채택하고 있는 로블록스는 수많은 클라이언트가 있고 그 클라이언트를 제어하는 서버가 있는 구조이다. 클라이언트는 피씨가 될 수도 있고, 모바일폰, 태블릿, 엑스박스나 플스같은 콘솔도 될 수 있다. 이런 여러 클라이언트들이 로블록스 서버에 연결되어서 동시에 여러 유저들이 같이 놀고 싸우고 탐험하는 경험을 제공해준다. 개인적인 생각엔 약간 스타크래프트의 유즈맵을 만드는 과정과 비슷하지 않는가? 하는 느낌을 받았다. 너무 고전 게임 얘기를 꺼내서 모르는 사람도 있을거라고 보지만... 유명하니깐~ 스타는 서버 클라이언트 모델은 아니지만. 어쨋든 느낌은 비슷하다. 클라..
로블록스 개발 - 이벤트 처리하기 로블록스에서는 기본적으로 콜백 처리를 수행하기 위한 방식으로 이벤트를 사용한다. 버튼을 클릭하거나 특별한 일이 게임내에 일어났을 때, 유저가 게임에 접속했을 때 등등에서도 이벤트를 통해 처리된다. 그리고 서버 클라이언트와의 통신에서도 이벤트를 사용하게 된다. 이벤트가 일어 날때까지 기다리는 방식과 이벤트를 기다리는 방식과 함수에 이벤트를 연결하는 방식이 있다. 이벤트를 기다리는 방식 Wait() 함수는 해당 이벤트가 일어날 때까지 멈춰버리는 역할을한다. 해당 이벤트가 발생하면 멈춤은 풀리고 다음으로 넘어가게 된다. 방식으로 봤을때, 단 한번만 수행됨을 알 수 있다. 아래 코드는 myPart에 Touched 이벤트가 발생되기를 기다렸다가, 발생했을 때, 출력문이 출력되는 모습을 보여준다. Wait()함수의..
로블록스 코딩 - UI로 점수 보여주기(3/3) 플레이어의 Died 이벤트 테스트를 해보면 알 수 있겠지만, 게임을 시작하고 죽어도 점수의 증가는 멈추지 않는다. 아직까지의 서버의 소스 코드는 1초 단위로 각 플레이어의 점수를 계속 1씩 증가시키고 있을 뿐이기 때문이다. 따라서 플레이어의 죽음을 알아 내서 죽고 나서는 더 이상 점수를 늘려주지 않는 코드를 넣어줘야 한다. 앞선 용암 튜토리얼에서도 다뤘던 Player 객체에서 캐릭터 모델에 이은 휴머노이드 객체을 찾는 과정이 필요한다. 이 휴머노이드 객체의 Died 이벤트를 통해서 플레이어가 죽었음을 알아 낼 수 있기 때문이다. 결국은 Died 이벤트에 연결하기 위한 과정임을 잊지 말자. local Players = game:GetService("Players") -- 캐릭터가 게임 입장했을때 불려질 함..
로블록스 코딩 - UI로 점수 보여주기(2/3) IntValue 데이터형 로블록스가 제공하는 리더보드는 leaderstats 라는 폴더에 값을 집어 넣는 것으로 구현된다는 얘기는 이미 했다. 그 값이란 것은 ntValue라는 데이터형이다... 아니, 객체라고 표현해야 더 맞는 말이겠다. Int데이터형을 저장하는 객체이다. Changed 이벤트를 가지고 있어서 IntValue 객체의 값이 변경될 때마다 이벤트를 발생시켜 준다는 점이다. 아무튼, leaderstats폴더에 우리는 점수값을 넣을 것이므로 IntValue의 이름(Name)은 "Points"라고 하고 값(Value)는 0으로 하자. 이름은 리더보드 UI에 같이 표시되는 값이다. Points 말고 원하는 이름도 괜찮다... 하지만, 여기 튜토리얼의 코드에 변경이 필요하니 그냥 Points로 하고..
로블록스 코딩 - UI로 점수 보여주기(1/3) 앞선 튜토리얼에서 게임 아바타가 떨어지면 죽는 용암과 서서히 사라지는 블럭에 관련된 내용과 코드에 대해서 살펴보았다. 서서히 사라지는 블럭 위를 뛰어 다니면서 초당 1점을 얻는 게임을 만들어 보자. 이 게임의 점수를 화면에 UI로 보여주는 과정을 살펴보겠다. 맵 구성 앞서 만들어 놓은 떨어지는 죽는 용암블럭을 좍 깔고 그 위로 서서히 사라지는 블럭(Fading Platform)들을 바둑판처럼 배치한다. Fading Platform은 복제(Duplicate, Ctrl+D)하여 여러개를 준비한다. 플레이어는 Fading Platform 위를 건너면서 점수를 얻고 최대한 많은 점수를 획득한 유저가 이기는 게임이다. 바둑판같은 Fading Platform 옆에는 스폰 포인트를 만들어서 플레이어가 점프해서 넘어가..
로블록스 코딩 - 서서히 사라지는 블럭(2/2) Touched 이벤트에 연결된 fade() 함수는 게임 아바타가 해당 블럭에 올라타면 발동된다. 게임 아바타는 블럭 위를 달리면서 완전히 사라지기 전에 다른 블럭으로 이동해야 한다. 달리는 동안에는 게임 아바타와 FadingPlatform 블럭은 계속 닿아있게 된다. 그러면 Touched 이벤트가 뛰어다닐 동안 연속해서 "계속" 발생하게 된다. 이벤트와 연결된 fade() 함수도 계속 다시 실행되기 때문에, 결국 예상한 실행 결과와는 다르게 FadingPlatform은 사라지지 않게 된다. 그럼 어떻게 해야할까? fade() 함수가 연속으로 다시 실행되기 때문에 생기는 문제이므로... 연속으로 실행되지 않게 만들면 된다. 아바타가 처음 FadePlatform 블럭에 올라탔을 때만 fade() 함수를 실행..