트윈(Tween)은 오브젝트의 속성을 부드럽고 자연스럽게 변화시키는 데 사용됩니다. 트윈을 이용하여 오브젝트의 위치나 회전, 크기 등 다양한 속성을 애니메이션화하여 게임에 몰입감 있고 풍부한 시각적 효과를 더할 수 있습니다.
특징
트윈은 코드의 간결성과 성능 면에서 뛰어나며, 다양한 효과를 쉽게 구현할 수 있도록 도와줍니다.
트윈은 다양한 Easing 스타일을 지원해 부드럽고 자연스러운 애니메이션을 제공합니다.
트윈은 내부적으로 효율적으로 처리되며, 프레임별 업데이트보다 성능 부담이 적습니다.
트윈은 완료 후 자동으로 종료되며, Completed 이벤트를 통해 후속 작업을 쉽게 처리할 수 있습니다.
구성 요소
TweenService : 트윈을 생성하고 관리하는 서비스입니다.
TweenInfo : 트윈의 동작 방식을 정의하는 오브젝트로 변화 시간, 방향, 반복 횟수 등을 설정합니다.
TweenGoals : 트윈으로 변화시킬 속성 값을 정의합니다.
사용 방법
1. 트윈 생성하기
TweenInfo.new 함수로 애니메이션의 지속 시간, 가속 및 감속 스타일, 반복 횟수 등 트윈 애니메이션의 동작 방식을 정의할 수 있습니다.
오브젝트의 위치나 회전 등 애니메이션을 적용할 속성은 TweenGoals 테이블에 설정합니다.
local TweenService = game:GetService("TweenService")
local Part = script.Parent
-- Setting Tween information
local TweenInfoData = TweenInfo.new(
2, -- Easing duration (seconds)
Enum.EasingStyle.Linear, -- Easing style
Enum.EasingDirection.Out, -- Easing direction
0, -- Number of repetitions
false, -- Whether to reverse
0 -- Wait time
)
-- Properties to be changed with the tween
local TweenGoals =
{
Position = Vector3.new(-400, 50, -350)
}
local Tween = TweenService:Create(Part, TweenInfoData, TweenGoals)
2. 트윈으로 변화시킬 속성 설정
TweenGoals에 어떤 속성을 설정하느냐에 따라 트윈의 기능이 달라집니다.
DataType
Usage Example
CFrame
CFrame
Vector3
Position, Orientation, Size
Color3
Color
number
Transparency
bool
CanCollide
UDim2
Position, Size
3. 트윈 실행
TweenService:Create 함수에 트윈을 적용할 대상과 미리 설정한 TweenInfo와 TweenGoals을 전달하여 호출하면 트윈을 생성할 수 있으며, 생성된 트윈을 Play 함수로 실행할 수 있습니다.
local TweenService = game:GetService("TweenService")
local Part = script.Parent
-- Setting Tween information
local TweenInfoData = TweenInfo.new(
2, -- Easing duration (seconds)
Enum.EasingStyle.Linear, -- Easing style
Enum.EasingDirection.Out, -- Easing direction
0, -- Number of repetitions
false, -- Whether to reverse
0 -- Wait time
)
-- Properties to be changed with the tween
local TweenGoals =
{
Position = Vector3.new(-400, 50, -350)
}
local Tween = TweenService:Create(Part, TweenInfoData, TweenGoals)
Tween:Play()
Completed 이벤트를 이용하여 트윈의 실행이 끝났을 때, 필요한 처리를 작성할 수 있습니다.
local TweenService = game:GetService("TweenService")
local Part = script.Parent
-- Setting Tween information
local TweenInfoData = TweenInfo.new(
2, -- Easing duration (seconds)
Enum.EasingStyle.Linear, -- Easing style
Enum.EasingDirection.Out, -- Easing direction
0, -- Number of repetitions
false, -- Whether to reverse
0 -- Wait time
)
-- Properties to be changed with the tween
local TweenGoals =
{
Position = Vector3.new(-400, 50, -350)
}
local Tween = TweenService:Create(Part, TweenInfoData, TweenGoals)
local function OnCompleted()
print("Tween Complete!")
end
Tween.Completed:Connect(OnCompleted)
Tween:Play()