Game
Game
Game 전역 오브젝트에요.
이벤트
OnUpdateEvent
매 프레임마다 호출되는 이벤트에요. 연결함수 형식은 function(updateTime), updateTime 은 number 입니다.
-- 샘플 --
local cube = Workspace.Cube
local playTime = 0
local function UpdateEvent(updateTime) --OnUpdateEvent로 연결된 함수는 updateTime 인자가 고정적으로 들어가요.
playTime = playTime + updateTime --시간을 기록해요.
end
cube.OnUpdateEvent:Connect(UpdateEvent) --Game이나 오브젝트에 매프레임마다 호출되는 함수를 연결해요.
OnEnterPlayer
플레이어가 게임에 입장 시 호출되는 이벤트에요. 연결함수 형식은 function(enterPlayer), enterPlayer 은 Player 객체 입니다.
-- 샘플 --
local function EnterPlayer(player) --OnEnterPlayer로 연결된 함수는 player 인자가 고정적으로 들어가요.
print("Enter " .. player.Name)
end
Game.OnEnterPlayer:Connect(EnterPlayer) --Game에 플레이어가 게임에 입장하면 호출되는 함수를 연결해요.
OnLeavePlayer
플레이어가 게임에서 나갈 때 호출되는 이벤트에요. 연결함수 형식은 function(leavePlayer), leavePlayer 은 Player 객체 입니다.
-- 샘플 --
local function LeavePlayer(player) --OnLeavePlayer로 연결된 함수는 player 인자가 고정적으로 들어가요.
print("Leave " .. player.Name)
end
Game.OnLeavePlayer:Connect(LeavePlayer) --Game에 플레이어가 게임을 종료하면 호출되는 함수를 연결해요.
OnDeathCharacter
캐릭터가 죽을 때 호출되는 이벤트에요. 연결함수 형식은 function(deathCharacter), deathCharacter 는 Character 객체 입니다.
-- 샘플 --
local function DeathCharacter(character) --OnDeathCharacter로 연결된 함수는 character 인자가 고정적으로 들어가요.
print("Death " .. character.Name)
end
Game.OnDeathCharacter:Connect(DeathCharacter) --Game에 캐릭터가 죽으면 호출되는 함수를 연결해요.
OnSpawnCharacter
캐릭터가 스폰 될 때 호출되는 이벤트에요. 연결함수 형식은 function(spawnCharacter), spawnCharacter 는 Character 객체 입니다.
-- 샘플 --
local function SpawnCharacter(character) --OnSpawnCharacter로 연결된 함수는 character 인자가 고정적으로 들어가요.
print("Spawn " .. character.Name)
end
Game.OnSpawnCharacter:Connect(SpawnCharacter) --Game에 캐릭터가 생성되면 호출되는 함수를 연결해요.
함수
Phase AddPhase(string phasename)
게임에 단계를 추가할 수 있어요. (추가할 단계 이름)
-- 샘플 --
--서버 스크립트에서-------------
local LobbyState = Game:AddPhase("Lobby") --사용할 Phase를 등록해요.
local PlayState = Game:AddPhase("Play") --Phase는 여러개도 등록할 수 있어요.
local ResultState = Game:AddPhase("Result")
Game:AddReplicateValue("GameState", "Lobby", Enum.ReplicateType.Changed, 0) --서버와 클라이언트간 동기화되는 값을 등록하고 초기값을 설정한뒤, 값이 변경될때마다 호출되게 해요.
--각 Phase로 전환되었을때 처리할 이벤트 함수를 추가해요.
local function EnterLobbyState()
Game.GameState = "Lobby"
print("Enter Lobby State")
end
LobbyState.EnterEvent:Connect(EnterLobbyState) --해당 Phase로 변경됐을때 호출되는 이벤트를 연결해요.
local function UpdateLobbyState(UpdateTime)
print("Update Lobby State")
end
LobbyState.UpdateEvent:Connect(UpdateLobbyState) --해당 Phase일때 매프레임마다 호출되는 이벤트를 연결해요.
local function ExitLobbyState()
print("End Lobby State")
end
LobbyState.ExitEvent:Connect(ExitLobbyState) --해당 Phase가 끝날때 호출되는 이벤트를 연결해요.
local function EnterPlayState()
Game.GameState = "Play"
print("Enter Play State")
end
PlayState.EnterEvent:Connect(EnterPlayState)
local function EnterResultState()
Game.GameState = "Result"
print("Enter Result State")
end
ResultState.EnterEvent:Connect(EnterResultState)
wait(1)
Game:ChangePhaseByName("Game") --이름으로 Phase를 전환해요.
wait(1)
Game:ChangeToNextPhase() --다음 Phase로 전환해요. (만약 마지막 Phase면 처리되지 않아요.)
--클라 스크립트에서-------------
local LobbyState = Game:AddPhase("Lobby") --서버 스크립트에서 추가한 Phase를 똑같이 등록해요.
local PlayState = Game:AddPhase("Play")
local ResultState = Game:AddPhase("Result")
--각 Phase로 전환되었을때 처리할 이벤트 함수를 추가해요.
--서버 스크립트와 동일하게 작성하되, Game.GameState = "Lobby" 같은 Phase 변경은 제외해요. (서버에서만 처리해야 해요.)
local function EnterLobbyState()
print("Enter Lobby State")
end
LobbyState.EnterEvent:Connect(EnterLobbyState)
local function EnterPlayState()
print("Enter Play State")
end
PlayState.EnterEvent:Connect(EnterPlayState)
local function EnterResultState()
print("Enter Result State")
end
ResultState.EnterEvent:Connect(EnterResultState)
--스크립트 제일 아래에 상태가 바뀔때마다 관련된 Phase 함수가 호출될 수 있도록 연결해요.
Game:ConnectChangeEventFunction("GameState", function(self, value)
Game:ChangePhaseByName(Game.GameState)
end)
Phase GetPhase(string phasename)
단계 이름으로 단계를 불러올 수 있어요. (불러올 단계 이름)
-- 샘플 --
local phase = Game:GetPhase("Play") -- "Play" 단계를 불러와요.
Phase GetCurPhase()
현재 단계를 얻을 수 있어요.
-- 샘플 --
local phase = Game:GetCurPhase()
Phase ChangePhaseByName(string changephasename)
단계 이름을 통해 해당 단계로 변경할 수 있어요. (변경할 단계 이름)
-- 샘플 --
local phase = Game:ChangePhaseByName("Play") -- 단계를 "Play" 단계로 변경해요.
Phase ChangeToNextPhase()
다음 단계로 변경할 수 있어요.
-- 샘플 --
local phase = Game:ChangeToNextPhase()
void ConnectEventFunction(string customevent, function TargetFunction)
유저가 추가한 이벤트에 함수를 연결할 수 있어요. (이벤트 이름, 연결 함수)
-- 샘플 --
--서버 스크립트에서
local cube = Workspace.cube
--서버에서 이벤트 생성시 첫 인자로 player가 들어가요.
local function ServerSomeFunc(player)
print(player .. " - Call ServerSomeFunc")
end
Game:ConnectEventFunction("ServerSomeFunc", ServerSomeFunc) --Game에 "ServerSomeFunc"라는 이벤트 이름으로 ServerSomeFunc 함수를 연결해요.
--Game이 아닌 오브젝트에도 연결할 수 있어요.
--같은 대상에 등록된 이벤트만 호출할 수 있어요.
--같은 이름으로 여러 함수를 연결할 수 있지만 이 경우 호출할때 연결된 함수가 모두 호출돼요.
-----------------------------------
--클라 스크립트에서
local cube = Workspace.cube
--클라에서 이벤트 생성시 player 인자를 쓰지 않아도 돼요.
local function ClientSomeFunc()
print("Call ClientSomeFunc")
end
Game:ConnectEventFunction("ClientSomeFunc", ClientSomeFunc)
void DeleteObject(Object TargetObject)
오브젝트를 삭제할 수 있어요. (삭제할 오브젝트) 서버에서 사용하면 서버와 클라 오브젝트 모두 삭제되고 클라에서 사용하면 클라 오브젝트만 삭제해요
-- 샘플 --
local cube = Workspace.Cube
Game:DeleteObject(cube) --오브젝트를 파괴해요.
HitResultList LineTraceList(Vector Start, Vector Dir, number Distance)
설정된 시작 지점에서 원하는 방향으로 지정된 거리 만큼의 충돌 리스트들을 가져올 수 있어요. (시작 지점 Vector, 방향 Vector, 거리 값)
-- 샘플 --
local startPos = Workspace.Cube.Transform.Location
local dir = Vector.new(1, 0, 0)
local distance = 1000
local targetList = Game:LineTraceList(startPos, dir, distance) --시작 위치에서 지정 방향의 거리에 충돌체가 있으면 충돌 정보 리스트를 반환해요.
for i = 1, #targetList do
print(targetList[i].HitObject.Name) --충돌한 오브젝트에요.
print(targetList[i].HitLocation) --충돌한 오브젝트의 위치에요.
end
HitResultList LineTraceList(Vector Start, Vector Dir, number Distance, string UserCollisionName)
설정된 시작 지점에서 원하는 방향으로 지정된 거리 만큼의 유저가 추가한 충돌 타입과의 충돌 리스트들을 가져올 수 있어요. (시작 지점 Vector, 방향 Vector, 거리 값, 원하는 유저 충돌 타입 이름)
-- 샘플 --
--------서버 스크립트에서
Game:AddUserCollisionType("CollisionTag1") --유저 충돌 타입을 추가해요.
--------서버 또는 클라 스크립트에서
Workspace.Cube.Collision:SetCollisionType("CollisionTag1") --해당 오브젝트의 충돌 타입을 설정해요.
local startPos = Workspace.Cube.Transform.Location
local dir = Vector.new(1, 0, 0)
local distance = 1000
local targetList = Game:LineTraceList(startPos, dir, distance, "CollisionTag1") --시작 위치에서 지정 방향의 거리에 "CollisiongTag1"의
--충돌 타입을 가진 충돌체가 있으면 충돌 정보 리스트를 반환해요.
for i = 1, #targetList do
print(targetList[i].HitObject.Name) --충돌한 오브젝트에요.
print(targetList[i].HitLocation) --충돌한 오브젝트의 위치에요.
end
bool IsPublished()
반환값이 false이면 스튜디오(스튜디오로 접속), true이면 퍼블리쉬된 상태(플레이어로 접속)
-- 샘플 --
if Game:IsPublished() == true then
print("퍼블리시 게임이므로 Player에서 실행한것.")
else
print("아니므로 Studio에서 실행한것.")
end
void SetEnableChatLog(bool Enable)
로그 채팅창 출력 기능 활성, 비활성 설정(true로 설정 시 스크립트 print 가 채팅창에도 표시됨)
ObjectList FindObjects(Object RootObject, string ObjectName)
RootObject 하위의 오브젝트들 중 ObjectName 에 해당하는 오브젝트 리스트를 얻을 수 있어요.
-- 샘플 --
local objList = Game:FindObjects(Workspace, "Cube") --Workspace에서 이름이 Cube인 객체를 모두 가져와요.
for i = 1, #objList do --리스트앞에 #을 붙여 리스트의 길이를 가져올 수 있어요.
print(objList[i].Name)
end
ObjectList FindObjects(Object RootObject, ObjectType FindType)
RootObject 하위의 오브젝트들 중 ObjectType 에 해당하는 오브젝트 리스트를 얻을 수 있어요.
-- 샘플 --
local objList = Game:FindObjects(Workspace, Enum.ObjectType.StaticMesh) --Workspace에서 StaticMesh 객체를 모두 가져와요.
for i = 1, #objList do --리스트앞에 #을 붙여 리스트의 길이를 가져올 수 있어요.
print(objList[i].Name)
end
사용 가능한 부모 오브젝트 기능들
속성
이벤트
이름
설명
함수
이름
설명
추가된 값이 변경 될 때 호출되는 이벤트에요. (Value 이름, 연결 함수)
이름으로 자식 객체를 얻을 수 있어요. (찾고싶은 자식 객체 이름)
자식 객체의 리스트를 얻을 수 있어요.
캐릭터인지 확인할 수 있어요.
스테틱 메시인지 확인할 수 있어요.
FX인지 확인할 수 있어요.
Sound인지 확인할 수 있어요.
포인트 라이트인지 확인할 수 있어요.
스포트 라이트인지 확인할 수 있어요.
서피스 UI인지 확인할 수 있어요.
스크린 UI인지 확인할 수 있어요.
터치 UI인지 확인할 수 있어요.
아이템인지 확인할 수 있어요.
NPC인지 확인할 수 있어요.
스트립트인지 확인할 수 있어요.
Collider인지 확인할 수 있어요.
Widget인지 확인할 수 있어요.
Camera인지 확인할 수 있어요.
해당 오브젝트가 유효한지 확인 할 수있어요.
해당 오브젝트의 값이 유효한지 확인할 수 있어요.
해당 객체에 서버, 클라이언트 간 동기화가 가능한 벡터를 추가해요. (추가할 Value 이름, Vector 데이터, Enum.ReplicateType.타입 , 동기화 시간)
해당 객체에 서버, 클라이언트 간 동기화가 가능한 실수를 추가해요. (추가할 Value 이름, number 데이터, Enum.ReplicateType.타입 , 동기화 시간)
해당 객체에 서버, 클라이언트 간 동기화가 가능한 bool를 추가해요. (추가할 Value 이름, bool 데이터, Enum.ReplicateType.타입 , 동기화 시간)
해당 객체에 서버, 클라이언트 간 동기화가 가능한 문자열을 추가해요. (추가할 Value 이름, string 데이터, Enum.ReplicateType.타입 , 동기화 시간)
해당 객체에 서버, 클라이언트 간 동기화가 가능한 컬러를 추가해요. (추가할 Value 이름, Color 데이터, Enum.ReplicateType.타입 , 동기화 시간)
일정 시간뒤에 연결 함수가 호출되는 이벤트를 추가해요. (추가할 이벤트 이름, 시간, 연결 함수)
등록된 시간 이벤트를 삭제해요. (삭제할 이벤트 이름)
Last updated
Was this helpful?