LoginSignup
2
2

UE4エディタでpythonを使って参照しているアセットをコピーする

Last updated at Posted at 2021-05-17

UE4で拡張のPakを作るためにあるアセットが参照しているアセットを全て取ってきたかったのでpythonスクリプトでやってみました。

アセットを選択しておいて[File] > [Execute Python Script]実行でスクリプトで指定したフォルダに参照しているアセットを全てコピーします。
スクリプトではまだ未対応ですが可能であれば参照の置き換えもしたいです。
※ UE4.26.2を利用しています。
※ Python Editor Script PluginとEditorScritpting Utilities Pluginの有効化が必要です。

import unreal
from copy import copy
 
# 引数のアセットの依存するアセットをすべて取得
def get_list_dependencies(asset_data):
  asset_package_name = asset_data.get_editor_property('package_name')
  option = unreal.AssetRegistryDependencyOptions()
  dependencies = unreal.AssetRegistryHelpers.get_asset_registry().get_dependencies(asset_package_name, option)
  list = set()
  if dependencies:
    for dependency in dependencies:
      try:
        dependency_asset = unreal.EditorAssetLibrary.find_asset_data(dependency)
      except:
        continue
         
      list.add(unreal.StringLibrary.conv_name_to_string(dependency))
      dep_list = get_list_dependencies(dependency_asset)
      for dep in dep_list:
        list.add(unreal.StringLibrary.conv_name_to_string(dep))
   
  return list

# 選択されているアセットを取得   
utility_base = unreal.GlobalEditorUtilityBase.get_default_object()
asset_list = unreal.EditorUtilityLibrary.get_selected_asset_data()

# 選択されていなければ終了
if len(asset_list) <= 0:
  exit()

# とりあえず1つだけ処理
target = asset_list[0]

# 依存するアセットと選択されたアセットを取得
sources = get_list_dependencies(target)
target_package_name = target.get_editor_property('package_name')
sources.add(unreal.StringLibrary.conv_name_to_string(target_package_name))
print(sources)

# 取得したアセットを特定のフォルダにフラットにコピー
for source in sources:
  unreal.EditorAssetLibrary.duplicate_asset(source, "/Content/Test/" + source.split("/")[-1])

UE5.3.2でもスクリプト動きました。
実行は[Tools] > [Execute Python Script]で実行する必要があります。
また、UE5.3.2ではアセットのコピー先のパスを/Game/Test/のように指定する必要があります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2