管理资产

如何使用 Python SDK 添加和管理资产。

阅读时间8分钟
上次更新4 个月前

在您开始之前

要访问任何资产,请确保应用程序具有正确的权限。有关更多信息,请参阅 管理身份用例

创建新资产

要将资产添加到项目中,请执行以下步骤

  1. 使用 create_asset 方法,将所有信息传递到 AssetCreation 中。
  2. 至少定义 NameType 值以创建资产。 Type 的可能值为
    • 2D 资产
    • 3D 模型
    • 音频
    • 材质
    • 脚本
    • 视频
    • 其他

创建的资产将保存为草稿。

    asset_creation = AssetCreation(
        name = "your-asset-name",
        description = "your-asset-description",
        type = unity_cloud.assets.AssetType.MODEL_3D,
        tags = ["your-tag-1", "your-tag-2", "your-tag-3"]
    )

    asset = unity_cloud.assets.create_asset(
        asset_creation = asset_creation,
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef"
    )

更新资产

要更改名称、描述、类型、标签或用于预览的文件,您需要

  1. 创建 AssetUpdate 方法。
  2. 调用 update_asset 方法。
    asset_update = AssetUpdate(
        name = "your-asset-name",
        description = "your-asset-description",
        type = unity_cloud.assets.AssetType.MODEL_3D,
        tags = ["your-tag-1", "your-tag-2", "your-tag-3"],
        preview_file = "Path/To/File.ext"
    )

    unity_cloud.assets.update_asset(
        asset_update = asset_update,
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_id = "0123456789abcdefghijklmn",
        asset_version = '1234abcd-ab12-cd34-ef56-123456abcdef'
    )

发布资产

创建资产并将其设为草稿后,调用 publish_asset 以使用其所有信息发布资产。资产的状态将更改为 PUBLISHED

    unity_cloud.assets.publish_asset(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_id = "0123456789abcdefghijklmn",
        asset_version = '1234abcd-ab12-cd34-ef56-123456abcdef'
    )

更新资产状态

您可以通过调用 update_asset_state 方法手动设置资产状态。状态的可能值为

  • AssetStatusAction.SEND_FOR_REVIEW
  • AssetStatusAction.APPROVE
  • AssetStatusAction.REJECT
  • AssetStatusAction.PUBLISH
    unity_cloud.assets.update_asset_status(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_id = "0123456789abcdefghijklmn",
        asset_version = '1234abcd-ab12-cd34-ef56-123456abcdef',
        status = AssetStatusAction.SEND_FOR_REVIEW
    )

获取资产

要获取单个资产,请调用 get_asset

    asset = unity_cloud.assets.get_asset(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_id = "0123456789abcdefghijklmn",
        asset_version = '1234abcd-ab12-cd34-ef56-123456abcdef'
    )

通过标签获取资产

当资产的版本未知时,您可以使用 get_asset_by_label 方法通过其标签获取资产。保持 label 参数为空以获取资产的默认版本。

    asset = unity_cloud.assets.get_asset_by_label(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_id = "0123456789abcdefghijklmn",
        label = "your-asset-label"
    )

获取项目中所有资产的列表

要获取给定项目中包含的所有资产,请调用 get_asset_list

    assets = unity_cloud.assets.get_asset_list(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef"
    )

对资产执行高级搜索

要在整个组织中搜索资产,请执行以下步骤

  1. 创建您的过滤器作为字典或对象,其中将包含条件。
  2. 创建一个数组,其中将包含要查找的项目。将数组留空以搜索组织中的所有项目。
  3. 创建一个数组,其中将包含要查找的集合。将数组留空以搜索所有集合和未链接到集合的资产。
  4. 使用组织 ID、您的项目 ID、您的过滤器、any_filter 中所需的匹配数量、集合以及可选的返回结果的最大数量和用于分页目的的跳过数量调用 search_assets_in_projects
include_filter = dict()
exclude_filter = dict()
any_filter = dict()

include_filter[SearchableProperties.NAME] = StringFilter(StringLookUpTypes.REGEX, "asset\-.*")

project_ids = []
collections = []

search_result = unity_cloud.assets.search_assets_in_projects(org_id, project_ids, include_filter = include_filter, exclude_filter = exclude_filter, any_filter = any_filter, any_query_minimum_match = 1, collections = collections, limit_to = 10, skip = 0)

创建搜索查询的过滤器

要创建 include_filterexclude_filterany_filter,您可以使用枚举 SearchableProperties 作为帮助程序。此枚举附带有关如何创建每个属性的注释。您不限于此枚举中的属性,可以编写您自己的属性,只要您编写的属性存在于资产、数据集或文件中即可。

要创建字符串属性的过滤器,您可以编写一个简单的相等条件,也可以使用高级 StringFilter

include_filter = dict()
include_filter[SearchableProperties.DESCRIPTION] = "Description must be exactly equals to this"
include_filter[SearchableProperties.NAME] = StringFilter(StringLookUpTypes.wildcard, "incompl*te n*me")

要创建日期属性的过滤器,您可以编写一个简单的相等条件,也可以使用高级 DateRangeCondition。必须传递日期。

date_to_compare = datetime.now().isoformat()

exclude_filter = dict()
exclude_filter[SearchableProperties.DATASETS_CREATED] = date_to_compare
exclude_filter[SearchableProperties.FILES_UPDATED] = DateRangeCondition(DateConditionTypes.LESS_THAN, date_to_compare)

要将资产链接到多个项目,请使用 link_assets_to_project 方法,并使用 project_id 参数。

    unity_cloud.assets.link_asset_to_project(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_ids = ["0123456789abcdefghijklmn"],
        new_project_id = "4567efgh-ab12-cd34-ef56-123456abcdef"
    )

要删除与多个项目链接的资产,请使用 unlink_assets_from_project 方法,并使用 project_id 参数。


    unity_cloud.assets.unlink_asset_from_project(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_ids = ["0123456789abcdefghijklmn"]
    )

获取资产预览文件 URL

要获取资产预览文件的 URL,请使用 get_preview_file_url 方法。

    preview_file_url = unity_cloud.assets.get_preview_file_url(
        org_id = "012345678912",
        project_id = "1234abcd-ab12-cd34-ef56-123456abcdef",
        asset_id = "0123456789abcdefghijklmn",
        asset_version = '1234abcd-ab12-cd34-ef56-123456abcdef'
    )