欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Unreal Python API 从零到入门

发布时间:2024/1/1 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Unreal Python API 从零到入门 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

    • 前言
    • Unreal Python API的使用 - 运行环境
    • UE4 Python插件
      • 安装UE4 Python脚本插件
    • 运行脚本
      • 打开output log
      • 输入运行路径
    • 编写脚本
      • 在编写Python脚本中你应当谨慎注意的事情
      • 授人与渔
      • 再次跳入坑坑的API文档
      • Google yyds
    • 常用接口整理
      • unreal.AssetData
      • unreal.\_ObjectBase
      • unreal.EditorAssetLibrary
      • unreal.AssetRegistry
      • unreal.GameplayStatics

前言

跨过山和大海。。。
好像也没有看到有人写这个文档

Unreal Python API的使用 - 运行环境

Winodws 10
Unreal Engine 4.23.1

UE4 Python插件

安装UE4 Python脚本插件


搜索script,安装图中标注好的两个插件

运行脚本

打开output log

输入运行路径


将cmd切换为Python,之后再输入你脚本的路径
这里我们创建一个test.py文件(如下代码)放在桌面

import unrealstr1 = unreal.AssetRegistryDependencyOptions(include_soft_package_references=True, include_hard_package_references=True,include_searchable_names=False, include_soft_management_references=False,include_hard_management_references=False) asset_reg = unreal.AssetRegistryHelpers.get_asset_registry()arr = unreal.AssetRegistry.get_referencers('/Game/Assets/XX/XX', str1)print arr

路径为: C:\Users{你的用户名}\Desktop\test.py
在这里我的用户名为Bedivere, 所以我们输入
C:\Users\Bedivere\Desktop\test.py

编写脚本

