캐릭터 애니메이션 플레이하기 는 아바타 및 플레이 불 가능한 캐릭터(NPC)가 청중에게 표현적, 현실적이고 매력적인 모습을 제공하는 데 중요한 부분입니다. 몰입형 시각적 효과를 제공하는 캐릭터 애니메이션은 플레이어에게 자신의 행동, 가이드 및
참조로 사용하는 유해 우주 정거장.rbxl 파일,이 튜토리얼은 두 가지 다른 기술을 사용하여 캐릭터 애니메이션을 플레이하는 방법을 보여줍니다, 포함 하는 지침 :
- 자체 사용자 애니메이션과 함께 기본 캐릭터 애니메이션 자산 ID를 교체합니다.
- 3D 공간 내의 캐릭터 동작에 대한 반응 애니메이션.
이 튜토리얼을 완료하면 다양한 게임 플레이 상황에 대해 애니메이션을 사용자 정의할 수 있는 기술을 얻을 수 있습니다.
기본 애니메이션 변경
모든 캐릭터에 기본 Humanoid 개체가 있으면, 이 NPC가 제어하는 플레이어 아바타 또는 플레이어가 아닌 캐릭터(NPC)가 특정 경험 작업을 수행할 때 플레이되는 기본 애니메이션 세트가 포함되
그러나 이 기본 애니메이션이 세계의 환경, 아름다움 또는 전반적인 이야기에 대한 디자인 요구 사항을 충족하지 못하면 맞춤형 애니메이션으로 교체할 수 있습니다. 이 게임 디자인 기술은 캐릭터와 경험이 더 개인적이고 몰입형있게 느낄 수 있도록
시연을 위해 다음 섹션에서는 크리처 애니메이션을 사용자 정의 워크 사이클 애니메이션으로 교체하는 방법을 보여줍니다. 이 프로세스를 사용하여 기본 애니메이션을 자신의 애니메이션 자산 ID와 교체할 수 있습니다.
스크립트 생성
모든 캐릭터의 Humanoid 개체에는 자식 Animator 개체가 포함되어 있으며, 이 자식 개체는 모든 캐릭터의 기본 애니메이션을 저장합니다. 이 애니메이션을 새 자산 ID로
기본 애니메이션 자산 ID를 참조하는 스크립트를 생성하려면:
In the 탐색기 창에, 새로운 스크립트를 ServerScriptService 에 추가합니다.
- 서버스크립트 서비스 위로 마우스를 이동하고 ⊕ 버튼을 클릭하십시오.
- 컨텍스트 메뉴에서 스크립트 를 삽입합니다.
새 스크립트에서 다음 코드를 붙여 넣습니다.
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Class.Players 스크립트는 플레이어가 서버에 연결할 때 모든 Players 개체를 포함하는 서비스를 가져오기 시작합니다. 각 플레이어의 캐릭터
Class.Animator 개체를 처음 감지할 때 스크립트는 "Animator 발견!"을 표시하여 스크립트가 예상대로 작동하는지 알려줍니다.
자산 ID 대체
이제 스크립트가 플레이어가 로드하고 서버에 연결할 때 감지하도록 로드 및 연결을 감지할 수 있음을 알았으므로 스크립트를 수정하여 특정 애니메이션을 교체하려는 애니메이션을 참조하도록 스크립트를 수정할 수 있습니다.
다음 표에는 Animator 개체 내에서 호출하고 교체할 수 있는 모든 기본 캐릭터 애니메이션이 포함되어 있습니다. 주의Idle 가 두 가지 변형을 프로그래밍하여 더 자주 또는 덜 자주 플레이할 수 있습니다.
캐릭터 액션 | 애니메이션 스크립트 참조 |
실행하기 | animateScript.run.RunAnim.AnimationId |
걸어가기 | animateScript.walk.WalkAnim.AnimationId |
점프 | animateScript.jump.JumpAnim.AnimationId |
Idle | 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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)사용자 지정 워크 애니메이션이 기본 애니메이션을 덮어씁니다.
메뉴 바에서 플레이 버튼을 클릭합니다. Studio가 플레이테스트 모드로 들어갑니다.
아바타로 우주 정거장을 돌아다니세요.
트리거 애니메이션
이전 기술은 캐릭터가 특정 경험 작업을 수행할 때마다 자동으로 재생되는 기본 애니메이션을 교체하는 데 집중하지만, 3D 공간의 모든 캐릭터 작업에 대한 반응으로 애니메이션을 프로그래밍할 수 있습니다. 예를 들어, 아이템을 획득하거나 위험으로부터 피해를
이 애니메이션 플레이 방법은 플레이어가 환경의 물체와 상호 작용하는 방법에 대한 즉각적인 피드백을 제공하므로 유용합니다. 즐겁게 놀아 보세요. 다음 섹션에서는 플레이어가 위험한 스팀 누출에 너무 가까이 갈 때 애니메이션을 트리거하는 방법을 보여줍니다.
볼륨 삽입
특정 게임 플레이 동작을 트리거하는 가장 일반적인 방법 중 하나는 음량 을 사용하거나 3D 공간 내의 보이지 않는 영역을 감지하여 캐릭터나 개체가 특정 환경상호 작용할 때를 감지하는 것입니다. 스크립트와 음량을 함께 사용하면 플레이어체력을
경험에 볼륨을 추가할 때, 볼륨을 조정하여 해당 애니메이션을 트리거하는 공간만 덮도록 하는 것이 중요합니다. 볼륨을 너무 작게 만들면 플레이어가 애니메이션을 플레이할 수 없습니다. 반대로, 볼륨을 너무 크게 만들면 애
애니메이션을 트리거하는 스팀 누출 주위에 볼륨을 삽입하려면:
In the 탐색기 window, add a new block part.
애니메이션을 트리거할 영역을 덮을 때까지 블록을 위치하고 크기를 조정합니다.
속성 창에서 속성 1. Set 이름 to 애니메이션 감지기 . 2. 블록을 보이지 않게 하려면 투명도 를 1로 설정하십시오.
스크립트 생성
이제 애니메이션을 트리거할 정의된 지역이 있으므로 플레이어가 볼륨과 충돌할 때마다 스크립트를 작성하여 프로그래밍 방식으로 모든 애니메이션을 검색할 수 있습니다. 이렇게 하면 게임 플레이 요구 사항에 맞는 모든 애니메이션을 검색할 수 있습니다.
예를 들어, 이 애니메이션 기술은 LocalScript 대신에 Script 를 사용하여 플레이어가 볼륨과 충돌할 때 즉시 피드백을 제공하므로 플레이어가 볼륨을 잡고 클라이언트에서 애니메이션을 플레이하는 것을 �
로컬 플레이어의 캐릭터가 볼륨을 터치할 때 감지하도록 하는 로컬 스크립트를 생성하려면:
In the 탐색기 window, add a new script to StartercharacterScripts . This placement ensures the script and its children clone into the player character on join and when they respawn back into the experience.
- Expand StarterPlayer , then hover over its StarterCharacterScripts child and click the ⊕ button.
- 컨텍스트 메뉴에서 LocalScript를 삽입하고 이름을 TriggerAnimation로 변경합니다.
새 스크립트에서 다음 코드를 붙여 넣습니다.
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)
Class.Workspace 스크립트는 3D 세계에 존재하는 모든 개체를 포함하는 서비스를 가져오기 시작합니다. 이는 스크립트가 볼륨의 작업을 참조해야 하기 때문에 중요합니다. 이 중요한 이유는 스크립트가 볼륨의 작업을 참조해야 하기 때문입니다.
각 플레이어 캐릭터가 경험으로 다시 로드되거나 리스폰되면 스크립트는 다음을 기다립니다:
- 다음 섹션에 추가할 자식 개체 Animation 개체.
- 작업 공간의 음향 개체 이름은 AnimationDetector .
Volume과 충돌하는 경우 Touched 이벤트 처리기는 충돌한 클래스 Model의 첫 번째 조상을 가져옵니다. 이는 클래스 모델의 플레이어하는 클
- true 에 리바운스를 설정합니다.
- 애니메이션이 종료때까지 플레이하고 기다립니다.
- false로 리바운스를 다시 설정합니다.
애니메이션이 플레이어가 볼륨과 충돌하는 동안 재생되는 동안 false 에서 true 로 다시 설정하는 데바운스 패턴은 애니메이션이 플레이어가 볼륨과 충돌하는 동안 재생되는 동안 false 패턴을 방지하는 데 사용
애니메이션 추가
현재 경험을 플레이테스트하면 로컬 플레이어 볼륨 충돌에 대응하여 애니메이션을 플레이할 수 없습니다. 이는 애니메이션 자산ID가 참조할 수 있는 하위 개체 TriggerAnimation 개체와 애니메이션 자산ID가 참조할 수 있는
플레이어가 볼륨과 충돌할 때 로컬 스크립트에 대한 애니메이션을 추가하려면:
In the 탐색기 창, add a new animation to TriggerAnimation .
- 트리거 애니메이션 위로 마우스를 이동하고 ⊕ 버튼을 클릭하십시오.
- 컨텍스트 메뉴에서 애니메이션 을 삽입합니다.
새로운 애니메이션 개체를 선택한 다음 속성 창에서 애니메이션ID 를 설정하고 플레이어가 볼륨을 터치할 때 트리거할 애니메이션 자산ID 에 대해 AnimateID 를 설정하십시오. 예를 들어, 2>위험 우
플레이어가 첫 번째 스팀 누출에 가까이 있을 때 애니메이션이 재생되는지 확인하십시오.