시작하기
중급 튜토리얼

캐릭터 애니메이션 재생

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

캐릭터 애니메이션 재생은 아바타와 비플레이어 캐릭터(NPC)가 청중에게 표현력 있고 현실감 있으며 참여를 유도하게 하는 중요한 요소입니다. 몰입감 있는 시각 효과를 제공하는 것 외에도, 캐릭터 애니메이션은 플레이어의 행동에 대한 피드백, 환경 탐색 방법에 대한 안내, 캐릭터 및 다른 캐릭터에 대한 중요한 정보를 제공합니다.

위험한 우주 정거장 .rbxl 파일을 참조하여, 이 자습서에서는 두 가지 다른 기술을 사용하여 캐릭터 애니메이션을 재생하는 방법을 보여줍니다. 여기에는 다음을 포함한 안내가 포함됩니다:

  • 기본 캐릭터 애니메이션 자산 ID를 자신만의 사용자 정의 애니메이션으로 교체하는 방법.
  • 3D 공간 내에서 캐릭터 행동에 따라 애니메이션을 트리거하는 방법.

이 자습서를 완료하면 다양한 게임 플레이 상황에 맞게 애니메이션을 사용자 정의할 수 있는 기술을 갖추게 됩니다.

기본 애니메이션 변경

모든 기본 Humanoid 객체가 있는 캐릭터는 (플레이어가 제어하는 아바타든, 비플레이어 캐릭터(NPC)든) 캐릭터가 달리기, 등반, 점프와 같은 특정 경험 내 행동을 수행할 때마다 재생되는 기본 애니메이션 세트를 포함합니다. Roblox는 모든 경험에 대해 추가 스크립트 작업 없이 이러한 애니메이션을 기본으로 제공합니다.

기본 낙하 애니메이션
기본 수영 애니메이션
기본 등반 애니메이션

하지만 이러한 기본 애니메이션이 세계의 환경, 미학, 또는 전체 내러티브에 대한 디자인 요구 사항을 충족하지 않는 경우, 경험에 참여하는 모든 플레이어에게 적용되는 사용자 정의 애니메이션으로 교체할 수 있습니다.

다음 섹션에서는 기본 걷기 애니메이션을 캐릭터 애니메이션 만들기에서 사용자 정의 걷기 사이클 애니메이션으로 교체하는 방법을 보여줍니다. 이와 같은 프로세스를 사용하여 기본 애니메이션을 자신의 애니메이션 자산 ID로 교체할 수 있습니다.

기본 걷기 애니메이션
사용자 정의 걷기 애니메이션

스크립트 생성

모든 캐릭터의 Humanoid 객체에는 캐릭터의 기본 애니메이션을 저장하는 자식 Animator 객체가 포함되어 있습니다. 이러한 기본 애니메이션 중 하나를 새로운 자산 ID로 설정하려면, ServerScriptService에 스크립트를 생성해야 하며, 이를 통해 플레이어가 경험에 로드될 때 Animator 객체의 기본 값을 참조하고 덮어쓸 수 있습니다.

기본 애니메이션 자산 ID를 참조하는 스크립트를 만들려면:

  1. Explorer 창에서 ServerScriptService에 새 스크립트를 추가합니다.

    1. ServerScriptService 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다.
    2. 컨텍스트 메뉴에서 Script를 삽입합니다.
  2. 새 스크립트에 다음 코드를 붙여넣습니다:


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator found!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

ResetDefaultAnimations 스크립트는 서버에 연결된 모든 Player 객체를 포함하는 Players 서비스를 가져오는 것으로 시작합니다. 각 플레이어의 캐릭터가 경험에 로드될 때, onCharacterAdded 함수는 캐릭터의 HumanoidAnimator 객체를 감지할 때까지 기다립니다.

처음으로 Animator 객체를 감지했을 때, 스크립트는 "Animator found!"라는 메시지를 출력하여 스크립트가 의도한 대로 작동하고 있음을 알려줍니다.

자산 ID 교체

이제 스크립트가 플레이어가 서버에 로드되고 연결될 때 이를 감지할 수 있는 것을 아는 만큼, 사용자 정의 애니메이션으로 교체하려는 애니메이션 ID를 구체적으로 참조하도록 스크립트를 수정할 수 있습니다.

다음 표에는 Animator 객체 내에서 호출하고 교체할 수 있는 모든 기본 캐릭터 애니메이션이 포함되어 있습니다. Idle에는 더 자주 또는 덜 자주 재생할 수 있는 두 가지 변형이 있습니다.

캐릭터 동작애니메이트 스크립트 참조
달리기animateScript.run.RunAnim.AnimationId
걷기animateScript.walk.WalkAnim.AnimationId
점프animateScript.jump.JumpAnim.AnimationId
대기

