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?