> For the complete documentation index, see [llms.txt](https://docs.overdare.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.overdare.com/korean/manual/script-manual/advanced-gameplay-systems/tween.md).

# 트윈

## 개요

트윈(Tween)은 오브젝트의 속성을 부드럽고 자연스럽게 변화시키는 데 사용됩니다. 트윈을 이용하여 오브젝트의 위치나 회전, 크기 등 다양한 속성을 애니메이션화하여 게임에 몰입감 있고 풍부한 시각적 효과를 더할 수 있습니다.

## 특징

* 트윈은 코드의 간결성과 성능 면에서 뛰어나며, 다양한 효과를 쉽게 구현할 수 있도록 도와줍니다.
* 트윈은 다양한 **Easing 스타일**을 지원해 부드럽고 자연스러운 애니메이션을 제공합니다.
* 트윈은 내부적으로 효율적으로 처리되며, 프레임별 업데이트보다 성능 부담이 적습니다.
* 트윈은 완료 후 자동으로 종료되며, **Completed 이벤트**를 통해 후속 작업을 쉽게 처리할 수 있습니다.

## 구성 요소

* **TweenService :** 트윈을 생성하고 관리하는 서비스입니다.
* **TweenInfo :** 트윈의 동작 방식을 정의하는 오브젝트로 변화 시간, 방향, 반복 횟수 등을 설정합니다.
* **TweenGoals :** 트윈으로 변화시킬 속성 값을 정의합니다.

## 사용 방법

### 1. 트윈 생성하기

**TweenInfo.new 함수**로 애니메이션의 지속 시간, 가속 및 감속 스타일, 반복 횟수 등 트윈 애니메이션의 동작 방식을 정의할 수 있습니다.

오브젝트의 위치나 회전 등 애니메이션을 적용할 속성은 **TweenGoals 테이블**에 설정합니다.

```lua
local TweenService = game:GetService("TweenService")
local Part = script.Parent

-- 트윈 정보 설정
local TweenInfoData = TweenInfo.new(
    5,                         -- 시간             
    Enum.EasingStyle.Linear,   -- 속도 변화 스타일
    Enum.EasingDirection.Out,  -- 속도 적용 방향
    0,                         -- 트윈이 반복되는 횟수(-1이면 무한)     
    false,                     -- 왕복 여부
    0                          -- 시작전 지연 시간
)

-- 트윈으로 변경할 속성
local TweenGoals = 
{
    Position = Vector3.new(-400, 50, -350)
}

local Tween = TweenService:Create(Part, TweenInfoData, TweenGoals)
```

### 2. 트윈으로 변화시킬 속성 설정

TweenGoals에 어떤 속성을 설정하느냐에 따라 트윈의 기능이 달라집니다.

<table><thead><tr><th width="180.6666259765625">DataType</th><th>Usage Example</th></tr></thead><tbody><tr><td>CFrame</td><td>CFrame</td></tr><tr><td>Vector3</td><td>Position, Orientation, Size</td></tr><tr><td>Color3</td><td>Color</td></tr><tr><td>number</td><td>Transparency</td></tr><tr><td>bool</td><td>CanCollide</td></tr><tr><td>UDim2</td><td>Position, Size</td></tr></tbody></table>

### 3. 트윈 실행

**TweenService:Create 함수**에 트윈을 적용할 대상과 미리 설정한 **TweenInfo**와 **TweenGoals**을 전달하여 호출하면 트윈을 생성할 수 있으며, 생성된 트윈을 **Play 함수**로 실행할 수 있습니다.

```lua
local TweenService = game:GetService("TweenService")
local Part = script.Parent

-- 트윈 정보 설정
local TweenInfoData = TweenInfo.new(
    5,                         -- 시간             
    Enum.EasingStyle.Linear,   -- 속도 변화 스타일
    Enum.EasingDirection.Out,  -- 속도 적용 방향
    0,                         -- 트윈이 반복되는 횟수(-1이면 무한)     
    false,                     -- 왕복 여부
    0                          -- 시작전 지연 시간
)

-- 트윈으로 변경할 속성
local TweenGoals = 
{
    Position = Vector3.new(-400, 50, -350)
}

local Tween = TweenService:Create(Part, TweenInfoData, TweenGoals)

Tween:Play()
```

### 4. 트윈 실행 제어

실행 중인 트윈은 **Pause 함수**로 일시정지할 수 있습니다.

```lua
...
Tween:Pause() -- Pause
wait(2)​
Tween:Play()  -- Resume
```

**Cancel 함수**로 실행 중인 트윈을 취소할 수 있습니다.

```lua
...
Tween:Cancel()
```

### 5. 트윈이 끝났을 때 이벤트 처리

**Completed 이벤트**를 이용하여 트윈의 실행이 끝났을 때, 필요한 처리를 작성할 수 있습니다.

```lua
local TweenService = game:GetService("TweenService")
local Part = script.Parent

-- 트윈 정보 설정
local TweenInfoData = TweenInfo.new(
    5,                         -- 시간             
    Enum.EasingStyle.Linear,   -- 속도 변화 스타일
    Enum.EasingDirection.Out,  -- 속도 적용 방향
    0,                         -- 트윈이 반복되는 횟수(-1이면 무한)     
    false,                     -- 왕복 여부
    0                          -- 시작전 지연 시간
)

-- 트윈으로 변경할 속성
local TweenGoals = 
{
    Position = Vector3.new(-400, 50, -350)
}

local Tween = TweenService:Create(Part, TweenInfoData, TweenGoals)

local function OnCompleted(playbackState)
    print("Tween Complete!", playbackState)
end
Tween.Completed:Connect(OnCompleted)

Tween:Play()
```

## EasingStyle

<figure><img src="/files/aHknlz1bfujz0wUqtG63" alt=""><figcaption></figcaption></figure>

## EasingDirection

<figure><img src="/files/TXmHEO2CVaXL9zM5UAt9" alt=""><figcaption></figcaption></figure>