animateScript.idle.Animation1.AnimationId
animateScript.idle.Animation2.AnimationId

낙하animateScript.fall.FallAnim.AnimationId
수영animateScript.swim.Swim.AnimationId
수영 (대기)animateScript.swimidle.SwimIdle.AnimationId
등반animateScript.climb.ClimbAnim.AnimationId

기본 걷기 애니메이션 자산 ID를 교체하려면:

  1. 기본 걷기 애니메이트 스크립트 참조를 호출한 다음, 자산 ID를 자신의 사용자 정의 애니메이션 자산 ID로 교체합니다. 예를 들어, 다음 코드 샘플은 캐릭터 애니메이션 만들기에서 걷기 사이클 애니메이션을 참조합니다.


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator found!")
    local animateScript = character:WaitForChild("Animate")
    animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. 경험을 플레이 테스트하여 사용자 정의 걷기 애니메이션이 기본 애니메이션을 대체하는지 확인합니다.

    1. 드롭다운 메뉴에서 Test를 선택하고 오른쪽의 Play 버튼을 클릭하여 플레이 테스트를 시작합니다.

      Studio의 메자닌 테스트 모드 드롭다운에서 테스트 옵션.
    2. 아바타와 함께 우주 정거장을 돌아다닙니다.

애니메이션 트리거

이전 기술은 캐릭터가 특정 경험 내 행동을 수행할 때 자동으로 재생되는 기본 애니메이션을 교체하는 데 중점을 두지만, 3D 공간 내에서의 모든 캐릭터 행동에 응답하여 애니메이션을 프로그래밍적으로 트리거할 수 있습니다. 예를 들어, 아이템을 들거나 위험으로부터 피해를 입는 경우입니다.

이 예에서 플레이어가 황금 플랫폼에 닿으면 기본이 아닌 캐릭터 댄스 애니메이션을 트리거합니다.

이 애니메이션 재생 방법은 플레이어에게 환경에서 객체와 상호작용하는 방법에 대한 즉각적인 피드백을 제공하기 때문에 유용합니다. 다음 섹션에서는 캐릭터가 위험한 증기 누출에 너무 가까이 있을 때 애니메이션을 트리거하는 방법을 보여줍니다. 이는 플레이어가 벽에 너무 가까이 걷지 않도록 저절로 가르쳐 주는 방법입니다.

볼륨 삽입

독특한 게임 플레이 동작을 트리거하는 가장 일반적인 방법 중 하나는 볼륨 또는 3D 공간 내에서 특정 지역과 상호작용하는 캐릭터 또는 객체를 감지하기 위한 보이지 않는 지역을 사용하는 것입니다. 볼륨과 스크립트를 결합하면 충돌 피드백을 사용하여 행위를 프로그래밍적으로 트리거할 수 있습니다. 예를 들어 플레이어의 체력을 줄이거나 애니메이션을 재생하는 것입니다.

저택 방의 먼 시점. 게임 플레이 이벤트를 트리거하는 볼륨을 나타내기 위해 방 중앙에 상자의 윤곽선이 있습니다.
두발 드라이브의 미스터리는 게임 플레이 이벤트를 트리거하기 위해 볼륨을 사용하여 방의 시각적 모양을 변경합니다.

경험에 볼륨을 추가할 때는 애니메이션을 트리거할 특정 공간만 덮도록 크기를 조정하는 것이 중요합니다. 볼륨을 너무 작게 만들면 플레이어가 애니메이션을 재생할 공간과 충돌하지 않을 수 있습니다. 반대로 볼륨을 너무 크게 만들면 플레이어가 아이템이나 관심 지역에 도달하기 전에 애니메이션이 재생되며, 그들이 무엇을 해서 애니메이션을 트리거하였는지 이해하지 못할 수 있습니다.

증기 누출 주위에 애니메이션을 트리거할 볼륨을 삽입하려면:

  1. Explorer 창에서 새 블록 파트를 추가합니다.
  2. 블록을 배치하고 크기를 조정하여 애니메이션을 트리거할 영역을 덮도록 합니다.
  3. Properties 창에서,
    1. NameAnimationDetector로 설정합니다.

    2. Transparency1로 설정하여 블록을 보이지 않게 만듭니다.

      증기 통풍구 주변에 블록의 윤곽선이 표시되어 볼륨 위치를 나타냅니다.

스크립트 생성

