# 트윈

## 개요

트윈(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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.overdare.com/korean/manual/script-manual/advanced-gameplay-systems/tween.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
