ABOUT ME

천리 길도 한 걸음부터

Today
Yesterday
Total
  • 로블록스 데이터 저장
    로블록스/첫 프로젝트

    안녕하세요.

     

    이번 글에서는 데이터 저장을 하는 방법에 대해 다뤄 보려고 합니다.

     

    우선 사용한 방식은 도구상자 / 데이터 매니저를 사용하였습니다.

     

     

    보다 더 상세한 내용은 

     

    https://www.youtube.com/watch?v=qYXex74gGYI

     

    제가 참고했던 유튜브 링크를 남겨 드립니다.

     


     

    DataManager와 ProfileService는 크게 건드리지 않고

     

    현재 사용 하려는 곳은

    이 공간 입니다.

     

     

    초기 단계는 레벨을 0에서 시작하도록 만들었습니다.

     

    이제 제가 원하는 기능 구현은 플레이어가

     

    일정 영역에서 Prompt와 상호작용을 하면

     

    Level이 1로 올라가게 되는 것이 첫 번째이고.

     

    두 번째는 재접속을 했을 때 데이터를 유지하면서 로비에서 텔레포트를 타면 Level1의 Spawn 위치로 이동되게 하는 것입니다.

     


     

    위 영상과 같은 방법으로 해도 상관은 없지만, 데이터를 저장할 곳이 많다면 매번 데이터를 불러오는 과정이 필요했고

     

    실시간으로 동기화하는 작업에는 적합하지가 않았습니다.

     

     

    두 번째로 데이터를 스크립트마다 미리 불러온다고 해도 관리 측면에서 어려웠습니다.

     

     

    그렇기에 선택한 방법이

     

    1. 게임 시작 시 데이터를 불러와 특정 공간에 담아둔다.

    2. 특정 공간의 데이터를 실시간으로 읽는다.

    3. 이 특정 공간의 데이터가 값이 변경되면 기존 데이터를 같이 업데이트를 해준다.

     


     

    첫 번째로 서버스크립트로 'PlayerInfo'를 만들어 주었습니다.

     

    위 영상과 같이  DataManager에서 데이터를 받아 오는 과정은 같으나 간략하게 보자면

     

     

    플레이어가 로드(PlayerAdded)가 되고 나면

     

    플레이어 하위에 playerInfo라는 폴더를 생성해 주고

     

    이 폴더에 IntValue 값으로 'level'을 지정해 주었습니다.

     

    이후 DataManager의 데이터를 불러오고

     

    생성한 IntValue 값에 동기화해 주었습니다.

     


     

     

    이대로 게임을 실행해 보면, 에러가 발생하는 걸 볼 수 있는데요

     

     

     Roblox 스튜디오에서 API 액세스가 활성화되지 않았기 때문에 Data를 저장할 수 없다는 뜻입니다.

     

     

    해결방법

     

     

    게임 설정 / 보안 / Studio의 API 서비스 이용 활성화

     


     

     

    다음은 SaveZoneLevel1의 파트와 그 하위에 Prompt를 두었습니다.

     

     

    캐릭터가 파트에 가까이 다가가가면 활성화가 될 것입니다.

     

     

    Prompt 속성에 보시면 MaxActivationDistance라고 있는데

     

    이것이 Prompt가 보이게 될 거리를 뜻합니다.

     


     

    다음은 Local 스크립트에 Prompt를 받아와 Triggered를 연결시켜 주었습니다.

     

    캐릭터가 프롬프트와 상호작용 하면 이벤트가 발생되어 Print가 실행되는데

     

    saveZoneLevel1 Prompt : Prompt

    Triggered : 트리거 이벤트

    Connect : 뒤에 있는 인자를 연결

    function : 함수

     

    라고 보시면 됩니다.

     

     


     

    다음은 데이터를 업데이트해 주었습니다.

     

    우선 Players 하위 제 캐릭터에 playerInfo의 폴더와 level의 IntValue가 잘 적용되어 있는 것을 볼 수 있습니다.

     

    다음은 로컬과 서버의 통신을 도와줄 RemoteEvent를 만들어 주었습니다.

     

     

     

    서버스크립트 PlayerInfoUpdate에서

     

    OnServerEvent로 신호를 받으면 실행될 로직을 구현하였습니다.

     

    UpdateData의 인자는

     

    player와, 키, 그리고 데이터입니다.

     

     

    이 데이터는 PlayerInfo 하위의 IntValue의 값이 됩니다.

     

     

    즉 DataManager의 Level에 IntValue 값을 업데이트하여 주는 동작 구현입니다.

     


     

    마지막 코드를 보겠습니다.

     

     

    local Players = game:GetService("Players")

    Players 서비스에 접근하여 현재 게임에 접속해 있는 모든 플레이어의 정보를 관리할 수 있습니다.

     

    local player = Players.LocalPlayer

    현재 로컬에서 플레이 중인 player에 해당합니다.

     

    local playerInfo = player:WaitForChild("playerInfo")

    저희가 만든 폴더입니다.

     

    local playerLevel

    받아온 데이터를 담을 변수입니다.

     

    local PlayerInfoUpdateEvent = ReplicatedStorage:WaitForChild("PlayerInfoUpdateEvent")

    ReplicatedStorage 하위에 생성한 RemoteEvent입니다.

     

    playerLevel = playerInfo:WaitForChild("level")

    playerInfo 내에서 level을 찾아 변수에 할당한 뒤 제어 하는 모습입니다.

     

    FireServer

    서버로 이벤트를 전송합니다.

     


     


    추가로 기존 로비에서 서버로부터 신호를 받고 OnClientEvent로 실행하는 로직에서

     

    level에 따라 스폰 위치를 다르게 해 주었습니다.

     

     

    즉 저장한 level의 데이터가  1이라면

     

    level1 SpawnPos 위치로 텔레포트할 때 스폰이 될 거고

     

     (else) 아니 라면기존 위치대로 스폰이 될 것입니다.

     

     

     

     

     

     


     

    로블록스의 글은 여기까지 하겠습니다.

     

    미니게임 및 콘텐츠나 애니메이션 등 보다 많은 것을 직접 다루면서 글을 올리려고 했었는데,

     

    기능 및 예외처리 위주의 작업이 될 것 같았고..

     

     

    로블록스로 게임 출시나 무언갈 하려는 것은 아닌 관계로

     

    더 이상 추가적인 것을 만드는 것보다는 여기서 마무리를 하게 되었습니다.

     

     

     

    기회가 된다면 로블록스 관련하여 다시 글을 올리는 날이 오기를 기다리겠습니다.

     

     

     

     

    감사합니다.

     

    '로블록스 > 첫 프로젝트' 카테고리의 다른 글

    로브록스 재미 요소 추가  (0) 2024.11.11
    로블록스 텔레포트  (0) 2024.11.05
    로블록스 루아 스크립트  (0) 2024.11.05
    로블록스 스튜디오 작업공간  (0) 2024.11.02
    로블록스  (0) 2024.11.01

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net