# 오브젝트 참조

## 개요

Service, Part, Player 등 오브젝트의 유형에 따라 다양한 방식으로 필요한 오브젝트를 가져올 수 있습니다.

## Service 가져오기

Service란 게임 내에서 특정한 기능을 수행하도록 설계된 기본 제공 시스템을 의미합니다.

```lua
local Workspace = game:GetService("Workspace")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerScriptService = game:GetService("ServerScriptService")
local ServerStorage = game:GetService("ServerStorage")
local StarterGui = game:GetService("StarterGui")
local StarterPlayer = game:GetService("StarterPlayer")
local Players = game:GetService("Players")
...
```

## 부모 오브젝트 참조

<pre class="language-lua"><code class="lang-lua">-- 오브젝트의 부모
<strong>local ParentPart   = Part.Parent
</strong>
-- 스크립트의 부모
local ScriptParent = script.Parent
</code></pre>

## 자식 오브젝트 참조

```lua
-- 주소값으로 오브젝트 반환 (오브젝트가 로드되기 전이면 실패할 수 있습니다.)
local ChildPart1 = Workspace.ChildPart

-- 이름에 해당하는 첫번째 오브젝트 반환
local ChildPart2 = Workspace:FindFirstChild("ChildPart") 

-- 오브젝트가 반환될때까지 대기 
local ChildPart3 = SomePart:WaitForChild("ChildPart")
```

## 모든 자식 가져오기

Part의 계층 구조가 아래와 같을 때

<div align="left"><img src="https://2697870212-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhRPi87oM9ttlk5nyu7L7%2Fuploads%2Fgit-blob-67758eec7984a0ee51239a454c743f91b8ae2166%2Fimage.png?alt=media" alt=""></div>

```lua
local Part = Workspace:WaitForChild("Part")


-- 부모 오브젝트(Part)의 모든 첫번째 자식 오브젝트를 반환
local Children = Part:GetChildren() 

for _, child in ipairs(Children) do
    -- ChildPart1, ChildPart2 출력
    print(child.Name) 
end


-- 부모 오브젝트(Part)의 모든 하위 자식 오브젝트를 반환
local Descendants = Part:GetDescendants() 

for _, descendant in ipairs(Descendants) do
    -- ChildPart1, ChildPart1-1, ChildPart2, ChildPart2-1 모두 출력
    print(descendant.Name)
end
```

## 모든 플레이어 가져오기

```lua
local Players = game:GetService("Players")
local PlayerList = Players:GetPlayers()

for i = 1, #PlayerList do
    print(PlayerList[i])
end
```

## LocalPlayer 가져오기 (LocalScript)

```lua
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
```

## Player로 Humanoid 가져오기

```lua
local Character = Player.Character
local Humanoid = Character:FindFirstChild("Humanoid")
local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
```

## Humanoid로 Player 가져오기

```lua
local Character = Humanoid.Parent
local Player = Players:GetPlayerFromCharacter(Character)
```
