Roblox에서 애니메이션은 해당 애니메이션을 소유하는 사용자가 소유하는 경험에만 잠겨 있습니다.경험을 그룹으로 전송할 때 애니메이션이 중단되지 않도록 하려면 애니메이션 자산을 새 경험 그룹 소유자에게 게시해야 합니다.
업로드할 애니메이션 수가 많은 경우, 커뮤니티가 지원하는 도구 Roblox 애니메이션 전송을 사용하여 애니메이션을 다시 업로드하고 이전의 AnimationIds를 새로운 상응 AnimationIds에 매핑할 수 있습니다
필수 조건
애니메이션을 전송하기 전에 npx를 설치해야 합니다.npx 패키지를 시스템에 설치할 필요 없이 패키지에서 명령을 실행할 수 있습니다.npx를 확인하려면 터미널 창에서 node.js를 설치하고 npx –version를 실행합니다.
필수 조건에 대한 자세한 정보는 Roblox 애니메이션 전송 README에 참조하십시오.
맵 애니메이션 ID를 이름으로 매핑
경험에서 미리 준비된 캐릭터 모델 아래에 애니메이션이 저장되면 텍스트 파일을 생성하여 AnimationIds를 해당 이름으로 매핑할 수 있습니다.
Roblox Studio에서 다음 스크립트를 실행하십시오. Studio는 결과를 단일 긴 문자열로 출력합니다.
local Workspace = game:GetService("Workspace")local ANIMSTRING = ""for _, character in Workspace:GetChildren() doif not character:IsA("Model") thencontinueendlocal animations = character:FindFirstChild("Animations")if not animations thencontinueendfor _, animation in animations:GetChildren() dolocal animationId = string.match(animation.AnimationId, "%d+")if animationId thenANIMSTRING ..= (animationId .. " " .. character.Name .. "_" .. string.gsub(animation.Name, " ", "_") .. "\n")endendendprint(ANIMSTRING)컴퓨터에 새 텍스트 파일을 만듭니다.
Studio에서 문자열 출력을 텍스트 파일에 붙여넣습니다.
파일 콘텐츠에 자동으로 추가된 추가 -Edit 및 -Studio 문자열과 같은 불일치를 정리하십시오.
모든 공간을 밑줄로 바꾸어 전체적으로 조정된 이름의 수를 제한합니다.
(옵션) 텍스트 파일 준비
Roblox에는 애니메이션 업로드에 대한 내부 속도 제한이 있습니다.Roblox 애니메이션 전송 도구는 이러한 속도 제한을 존중하지 않으므로 전송 과정에서 문제가 발생하고 최종 텍스트 파일이 손상될 수 있습니다.예를 들어, 1200개의 애니메이션을 전송하지만 전송되지 않은 애니메이션을 결정할 방법이 없어 900개만 전송하게 될 수 있습니다.
최종 파일이 손상되지 않도록 하려면 다음을 수행할 수 있습니다.
- 텍스트 파일을 각각 최대 200개의 애니메이션으로 나눠 여러 파일로 분할합니다.
- 각 개별 파일에서 Roblox 애니메이션 전송 도구를 사용하십시오. 주요 속도 제한 문제를 방지하려면 각 배치 사이에 몇 분 동안 대기하십시오.
애니메이션 전송
텍스트 파일이 준비되면 전송 프로세스를 시작하십시오:
- 터미널 창을 엽니다.
- 실행 npx roblox-animation-transfer --inFile animations.txt --group YOUR_GROUP_ID --outFile newAnimations.txt .
- --inFile 는 업로드하려는 애니메이션이 있는 파일로 가리킬 수 있어야 합니다.이 파일은 처음에 만든 큰 텍스트 파일이거나, 더 작은 여러 파일 중 첫 번째일 수 있습니다. 큰 파일을 분할하기로 선택한 경우.
- --group 는 애니메이션 전송을 받는 그룹의 GroupId 를 가리킬 수 있어야 합니다.Roblox 웹사이트의 그룹 URL에서 그룹 ID를 찾을 수 있습니다.
- --outFile 는 새로운 애니메이션을 넣으려는 파일을 가리킬 수 있어야 합니다.
전송 프로세스가 성공하면 outFile 에서 제공된 애니메이션이 inFile 에서와 동일한 순서로 나열됩니다.여러 애니메이션이 전송에 실패하면 도구가 다시 전송하려고 시도하고, 이 두 번째 시도가 성공하면 이 애니메이션은 outFile의 목록 끝에 추가됩니다.
런타임에 애니메이션 로드
애니메이션을 새로운 그룹 소유자에게 전송한 후, 이전 애니메이션을 새 애니메이션으로 교체해야 합니다.
Studio에서 Animations 모듈을 생성합니다.
사용자나 원래 소유자에 해당하는 자식 모듈 2개를 만들고, 그룹이나 새 소유자에 해당하는 자식 모듈 1개를 만듭니다.
다른 위치에 게시하기로 선택한 경우 경험이 중단되지 않도록 다음 스크립트를 실행하십시오.기본적으로 스크립트는 사용자의 애니메이션을 반환합니다.
local module = {}local GROUP_ID = 12345678local gameContext = {["User"] = require(script:WaitForChild("Animations_User")),["Group"] = require(script:WaitForChild("Animations_Group"))}local function getAnimationMapForGameContext()if game.CreatorType == Enum.CreatorType.Group and game.CreatorId == GROUP_ID thenreturn gameContext.Groupendreturn gameContext.Userendlocal animationMap = getAnimationMapForGameContext()function module.getAnimation(animName: string)return animationMap[animName]endreturn module생성된 텍스트 파일을 Studio에서 애니메이션 맵으로 변환합니다.
- animFileText 변수 내의 애니메이션 목록을 변경하려는 텍스트 파일의 내용으로 교체하십시오.
- 다음 스크립트를 실행하여 문자열을 반환합니다:
local animFileText = [[4215167 Animation_Name_16171235 Animation_Name_21251267 Animation_Name_3]]local function convertFileToAnimationMap(animFileText: string)local NEW_ANIMATION_MAP = ""local lines = string.split(animFileText, "\n")for _, line in lines dolocal components = string.split(line, " ")if #components ~= 2 thencontinueendlocal animationId = components[1]local animationName = components[2]NEW_ANIMATION_MAP = string.format("%s\t[\"%s\"] = \"rbxassetid://%s\",\n", NEW_ANIMATION_MAP, animationName, animationId)endreturn string.format("return {\n%s}", NEW_ANIMATION_MAP)endprint(convertFileToAnimationMap(animFileText))새로운 ModuleScript 모듈에 부모로 지정된 새 부모를 생성합니다.Create a new parented to your Animations module.
반환된 animFileText 문자열을 ModuleScript 내에 배치하십시오.
다음 스크립트를 실행하여 경험을 업데이트하여 모든 애니메이션을 Animations 모듈을 통해 소스로 가져옵니다:
local Animations = require(PATH.TO.ANIMATIONS)local warriorWalk = Instance.new("Animation")warriorWalk.AnimationId = Animations.getAnimation("Warrior_Walk")