캐릭터 애니메이션 재생 은 아바타와 플레이할 수 없는 캐릭터(NPC)가 대상 오디언스에게 표현적이고 현실적이며 매력적으로 전달되도록 만드는 중요한 부분입니다.몰입형 시각을 제공하는 것 외에도, 캐릭터 애니메이션은 플레이어의 행동에 대한 피드백, 환경을 탐색하는 방법에 대한 지침 및 캐릭터와 다른 사람들에 대한 중요한 정보를 제공합니다.
위험한 우주 정거장 파일을 참조로 사용하여 이 자습서는 다음과 같은 두 가지 기술, 즉 지침을 포함하여 캐릭터 애니메이션을 플레이하는 방법을 보여줍니다.
- 사용자 지정 애니메이션과 기본 캐릭터 애니메이션의 애니메이션 ID를 교환합니다.
- 3D 공간 내의 캐릭터 작업에 대한 응답으로 애니메이션 트리거.
이 자습서를 완료하면 다양한 게임 플레이 상황에 대한 애니메이션을 사용자 지정할 수 있는 기술이 생깁니다.
기본 애니메이션 변경
기본 개체가 있는 모든 캐릭터(플레이어가 제어하는 아바타 또는 플레이어가 아닌 캐릭터(NPC))는 캐릭터가 특정 경험 작업(예: 달리기, 등반, 점프)을 수행할 때마다 재생되는 기본 애니메이션 세트를 포함합니다.Roblox는 추가 스크립팅 노력 없이 모든 경험에 이러한 애니메이션을 상자에서 제공합니다.
그러나 이러한 기본 애니메이션이 경험에 참여하는 모든 플레이어에 적용되는 사용자 지정 애니메이션으로 교체하면 세계 환경, 미학 또는 전체 스토리에 대한 디자인 요구 사항을 충족할 수 있습니다.이 게임 디자인 기술은 캐릭터와 경험이 더 개인적이고, 매력적이고, 몰입감 있게 느끼도록 도울 수 있습니다.
시연을 위해 다음 섹션에서는 캐릭터 애니메이션 생성에서 사용자 지정 워크 사이클 애니메이션으로 기본 워크 애니메이션을 교체하는 방법을 가르쳐줍니다.이 동일한 프로세스를 사용하여 기본 애니메이션 중 하나를 자신의 애니메이션 자산ID로 교체할 수 있습니다.
스크립트 생성
모든 문자의 Humanoid 개체에는 모든 문자의 기본 애니메이션을 저장하는 자식 Animator 개체가 포함되어 있습니다.이러한 기본 애니메이션 중 하나를 새로운 자산ID로 설정하려면 에서 스크립트를 생성하여 플레이어가 경험에 로드되자마자 기본값을 참조하고 재정의할 수 있도록 해야 합니다.
기본 애니메이션 자산 ID를 참조하는 스크립트를 생성하려면:
탐색기 창에서 새로운 스크립트 를 ServerScriptService 에 추가합니다.
- Hover over ServerScriptService 및 ⊕ 버튼을 클릭하십시오.
- 컨텍스트 메뉴에서 스크립트 를 삽입합니다.
새 스크립트에서 다음 코드를 붙여넣습니다:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
스크립트는 서버에 연결하는 플레이어의 모든 개체를 포함하는 서비스를 가져와 시작합니다.플레이어의 캐릭터가 경험에 로드될 때마다 onCharacterAdded 함수는 캐릭터의 Humanoid 및 Animator 개체를 감지할 때까지 대기합니다.
처음으로 Animator 개체를 감지하면 스크립트는 스크립트가 의도한 대로 작동하고 있음을 알려주기 위해 "Animator found!"를 인쇄합니다.
자산ID 교체
이제 스크립트가 플레이어가 서버에 로드하고 연결할 때 감지할 수 있다는 것을 알았으므로, 사용자 지정 애니메이션과 교체하려는 애니메이션 ID(들)를 특정으로 언급하는 스크립트를 수정할 수 있습니다.
다음 표에는 Animator 개체 내에서 호출하고 교체할 수 있는 모든 기본 캐릭터 애니메이션이 포함되어 있습니다.유휴 상태에는 더 자주 또는 덜 자주 플레이하도록 프로그래밍할 수 있는 두 가지 변형이 있습니다.
캐릭터 액션 | 애니메이션 스크립트 참조 |
실행 | 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를 대체하려면:
기본 워크 애니메이션 스크립트 참조를 호출한 다음 자체 사용자 지정 애니메이션 자산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"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)사용자 지정 보행 애니메이션이 기본 애니메이션을 재정의하도록 경험을 플레이테스트하십시오.
도구 모음에서 플레이 버튼을 클릭하십시오. Studio가 플레이테스트 모드로 들어갑니다.
아바타와 함께 우주 정거장을 돌아다니세요.
트리거 애니메이션
이전 기술은 캐릭터가 특정 경험 작업을 수행할 때마다 자동으로 재생되는 기본 애니메이션을 교체하는 데 초점을 맞추고 있지만, 3D 공간 내의 어떤 캐릭터 작업에 대해서든 프로그래밍 방식으로 애니메이션을 재생하여 응답할 수 있습니다(예: 아이템을 집거나 위험으로부터 피해를 입음).
애니메이션을 재생하는 이 방법은 플레이어가 환경의 개체와 상호작용하는 방법에 대한 즉각적인 피드백을 제공하기 때문에 유용합니다.시연을 위해 다음 섹션에서는 캐릭터가 위험한 증기 누출에 너무 가까이 있을 때 애니메이션을 트리거하는 방법을 보여 주며, 플레이어가 벽에 너무 가까이 걷지 않도록 은밀하게 가르칩니다.
용량 삽입
독특한 게임 플레이 행동을 트리거하는 가장 일반적인 방법 중 하나는 볼륨 또는 3D 공간 내의 투명한 영역을 사용하여 캐릭터나 개체가 환경의 특정 영역과 상호작용하는 시기를 감지하는 것입니다.스크립트와 볼륨을 페어링하면 플레이어의 체력을 줄이거나 애니메이션을 재생하는 등의 작업을 프로그래밍 방식으로 트리거할 수 있는 충돌 피드백을 사용할 수 있습니다.