在编写Python脚本中你应当谨慎注意的事情

  • UE4自带的Python版本为2.7,你需要注意语法(比如print后面是不带括号的
  • 直接复制UE4里的文件名可以获得为文件路径(但是文件名称会重复两次,有一些需要文件路径的方法在这里需要进行更改)
    例如:
    你复制的路径
    ‘/Game/AssetsXXXX/AAA.AAA’ (注意它打了两遍!!!
    实际它需要
    ‘/Game/AssetsXXXX/AAA’
    但有时他又只需要前者,所以巨**坑
  • UE4 outputlog里cmd是只能使用UE4的cmd指令,执行外部的指令是没有的,例如cd C:\xxxxx

授人与渔

当编写Python脚本的时候会碰上各种各样的问题,这里介绍可以去找结果的途径
就拿我们这个脚本举例
需求是:找到这个文件的reference
所以我们在官方API文档里搜索get_reference



在这里我们就能看到api的用法,需要文件路径,以及配一个查找选项(范围)
路径我们直接Ctrl + C就可以解决,但对于后者我们需要再点进去查看如何配置


看到这里我们知道需要配置四个参数,所以我们写下了这行代码

str1 = cunreal.AssetRegistryDependencyOptions(include_soft_package_references=True, include_hard_package_references=True,include_searchable_names=False, include_soft_management_references=False,include_hard_management_references=False)


但运行后会报错

提示类型不对,应当为一个类
这里就是他很坑的地方,明明文档例子给的就是路径,但这里又说不行

这里我们就有两种途径去寻找解决方式

再次跳入坑坑的API文档

去按你觉得可能的想法搜, 比如get AssetRegistry
或者 path to AssetRegistry。但是这样挺靠缘分的(x)
英语水平和你对命名的了解程度(√)
我选择的是return AssetRegistry,看看什么方法能返回给我这样的一个对象

这里那个Helpers小帮手就很吸引我的眼球!

只需要点一下就可以转换 Done!

Google yyds

别问,问就是Ctrl+C Ctrl + V

常用接口整理

此处列举的类都是些基础类与实用类,类中的方法可用于复现编辑器中的操作或信息的获取,但由于数量较多无法一一列举,因此使用前请务必查看该类的官方文档,查找最适合需求的方法并使用。

unreal.AssetData

使用方式

# 路径请遵循虚幻路径格式,文件名需以.隔开后再写一遍 unreal.AssetData('/Game/test/XXX.XXX')

常用方法

  • 获取资源对象 - get_asset()
# 最常用,获取对应资源的属性一般都要先获取对象 # 返回值类型为object,并包含了所属类的信息,如路径为Texture资源,则返回的object的类为Texture,可用于判断资源种类 import unreal object = unreal.AssetData('/Game/test/XXX.XXX').get_asset() print object# 执行结果输出 LogPython: <Object '/Game/test/XXX.XXX' (0x000001639781AC00) Class 'StaticMesh'>

unreal._ObjectBase

使用方式

# 所有对象类的基类,在获取到对象后,可以随意调用该类中的方法

常用方法

import unreal object = unreal.AssetData('/Game/test/XXX.XXX').get_asset()# 获取对象的虚幻类 print object.get_class()# 执行结果输出 LogPython: <Object '/Script/Engine.StaticMesh' (0x000001639B17C400) Class 'Class'> --------------------------------------------------------------------------------------------------------------- # 获取对象名称,即文件名 print object.get_fname()# 执行结果输出 LogPython: SM_Env_Bridge_006A --------------------------------------------------------------------------------------------------------------- # 获取对象的绝对路径 print object.get_path_name()# 执行结果输出 LogPython: /Game/test/XXX.XXX

unreal.EditorAssetLibrary

使用方式

# 实用方法类,类中方法可直接静态调用,可执行ContentBrowser中的大部分功能,如创建、删除、复制、保存、重命名、获取tag信息等。 # 此处只列举几个基础的方法,使用时请查阅此类的官方文档,以获取能够满足需求的方法。

常用方法

import unreal# 删除asset,需传入资源路径作为参数,返回值为bool型,True则操作成功,False为失败 result = unreal.EditorAssetLibrary.delete_asset('/Game/test/XXX')# 删除目录,需传入目录的路径作为参数,返回值为bool型,True则操作成功,False为失败 result = unreal.EditorAssetLibrary.delete_directory('/Game/test')# 判断asset是否存在,需传入资源路径作为参数,返回值为bool型,True则操作成功,False为失败 result = unreal.EditorAssetLibrary.does_asset_exist('/Game/test/XXX')# 判断目录是否存在,需传入资源路径作为参数,返回值为bool型,True则操作成功,False为失败 result = unreal.EditorAssetLibrary.does_directory_exist('/Game/test')# 获取资源tag信息,需传入资源路径作为参数,返回值为包含tag信息的字典 info = unreal.EditorAssetLibrary.get_tag_values('/Game/test/XXX')

unreal.AssetRegistry

使用方式

该类用于获取asset相关数据,如asset间的关联与引用、asset查找、asset状态判定等。 使用此类需要从unreal.AssetRegistryHelpers类中获取,用法为unreal.AssetRegistryHelpers.get_asset_registry(),返回值类型即为unreal.AssetRegistry。

常用方法

  • 获取引用到的资源 - get_dependencies(asset_path, dependency_options)
  • 获取被哪些资源引用 - get_referencers(asset_path, reference_options)
import unreal# 参数,用于决定哪种类型的引用会输出到返回列表中 # 详情参考:https://docs.unrealengine.com/en-US/PythonAPI/class/AssetRegistryDependencyOptions.html#unreal.AssetRegistryDependencyOptions options = unreal.AssetRegistryDependencyOptions(include_soft_package_references=True, include_hard_package_references=True, include_searchable_names=False, include_soft_management_references=False, include_hard_management_references=False)# 返回结果是该资源引用到的资源列表,需要注意的是参数中的路径格式,并非文件名写两次的格式,若填错则返回值为空 asset_list = unreal.AssetRegistryHelpers.get_asset_registry().get_dependencies('/Game/test/XXX', options)# 返回结果是应用该资源的资源列表 asset_list = unreal.AssetRegistryHelpers.get_asset_registry().get_referencers('/Game/test/XXX', options)

unreal.GameplayStatics

使用方式

gameplay实用方法类,直接静态调用类中方法即可。

常用方法

  • 获取场景中某类的所有actor - get_all_actors_of_class(world_context_object, actor_class)
import unreal# 本方法需要两个参数,一个是场景资源的对象,一个是actor所属的类object_map = unreal.AssetData('level的object_path').get_asset()# 本例是获取场景中所有平行光actor,平行光class为unreal.DirectionalLight。actor_list = unreal.GameplayStatics.get_all_actors_of_class(object_map, unreal.DirectionalLight)

总结

以上是生活随笔为你收集整理的Unreal Python API 从零到入门的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。