공부/Roblox Studio

[로블록스 스튜디오] script들의 차이점 local script, server script

굴러다니다니 2023. 10. 16. 16:51
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