アニメーションを移行する

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

Roblox では、アニメーションは、それらのアニメーションを所有するユーザーが所有する経験にロックされます。エクスペリエンスをグループに移行するときにアニメーションが壊れないようにするには、アニメーションアセットを新しいエクスペリエンスグループ所有者に公開する必要があります。

アップロードするアニメーションの数が多い場合は、コミュニティによってサポートされるツール Roblox アニメーション転送 を使用して、アニメーションを再アップロードし、古い AnimationIds を新しい対応の AnimationIds にマップできます。

必要条件

アニメーションを移行する前に、npx をインストールする必要があります。npx パッケージをシステムにインストールする必要なく、パッケージからコマンドを実行できます。npx をチェックするには、node.js をインストールしてターミナルウィンドウで npx –version を実行します。

必要条件に関する詳細は、Roblox Animation Transfer README を参照してください。

マップアニメーションIDを名前にマッピング

エクスペリエンス内のプレパレーション済みキャラクタモデルの下でアニメーションがアニメーションインスタンスとして保存されている場合、AnimationIds をそれぞれの名前にマップするテキストファイルを生成できます。

  1. Roblox Studio では、次のスクリプトを実行します。Studio は結果を単一の長い文字列として出力します。


    local Workspace = game:GetService("Workspace")
    local ANIMSTRING = ""
    for _, character in Workspace:GetChildren() do
    if not character:IsA("Model") then
    continue
    end
    local animations = character:FindFirstChild("Animations")
    if not animations then
    continue
    end
    for _, animation in animations:GetChildren() do
    local animationId = string.match(animation.AnimationId, "%d+")
    if animationId then
    ANIMSTRING ..= (animationId .. " " .. character.Name .. "_" .. string.gsub(animation.Name, " ", "_") .. "\n")
    end
    end
    end
    print(ANIMSTRING)
  2. コンピュータ上に新しいテキストファイルを作成します。

  3. Studio で生成した文字列をテキストファイルに貼り付けます。

  4. ファイルコンテンツに自動的に追加された追加の -Edit および -Studio 文字列など、不一致をクリーンアップします。

  5. すべてのスペースをアンダースコアで置換して、全体のモデレートされた名前の数を制限します。

(オプション) テキストファイルを準備する

Roblox にはアニメーションのアップロードに対する内部レート制限があります。Roblox アニメーション転送ツールは、このレート制限を守らないため、転送プロセス中に問題が発生し、最終テキストファイルが壊れる可能性があります。たとえば、1200 のアニメーションを転送するかもしれませんが、転送できなかったものを決定する方法はありませんし、900 のアニメーションしか転送できません。

最終ファイルが破損しないようにするには、次のことができます:

  1. テキストファイルを最大 200 個のアニメーションを含む複数のファイルに分割します。
  2. 各個のファイルで Roblox アニメーション転送ツールを使用します。主なレート制限問題を防ぐために、各バッチの間に数分待機します。

アニメーションを移行する

テキストファイルが準備できたら、移行プロセスを開始します:

  1. 終端ウィンドウを開きます。
  2. npx roblox-animation-transfer --inFile animations.txt --group YOUR_GROUP_ID --outFile newAnimations.txt
    • --inFile は、アップロードしたいアニメーションのあるファイルを指している必要があります。このファイルは、最初に作成した大きなテキストファイルか、より小さな複数のファイルの 1つかもしれません。大きなファイルを分割することを選択した場合。
    • --group は、アニメーション転送を受信するグループの GroupId にポイントする必要があります。Roblox ウェブサイトのグループの URL でグループの ID を見つけることができます。
    • --outFile は、新しいアニメーションを配置したいファイルを指している必要があります。

移行プロセスが成功すると、outFile で提供されたアニメーションは、inFile で提供された順序と同じ順序でリストされます。複数のアニメーションが移行できない場合、ツールは再試行してそれらのアニメーションを移行します;この2回目の試行が成功すると、これらのアニメーションは outFile の列の最後に付加されます。

実行時にアニメーションをロードする

アニメーションを新しいグループ所有者に移行した後、古いアニメーションを新しいアニメーションに交換する必要があります。

  1. スタジオで、Animations モジュールを作成します。

  2. ユーザーまたはオリジナルの所有者に対応する 2つの子モジュールを作成し、グループまたは新しい所有者に対応するもう一つを作成します。

  3. 別の場所に公開することを選択した場合、エクスペリエンスが壊れないようにするには、次のスクリプトを実行します。デフォルトでは、スクリプトはユーザーのアニメーションを返します。


    local module = {}
    local GROUP_ID = 12345678
    local 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 then
    return gameContext.Group
    end
    return gameContext.User
    end
    local animationMap = getAnimationMapForGameContext()
    function module.getAnimation(animName: string)
    return animationMap[animName]
    end
    return module
  4. 生成されたテキストファイルをスタジオでアニメーションマップに変換します。

    1. animFileText 変数内のアニメーションリストを、変更したいテキストファイルのコンテンツで置き換えます。
    2. 次のスクリプトを実行して、文字列を返す:

    local animFileText = [[
    4215167 Animation_Name_1
    6171235 Animation_Name_2
    1251267 Animation_Name_3
    ]]
    local function convertFileToAnimationMap(animFileText: string)
    local NEW_ANIMATION_MAP = ""
    local lines = string.split(animFileText, "\n")
    for _, line in lines do
    local components = string.split(line, " ")
    if #components ~= 2 then
    continue
    end
    local animationId = components[1]
    local animationName = components[2]
    NEW_ANIMATION_MAP = string.format("%s\t[\"%s\"] = \"rbxassetid://%s\",\n", NEW_ANIMATION_MAP, animationName, animationId)
    end
    return string.format("return {\n%s}", NEW_ANIMATION_MAP)
    end
    print(convertFileToAnimationMap(animFileText))
  5. 新しい ModuleScript 親モジュールを作成し、Animations モジュールに親を付けます。

  6. 返された animFileText 文字列を ModuleScript 内に配置します。

  7. 次のスクリプトを実行して、Animations モジュールを介してすべてのアニメーションをソースに更新します:


    local Animations = require(PATH.TO.ANIMATIONS)
    local warriorWalk = Instance.new("Animation")
    warriorWalk.AnimationId = Animations.getAnimation("Warrior_Walk")