728x90
Local script
캐릭터 모델, Player Gui, PlayerScripts, ReplicatedFirst(여기에 넣으면 명령어 가장 빨리 읽음)
플레이어의 개인적인 활동에만 적용
플레이어 관련 식을 쓸 때 보통 첫 줄에 game.Players.LocalPlayer로 찾음
Script (서버 스크립트)
ServerScriptService, Workspace
게임 진행 상황, 아이템 관련 등 모든 플레이어가 공유하는 부분은 얘가 맡아서 진행
Touched는 Script에서만 가능
Remote Event: 서버와 클라이언트 사이에서 단방향 통신
보통 ReplicatedStorage의 자식으로 RemoteEvent를 추가
클라이언트 -> 서버 (local script)
-- 이 코드는 로컬스크립트에서 구현한다.
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- RemoteEventTest 를 찾아서 복제.
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
-- 서버로 해당 리모트 이벤트를 전달(Fire)
-- remoteEvent:FireServer()
-- 덧붙여서, 서버에 리모트 이벤트 전달할 때, 필요한 정보를 담아서 보낼 수도 있다.
remoteEvent:FireServer(BrickColor.Red(), Vector3.new(0, 25, 0))
-- 이 코드는 서버스크립트로 구현한다.(ServerScriptService에 Script추가)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 서버 스크립트에서도 같은 이벤트 객체를 생성
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
-- 새 블럭(Part) 생성 (서버에서 블럭을 생성)
local function onCreatePart(player, partColor, partPos)
print(player.Name .. " fired the remote event")
local newPart = Instance.new("Part")
newPart.BrickColor = partColor
newPart.Position = partPos
newPart.Parent = workspace
end
-- RemoteEvent 로 연결. 클라이언트의 FireServer() 에 반응하게 됨.
remoteEvent.OnServerEvent:Connect(onCreatePart)
서버 -> 클라이언트
-- 서버 스크립트에서 구현함, 특정 클라이언트 한명한테만 보내기
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
local function onPlayerAdded(player)
-- 추가된 플레이어에게 리모트 이벤트를 날림.
-- 관련 player 를 처음 파라메터로 지정.
-- MaxPlayers, RespawnTime은 추가로 커스텀하게 파라메터가 된다.
remoteEvent:FireClient(player, Players.MaxPlayers, Players.RespawnTime)
end
-- Players 서비스를 해서 플레이어가 접속할 때 호출될 함수 연결.
Players.PlayerAdded:Connect(onPlayerAdded)
-- 이 코드는 로컬 스크립트에서 구현
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
-- 추가로 보낸 maxPlaysers와 respawnTime을 파라메터로 받음.
local function onNotifyPlayer(maxPlayers, respawnTime)
print("Incoming server event...")
print(maxPlayers, respawnTime)
end
-- 서버로 부터 remoteEvent가 오면 호출할 함수 연결
remoteEvent.OnClientEvent:Connect(onNotifyPlayer)
-- 이 코드는 서버 스크립트에서 구현, 모든 클라이언트에게 보내기
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
local secondsRemaining = 5
-- 타이머가 끝날 때까지 루프.
for t = secondsRemaining, 1, -1 do
-- 모든 클라이언트에게 남은 시간을 전달
remoteEvent:FireAllClients(t)
-- 1초 기디림.
wait(1)
end
-- 이코드는 로컬 스크립트에서 구현
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = ReplicatedStorage:WaitForChild("RemoteEventTest")
-- 서버에서 모든 클라이언트들에게 타이머가 끝날때까지 매초 불려지게 됨.
local function onTimerUpdate(seconds)
print(seconds)
end
-- 이벤트에 함수 연결.
remoteEvent.OnClientEvent:Connect(onTimerUpdate)
Remote Function: 서버와 클라이언트가 서로 통신하는 상황 (결과값을 받고싶다면 사용)
Replicated Storage: 얘의 객체들은 서버와 로컬 양쪽에서 접근 가능
728x90
'공부 > Roblox Studio' 카테고리의 다른 글
[로블록스 스튜디오] 위치값 새로 할당, 하이라이트 오류, model 위치값 참조하는 법 (0) | 2023.10.20 |
---|---|
[로블록스 스튜디오] 오류 없이 script를 가진 parent 삭제하기 / transform function error script that implemented this callback has been destroyed while calling callback (0) | 2023.10.20 |
[로블록스 스튜디오] 디버깅을 위해 렌더링이 일시 중지 됨 고치기 (0) | 2023.10.17 |
[로블록스 스튜디오] 로블록스 스튜디오의 언어 Lua에 대한 사항들 (1) | 2023.10.05 |
[로블록스 스튜디오] Pet Simulation 강좌 따라하기 (0) | 2023.10.05 |