이제 애니메이션을 트리거하기 위한 정의된 영역이 있으므로 플레이어가 볼륨과 충돌할 때 이를 감지하고 프로그램적으로 애니메이션을 트리거하는 스크립트를 생성할 시간입니다. 그러면 충돌 이벤트를 듣고 게임 플레이 요구 사항에 맞는 애니메이션을 트리거할 수 있습니다.

예를 들어, 이 애니메이션 기술은 LocalScript를 사용하여 플레이어가 볼륨과 충돌할 때 즉각적인 피드백을 제공합니다. 만약 서버가 충돌을 감지하고 애니메이션을 재생한다면, 로컬 클라이언트가 볼륨에 닿는 것과 애니메이션이 재생되는 사이에 지연이 발생할 수 있습니다.

로컬 플레이어의 캐릭터가 볼륨에 닿을 때 이를 감지할 로컬 스크립트를 생성하려면:

  1. Explorer 창에서 StarterCharacterScripts에 새 스크립트를 추가합니다. 이 배치는 스크립트와 그 자식이 조인을 통해 플레이어 캐릭터로 복사되고, 경험으로 다시 리스폰될 때 복사됩니다.

    1. StarterPlayer를 확장한 다음, 그 자식으로 있는 StarterCharacterScripts 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다.
    2. 컨텍스트 메뉴에서 LocalScript를 삽입하고 이름을 TriggerAnimation으로 변경합니다.
  2. 새 스크립트에 다음 코드를 붙여넣습니다:


    local Workspace = game:GetService("Workspace")
    local animation = script:WaitForChild("Animation")
    local humanoid = script.Parent:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    local animationTrack = animator:LoadAnimation(animation)
    local animationDetector = Workspace:WaitForChild("AnimationDetector")
    local debounce = false
    animationDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    if hitCharacter ~= localCharacter then
    return
    end
    debounce = true
    animationTrack:Play()
    animationTrack.Ended:Wait()
    debounce = false
    end)

TriggerAnimation 스크립트는 3D 세계에 존재하는 모든 객체를 포함하는 Workspace 서비스를 가져오는 것으로 시작합니다. 이는 스크립트가 볼륨 역할을 하는 Part 객체를 참조해야 하기 때문에 중요합니다.

각 플레이어 캐릭터가 경험에 로드되거나 리스폰될 때마다, 스크립트는 다음을 기다립니다:

  • 다음 섹션에 추가할 자식 Animation 객체.
  • 캐릭터의 HumanoidAnimator 객체.
  • AnimationDetector라는 이름의 워크스페이스의 볼륨 객체.

볼륨과 충돌하는 것이 발생할 때마다, Touched 이벤트 핸들러 함수는 충돌한 BasePart가 캐릭터 모델의 자손인 경우, Model인 첫 번째 조상을 가져옵니다. 만약 그것이 맞다면, 함수는 Model로컬 플레이어의 캐릭터인지 확인합니다. 맞다면, 그 함수는 다음과 같은 단계를 진행합니다:

  • 디바운스를 true로 설정합니다.
  • 애니메이션을 재생하고 끝날 때까지 기다립니다.
  • 디바운스를 다시 false로 설정합니다.

애니메이션이 종료된 후 디바운스를 false에서 true로, 다시 false로 설정하는 것은 플레이어가 볼륨과 지속적으로 충돌할 때 애니메이션이 반복적으로 트리거되는 것을 방지하는 디바운스 패턴입니다. 이 디바운스 패턴에 대한 자세한 내용은 충돌 감지를 참조하세요.

애니메이션 추가

지금 당장 경험을 플레이 테스트하면 TriggerAnimation 스크립트가 여전히 로컬 플레이어-볼륨 충돌에 대응하여 애니메이션을 재생할 수 없습니다. 이는 애니메이션 자산 ID를 참조할 수 있는 자식 Animation 객체를 기다리고 있으며, 현재 그 Animation 객체가 존재하지 않기 때문입니다.

로컬 스크립트가 볼륨과 충돌할 때 참조할 애니메이션을 추가하려면:

  1. Explorer 창에서 TriggerAnimation에 새 애니메이션을 추가합니다.

    1. TriggerAnimation 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다.
    2. 컨텍스트 메뉴에서 Animation을 삽입합니다.
  2. 새 애니메이션 객체를 선택한 후 Properties 창에서 AnimationID를 플레이어가 볼륨에 닿았을 때 트리거할 애니메이션 자산 ID로 설정합니다. 예를 들어, 위험한 우주 정거장 샘플은 캐릭터가 뒤로 넘어지는 애니메이션을 재생하기 위해 rbxassetid://3716468774를 참조합니다.

  3. 경험을 플레이 테스트하고 플레이어가 첫 번째 증기 누출 근처에 있을 때 애니메이션이 재생되는지 확인합니다.

©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.