공부하는 Nar
article thumbnail
Published 2021. 12. 23. 19:13
[디토랜드] Phase LuaScript

 

ServerScript

 

--사용할 Phase를 등록해요.
--Phase는 여러개도 등록할 수 있어요.
local LobbyState = Game:AddPhase("Lobby"
local PlayState = Game:AddPhase("Play"
local ResultState = Game:AddPhase("Result")

더보기

함수

RModePhase AddPhase(string phasename)

게임에 단계를 추가할 수 있어요. (추가할 단계 이름)

 


--서버와 클라이언트간 동기화되는 값을 등록하고 초기값을 설정한뒤, 값이 변경될때마다 호출되게 해요.
Game:AddReplicateValue("GameState""Lobby", Enum.ReplicateType.Changed, 0

더보기

함수

AddReplicateValue(string ValueName, float Data, ReplicateType Type, float Time, bool bSaveToStorage)

해당 객체에 서버, 클라이언트 간 동기화가 가능한 실수를 추가해요. (추가할 Value 이름, float 데이터, Enum.ReplicateType.타입 , 동기화 시간, 스토리지 저장 여부)

 

샘플

--서버 스크립트에서-------------

Game:AddReplicateValue("SomeNumber", 1, Enum.ReplicateType.Changed, 0, false) --서버와 클라이언트간 동기화되는 값을 등록하고 초기값을 설정한뒤, 값이 변경될때마다 호출되게 해요.
print(Game.SomeNumber .. " in Server")
 
--클라 스크립트에서-------------
print(Game.SomeNumber .. " in Client") --서버에서 값이 바뀌었지만 클라에서도 동일하게 출력돼요.
 


--------------------------------------------------------------------------
--각 Phase로 전환되었을때 처리할 이벤트 함수를 추가해요.

local function EnterLobbyState() --LobbyState Phase가 시작할때 호출할 함수에요.
    Game.GameState = "Lobby" 
    print("Enter Lobby State (Server Script)")
end
LobbyState.EnterEvent:Connect(EnterLobbyState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.

더보기

이벤트

EnterEvent

해당 애니메이션 상태가 시작될 때 호출되는 이벤트에요.

 


local function UpdateLobbyState(UpdateTime) --LobbyState Phase일때 계속 호출할 함수에요.                 
    print("Update Lobby State (Server Script)")
end
LobbyState.UpdateEvent:Connect(UpdateLobbyState) --해당 Phase일때 매프레임마다 호출되는 이벤트를 연결해요.

더보기

이벤트

UpdateEvent

해당 애니메이션이 실행중 일 때 호출되는 이벤트에요.

 


local function ExitLobbyState() --LobbyState Phase가 끝날때 호출할 함수에요.
    print("End Lobby State (Server Script)")
end
LobbyState.ExitEvent:Connect(ExitLobbyState) --해당 Phase가 끝날때 호출되는 이벤트를 연결해요.

더보기

이벤트

ExitEvent

해당 애니메이션상태가 끝날 때 호출되는 이벤트에요.

 


--------------------------------------------------------------------------
local function EnterPlayState() --PlayState Phase가 시작할때 호출할 함수에요.
    Game.GameState = "Play" 
    print("Enter Play State")
end
PlayState.EnterEvent:Connect(EnterPlayState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.



    -- Tip --
    EnterEvent, UpdateEvent, ExitEvent는 필요할때만 사용할 수 있어요.
    예를 들어 EnterEvent만 단독으로 사용하거나, ExitEvent만 단독으로 사용 할 수도 있어요.


--------------------------------------------------------------------------
local function EnterResultState() --ResultState Phase가 시작할때 호출할 함수에요.
    Game.GameState = "Result" 
    print("Enter Result State")
end
ResultState.EnterEvent:Connect(EnterResultState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.

--------------------------------------------------------------------------
wait(5) --5초를 기다린 뒤,
Game:ChangePhaseByName("Play") --이름에 해당하는 Phase로 전환해요.

wait(2) --2초를 기다린 뒤,
Game:ChangeToNextPhase() --다음 Phase로 전환해요. (만약 마지막 Phase면 처리되지 않아요.)

 

 

 

ClientScript

 

--서버 스크립트에서 추가한 Phase를 똑같이 등록해요.
local LobbyState = Game:AddPhase("Lobby"
local PlayState = Game:AddPhase("Play"
local ResultState = Game:AddPhase("Result")

--------------------------------------------------------------------------
--각 Phase로 전환되었을때 처리할 이벤트 함수를 추가해요
--서버 스크립트와 동일하게 작성하되, 
--Game.GameState = "Lobby" 같은 Phase 변경은 제외해요. (서버에서만 처리해야 해요.)

local function EnterLobbyState() --LobbyState Phase가 시작할때 호출할 함수에요.  
    print("Enter Lobby State (Client Script)")
end
LobbyState.EnterEvent:Connect(EnterLobbyState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.

--------------------------------------------------------------------------
local function EnterPlayState() --PlayState Phase가 시작할때 호출할 함수에요.
    print("Enter Play State (Client Script)")
end
PlayState.EnterEvent:Connect(EnterPlayState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.

--------------------------------------------------------------------------
local function EnterResultState() --ResultState Phase가 시작할때 호출할 함수에요.
    print("Enter Result State (Client Script)")
end
ResultState.EnterEvent:Connect(EnterResultState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.

--------------------------------------------------------------------------
--스크립트 제일 아래에 상태가 바뀔때마다 관련된 Phase 함수가 호출될 수 있도록 연결해요.
Game:ConnectChangeEventFunction("GameState"function(self, value) 
    Game:ChangePhaseByName(Game.GameState) 
end)

더보기

이벤트

ConnectChangeEventFunction(string ValueName, function FunctionName)

추가된 값이 변경 될 때 호출되는 이벤트에요. (Value 이름, 연결 함수)

 

샘플

local cube = Workspace.Cube
 
wait(1)
cube.SomeValue = 1
 
local function ChangeSomeValue()
print("ChangeSomeValue!")
end
cube:ConnectChangeEventFunction("SomeValue", ChangeSomeValue) --오브젝트의 "SomeValue" 라는 Value가 변경되면 ChangeSomeValue 함수를 호출해요.

 

 

 

 

Script Log

 

profile

공부하는 Nar

@NarS2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!