> 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/development/api-reference/classes/tweenservice.md).

# TweenService

TweenService : `Instance`

## Overview

TweenService를 통해 애니메이션 연출에 사용할 트윈 객체를 생성할 수 있습니다.

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

<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><tr><td>UDim</td><td>Padding</td></tr><tr><td>Vector2</td><td>ImageRectOffset</td></tr><tr><td>Rect</td><td>SliceCenter</td></tr></tbody></table>

**주의사항**

* 위 표의 타입만 트윈할 수 있습니다. Enum, string, Instance 등 다른 타입의 속성을 지정하면 Create() 호출 시 오류가 발생합니다.
* 같은 인스턴스에서 재생 중인 트윈과 같은 속성을 대상으로 하는 새 트윈을 재생하면, 기존 트윈은 전체가 취소되고 Completed 이벤트가 Cancelled 상태로 발생합니다.

## Properties

## Methods

### Create

특정 인스턴스를 대상으로 새로운 트윈 애니메이션을 생성할 수 있습니다. Create() 메서드에 전달되는 인수를 통해 트윈을 적용할 인스턴스, Tween의 동작을 정의하는 TweenInfo, Tween이 적용될 속성을 정의할 수 있습니다.

#### Parameters

| `Instance` Instance   | 트윈을 적용할 대상 객체입니다.                         |
| --------------------- | ----------------------------------------- |
| `TweenInfo` TweenInfo | 트윈의 시간, EasingStyle, 반복 횟수 등을 설정하는 객체입니다. |
| `Value` PropertyTable | 트윈을 적용할 속성과 목표 값을 설정하는 딕셔너리입니다.           |

#### Return

| `Instance` | 생성된 Tween 객체입니다. |
| ---------- | ---------------- |

#### Code Samples

```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()
```

### GetValue

0에서 1 사이의 진행률(alpha)에 EasingStyle과 EasingDirection을 적용한 값을 계산해 반환하는 메서드입니다.

Tween을 만들지 않고 easing 곡선의 값만 필요할 때 사용할 수 있습니다. alpha는 0에서 1 사이로 제한됩니다.

#### Parameters

| `number` alpha                         | 0에서 1 사이의 진행률입니다.  |
| -------------------------------------- | ------------------ |
| `Enum.EasingStyle` easingStyle         | 적용할 easing 스타일입니다. |
| `Enum.EasingDirection` easingDirection | 적용할 easing 방향입니다.  |

#### Return

| `number` | easing을 적용한 값입니다. |
| -------- | ----------------- |

#### Code Samples

```lua
local TweenService = game:GetService("TweenService")

local Alpha = 0.5
local EasingStyle = Enum.EasingStyle.Sine
local EasingDirection = Enum.EasingDirection.Out
local Value = TweenService:GetValue(Alpha, EasingStyle, EasingDirection)
print(Value)
```

### SmoothDamp

현재 값이 목표 값을 부드럽게 따라가도록 다음 값과 속도를 계산해 반환하는 메서드입니다.

매 프레임 호출하면서 반환된 속도를 다음 호출에 다시 전달하면, 목표 값이 계속 바뀌어도 자연스럽게 따라가는 움직임을 만들 수 있습니다. number, Vector2, Vector3, CFrame 타입을 사용할 수 있으며, current, target, velocity는 같은 타입이어야 합니다.

#### Parameters

| `Variant` current   | 현재 값입니다.                              |
| ------------------- | ------------------------------------- |
| `Variant` target    | 목표 값입니다.                              |
| `Variant` velocity  | 현재 속도입니다. 처음 호출할 때는 0에 해당하는 값을 전달합니다. |
| `number` smoothTime | 목표에 도달하는 데 걸리는 대략적인 시간(초)입니다.         |
| `number` maxSpeed   | 최대 속도입니다.                             |
| `number` deltaTime  | 이전 호출 이후 지난 시간(초)입니다.                 |

#### Return

| `Tuple` | 다음 값과 다음 호출에 전달할 속도입니다. |
| ------- | ----------------------- |

#### Code Samples

```lua
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local ScreenGui = script.Parent
local Frame = ScreenGui:WaitForChild("Frame")

local CurrentX = 0
local VelocityX = 0
local TargetX = 400
local SmoothTime = 0.3
local MaxSpeed = 10000

local function OnHeartbeat(deltaTime)
    CurrentX, VelocityX = TweenService:SmoothDamp(CurrentX, TargetX, VelocityX, SmoothTime, MaxSpeed, deltaTime)
    Frame.Position = UDim2.new(0, CurrentX, 0, 100)
end
RunService.Heartbeat:Connect(OnHeartbeat)
```

## Events

## See also

{% content-ref url="/pages/WzEVkVztdaNwUc41R39v" %}
[트윈](/korean/manual/script-manual/advanced-gameplay-systems/tween.md)
{% endcontent-ref %}