경험에 볼륨을 추가할 때 애니메이션을 트리거하려는 공간만 커버하도록 크기를 조정하는 것이 중요합니다.너무 작은 볼륨을 만들면 플레이어가 애니메이션을 재생하기 위해 영역에 충돌하지 않을 수 있습니다; 반대로, 너무 큰 볼륨을 만들면 플레이어가 아이템이나 관심 영역에 도달하기 전에 애니메이션이 재생되고, 그들이 애니메이션을 트리거하기 위해 한 일을 이해하지 못할 수 있습니다.
애니메이션을 트리거할 증기 누출 주위에 볼륨을 삽입하려면:
- 탐색기 창에서 새로운 블록 부품 을 추가합니다.
- 애니메이션을 트리거하려는 영역을 커버할 때까지 블록의 위치와 크기를 조정합니다.
- 속성 창 에서,
이름 을 애니메이션 검출기 에 설정합니다.
투명도 를 1 설정하여 블록을 투명하게 만듭니다.
스크립트 생성
이제 애니메이션을 트리거하는 데 정의된 지역이 있으므로 플레이어가 볼륨과 충돌할 때마다 프로그래밍 방식으로 감지하는 스크립트를 만들 시간입니다.그런 다음 충돌 이벤트를 수신하여 게임플레이 요구 사항에 적합한 모든 애니메이션을 트리거할 수 있습니다.
예를 들어, 이 애니메이션 기술은 플레이어가 볼륨과 충돌할 때 즉각적인 피드백을 제공하기 위해 LocalScript 대신 Script를 사용합니다.서버가 충돌을 감지하고 애니메이션을 재생하면 플레이어가 클라이언트에서 볼륨에 터치하고 애니메이션이 재생되는 서버에서 클라이언트로의 복제 시간 때문에 지연이 발생할 수 있습니다.
로컬 플레이어의 캐릭터가 볼륨에 닿았을 때 감지하는 로컬 스크립트를 만들려면:
탐색기 창에서 새 스크립트 를 스타터 캐릭터 스크립트 에 추가합니다.이 배치는 스크립트와 그 자식이 재생성되어 경험에 복귀할 때 와 에 플레이어 캐릭터에 복제되도록 합니다.
- 확장 스타터플레이어 를 확장하고, 그 자식의 스타터캐릭터스크립트 에 마우스를 올리고 ⊕ 버튼을 클릭하십시오.
- 컨텍스트 메뉴에서 LocalScript 를 삽입하고 이름을 트리거 애니메이션 으로 변경합니다.
새 스크립트에서 다음 코드를 붙여넣습니다:
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 = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
TriggerAnimation 스크립트는 3D 세계에 존재하는 모든 개체를 포함하는 Workspace 서비스를 가져와 시작합니다.스크립트가 귀하의 볼륨으로 작용하는 Part 개체를 참조해야 하기 때문에 중요합니다.
플레이어 캐릭터가 경험으로 다시 로드되거나 재생성되면 스크립트는 다음을 기다립니다:
- 다음 섹션에 추가할 자식 개체 Animation입니다.
- 작업 공간의 이름이 애니메이션 탐지기 인 용량 개체.
볼륨과 충돌하는 것이 있으면 이벤트 처리기 함수가 , 즉 볼륨에 충돌한 것이 캐릭터 모델의 후손인 경우 첫 번째 조상을 가져옵니다.그렇다면 함수는 가 로컬 플레이어의 캐릭터인지 확인합니다.그렇다면 함수는 다음과 같습니다:
- 디바운스를 true 설정합니다.
- 애니메이션이 끝날 때까지 플레이하고 대기합니다.
- 디바운스를 false 다시 설정합니다.
애니메이션이 재생을 마친 후 설정 디바운스를 false``true``false 다시 설정하면 애니메이션이 플레이어가 계속 볼륨과 충돌하면서 반복적으로 트리거되는 것을 방지하는 디바운스 패턴이 됩니다.이 디바운스 패턴에 대한 자세한 정보는 충돌 감지를 참조하십시오.
애니메이션 추가
지금 당장 경험을 플레이테스트한다면, TriggerAnimation 스크립트는 로컬 플레이어 볼륨 충돌에 대한 응답으로 애니메이션을 재생할 수 없습니다.이는 참조할 수 있는 애니메이션 자산 ID가 있는 자식 개체를 기다리고 있기 때문입니다 그 개체는 현재 존재하지 않습니다.
플레이어가 볼륨과 충돌할 때 로컬 스크립트에 대한 애니메이션을 추가하려면:
탐색기 창에서 새로운 애니메이션을 트리거 애니메이션 에 추가합니다.
- 트리거 애니메이션 위로 마우스를 이동하고 ⊕ 버튼을 클릭하십시오.
- 컨텍스트 메뉴에서 애니메이션 을 삽입합니다.
새 애니메이션 개체를 선택한 다음 속성 창에서 AnimationID 를 플레이어가 볼륨을 터치할 때 트리거하려는 애니메이션 자산ID로 설정합니다.예를 들어, 위험한 우주 정거장 샘플 참조 rbxassetid://3716468774 는 뒤로 떨어지는 캐릭터의 애니메이션을 재생하도록 합니다.
플레이어가 첫 번째 증기 누출에 가까이 있을 때 애니메이션이 재생되는지 확인하기 위해 경험을 플레이테스트하십시오.