캐릭터 애니메이션 재생

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

캐릭터 애니메이션 재생은 아바타와 비플레이어 캐릭터(NPC)가 청중에게 표현력 있고, 현실적이며, 매력적으로 만드는 중요한 부분입니다. 몰입감 있는 비주얼을 제공하는 것 외에도, 캐릭터 애니메이션은 플레이어의 행동에 대한 피드백, 환경을 탐색하는 방법에 대한 안내, 그리고 자신의 캐릭터와 다른 캐릭터에 대한 중요한 정보를 제공합니다.

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

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

이 튜토리얼을 완료한 후에는 다양한 게임 플레이 상황에 맞게 애니메이션을 사용자 정의할 수 있는 기술을 갖추게 됩니다.

기본 애니메이션 변경

기본 Humanoid 객체가 있는 모든 캐릭터는 플레이어가 조종하는 아바타이든 비플레이어 캐릭터(NPC)이든 관계없이 특정 게임 내 행동(예: 달리기, 오르기, 점프하기)을 수행할 때마다 재생되는 기본 애니메이션 세트를 포함합니다. Roblox는 추가 스크립팅 노력 없이 모든 게임에 대해 이러한 애니메이션을 기본 제공하고 있습니다.

기본 낙하 애니메이션
기본 수영 애니메이션
기본 오르기 애니메이션

그러나 이러한 기본 애니메이션이 귀하의 세계 환경, 미적 요구 사항 또는 전체 내러티브에 맞지 않는 경우, 게임에 참여하는 모든 플레이어에게 적용되는 사용자 정의 애니메이션으로 교체할 수 있습니다.

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

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

스크립트 생성

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

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

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

    1. ServerScriptService 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다.
    2. 컨텍스트 메뉴에서 스크립트를 삽입합니다.
  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. 드롭다운 메뉴에서 테스트를 선택하고 오른쪽의 재생 버튼을 클릭하여 플레이 테스트를 시작합니다.

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

애니메이션 트리거

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

이 예제에서는 플레이어가 황금 플랫폼에 닿을 때 비기본 캐릭터 댄스 애니메이션을 트리거합니다.

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

볼륨 삽입

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

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

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

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

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

    2. 투명도1로 설정하여 블록을 보이지 않게 만듭니다.

      증기 배출구 주위에 볼륨의 위치를 나타내기 위해 블록의 윤곽선이 보입니다.

스크립트 생성

이제 애니메이션을 트리거할 정의된 영역이 있으므로, 플레이어가 볼륨과 충돌할 때 이를 감지하는 스크립트를 생성할 차례입니다. 그런 다음 충돌 이벤트를 수신하여 게임 플레이 요구 사항에 맞는 애니메이션을 트리거할 수 있습니다.

예를 들어, 이 애니메이션 기술은 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. 컨텍스트 메뉴에서 애니메이션을 삽입합니다.
  2. 새 애니메이션 객체를 선택한 다음, Properties 창에서 AnimationID를 플레이어가 볼륨에 닿을 때 트리거할 애니메이션 자산 ID로 설정합니다. 예를 들어, 위험한 우주 정거장 샘플은 캐릭터가 뒤로 넘어지는 애니메이션을 재생하기 위해 rbxassetid://3716468774를 참조합니다.

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

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