[로블록스]#8 RemoteEvent & 서버 통신
UI 버튼을 눌렀다.
그런데 서버에서 반응해야 한다.
이때 반드시 이해해야 하는 것이 RemoteEvent다.
1. 왜 서버와 통신이 필요한가
로블록스는 기본적으로 멀티플레이 게임이다.
그래서 다음과 같은 작업은 반드시 서버에서 처리해야 한다.
- 재화 지급
- 아이템 획득
- 스탯 변경
- 데이터 저장
LocalScript에서 값을 바꾸는 건
“내 화면만 바꾸는 것”이다.
2. RemoteEvent란 무엇인가
RemoteEvent는 클라이언트와 서버를 연결하는 통신 통로다.
Unity로 치면 RPC(Remote Procedure Call)에 가깝다.
- 클라이언트 → 서버
- 서버 → 클라이언트
단, 로블록스에서는 이 방향을 명확히 구분해서 사용해야 한다.
3. RemoteEvent 기본 구조
RemoteEvent는 보통 ReplicatedStorage에 둔다.
ReplicatedStorage
└─ RemoteEvents
└─ BuyItem
이렇게 두면 서버와 클라이언트 모두 접근할 수 있다.
4. 클라이언트 → 서버 (FireServer)
UI 버튼을 눌렀을 때 서버에 요청을 보내는 전형적인 구조다.
-- LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local buyEvent = ReplicatedStorage.RemoteEvents.BuyItem
button.MouseButton1Click:Connect(function()
buyEvent:FireServer("Sword")
end)
이 시점에서는 아무것도 확정되지 않았다.
“요청”만 보낸 상태다.
FireServer는 RemoteEvent에 딸려 있는 함수다.
RemoteEvent:FireServer(...)
- 클라이언트 → 서버 단방향 통신
- LocalScript에서만 호출 가능
- 서버의 OnServerEvent가 받음
5. 서버에서 처리 (OnServerEvent)
서버 Script에서 요청을 받고 판단한다.
-- Script (Server)
buyEvent.OnServerEvent:Connect(function(player, itemName)
if player.leaderstats.Gold.Value >= 100 then
player.leaderstats.Gold.Value -= 100
print(itemName .. " 지급")
end
end)
중요한 포인트는 이것이다.
서버는 절대
클라이언트를 믿지 않는다.
가격, 조건, 보상은 항상 서버에서 검증해야 한다.
6. 서버 → 클라이언트 (FireClient / FireAllClients)
서버에서 처리한 결과를 다시 클라이언트에 알려줄 수도 있다.
- FireClient : 특정 플레이어
- FireAllClients : 전체 플레이어
buyEvent:FireClient(player, "Success")
UI 갱신, 이펙트, 알림은 이런 방식으로 처리한다.
7. 가장 많이 하는 실수
- LocalScript에서 재화를 직접 변경한다
- 가격 검증을 클라이언트에서 한다
- RemoteEvent를 Workspace에 둔다
- 서버 Script에서 UI를 만진다
이 실수들은 전부 치명적인 핵(치트) 포인트가 된다.
8. RemoteEvent 핵심 요약
- 클라이언트는 요청만 한다
- 판단과 확정은 서버가 한다
- RemoteEvent는 통신 통로다
- ReplicatedStorage에 둔다
- 서버는 클라이언트를 믿지 않는다
9. 다음 글 예고
다음 글에서는 데이터 저장(DataStore)을 다룬다.
서버를 껐다 켜도
데이터는 남아야 한다
반응형
'■ 로블록스 개발 노트 > 개발일지' 카테고리의 다른 글
| [로블록스]#10 - 게임 구조 설계(로비 -> 인게임) (0) | 2025.12.31 |
|---|---|
| [로블록스]#9 - 데이터 저장 (0) | 2025.12.30 |
| [로블록스]#7 - ScreenGUI (0) | 2025.12.30 |
| [로블록스]#6 - 입력 처리 & 카메라 제어 (1) | 2025.12.30 |
| [로블록스]#5 - 캐릭터 & Humanoid (0) | 2025.12.29 |
댓글