Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -118,28 +118,7 @@ export declare interface AssetOperationOption {
overwrite?: boolean;
rename?: boolean;
}
export declare interface AssetPropertySchema {
label: string;
description?: string;
type: AssetPropertySchemaType;
default?: unknown;
options?: AssetPropertySchemaOption[];
assetType?: string;
min?: number;
max?: number;
step?: number;
readOnly?: boolean;
order?: number;
properties?: Record<string, AssetPropertySchema>;
items?: AssetPropertySchema | AssetPropertySchema[];
raw?: unknown;
}
export declare type AssetPropertySchemaMap = Record<string, AssetPropertySchema>;
export declare interface AssetPropertySchemaOption {
label: string;
value: string | number | boolean;
}
export declare type AssetPropertySchemaType = 'string' | 'number' | 'boolean' | 'enum' | 'asset' | 'array' | 'object';
export declare type AssetPropertySchemaMap = Record<string, ICocosConfigurationPropertySchema>;
export declare interface AssetUserDataMap {
'animation-clip': AnimationClipAssetUserData;
'auto-atlas': AutoAtlasAssetUserData;
Expand Down Expand Up @@ -460,6 +439,22 @@ export declare interface IAssetWriteFileOptions extends IAssetOperationOptionsBa
create?: boolean;
overwrite?: boolean;
}
export declare interface ICocosConfigurationPropertySchema {
type: 'string' | 'number' | 'boolean' | 'object' | 'array';
default?: unknown;
title?: string;
description?: string;
enum?: Array<string | number | boolean>;
enumDescriptions?: string[];
minimum?: number;
maximum?: number;
step?: number;
order?: number;
properties?: Record<string, ICocosConfigurationPropertySchema>;
items?: ICocosConfigurationPropertySchema | ICocosConfigurationPropertySchema[];
additionalProperties?: boolean | ICocosConfigurationPropertySchema;
required?: string[];
}
export declare interface ICreateMenuInfo {
label: string;
name: string;
Expand Down Expand Up @@ -7011,28 +7006,7 @@ export declare interface AssetOperationOption {
overwrite?: boolean;
rename?: boolean;
}
export declare interface AssetPropertySchema {
label: string;
description?: string;
type: AssetPropertySchemaType;
default?: unknown;
options?: AssetPropertySchemaOption[];
assetType?: string;
min?: number;
max?: number;
step?: number;
readOnly?: boolean;
order?: number;
properties?: Record<string, AssetPropertySchema>;
items?: AssetPropertySchema | AssetPropertySchema[];
raw?: unknown;
}
export declare type AssetPropertySchemaMap = Record<string, AssetPropertySchema>;
export declare interface AssetPropertySchemaOption {
label: string;
value: string | number | boolean;
}
export declare type AssetPropertySchemaType = 'string' | 'number' | 'boolean' | 'enum' | 'asset' | 'array' | 'object';
export declare type AssetPropertySchemaMap = Record<string, ICocosConfigurationPropertySchema>;
export declare namespace Assets {
export {
init,
Expand Down Expand Up @@ -7097,9 +7071,6 @@ export declare namespace Assets {
SerializedAssetDump,
SerializedAssetPatch,
SerializedAssetQueryResult,
AssetPropertySchemaType,
AssetPropertySchemaOption,
AssetPropertySchema,
AssetPropertySchemaMap,
IAssetInfo,
AssetOperationOption,
Expand Down
2 changes: 1 addition & 1 deletion src/api/assets/assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1018,7 +1018,7 @@ export class AssetsApi {
*/
@tool('assets-query-property-schema')
@title('Query Asset Import Property Schema') // 查询资源导入属性 schema
@description('Query the standardized import property schema for a specific asset importer. The result is designed for panels to render import settings automatically and includes stable fields such as label, type, default, options, assetType, min, max, step, readOnly, and order. The raw field is only for debugging and should not be used as a UI contract.') // 查询指定资源导入器的标准化导入属性 schema,用于面板自动渲染导入设置。
@description('Query the import property schema map for a specific asset importer. The result value follows ICocosConfigurationPropertySchema, using fields such as title, type, default, enum, enumDescriptions, minimum, maximum, step, properties, and items.') // 查询指定资源导入器的标准化导入属性 schema,用于面板自动渲染导入设置。
@result(SchemaAssetPropertySchemaResult)
async queryPropertySchema(
@param(SchemaUserDataHandler) importer: TUserDataHandler
Expand Down
39 changes: 17 additions & 22 deletions src/api/assets/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -343,29 +343,24 @@ export const SchemaAssetConfig = z.object({
export const SchemaAssetConfigMapResult = z.record(z.string(), SchemaAssetConfig).describe('Asset configuration map, key is asset handler name, value is corresponding configuration information'); // 资源配置映射表,键为资源处理器名称,值为对应的配置信息
export type TAssetConfigMapResult = z.infer<typeof SchemaAssetConfigMapResult>;

export const SchemaAssetPropertySchemaOption = z.object({
label: z.string().describe('Option display label'), // 选项显示名称
value: z.union([z.string(), z.number(), z.boolean()]).describe('Option value'), // 选项值
}).describe('Asset property schema option'); // 资源属性 schema 选项

export const SchemaAssetPropertySchema: z.ZodType<any> = z.lazy(() => z.object({
label: z.string().describe('Property display label'), // 属性显示名称
description: z.string().optional().describe('Property description'), // 属性描述
type: z.enum(['string', 'number', 'boolean', 'enum', 'asset', 'array', 'object']).describe('Property value/control type'), // 属性值或控件类型
default: z.any().optional().describe('Static default value'), // 静态默认值
options: z.array(SchemaAssetPropertySchemaOption).optional().describe('Enum/select options'), // 枚举/下拉选项
assetType: z.string().optional().describe('Allowed Cocos asset type for asset picker'), // Asset Picker 允许的 Cocos 资源类型
min: z.number().optional().describe('Minimum number value'), // 数值最小值
max: z.number().optional().describe('Maximum number value'), // 数值最大值
step: z.number().optional().describe('Number input step'), // 数值步进
readOnly: z.boolean().optional().describe('Whether the property is read-only'), // 是否只读
order: z.number().optional().describe('Display order'), // 展示顺序
properties: z.record(z.string(), SchemaAssetPropertySchema).optional().describe('Nested object properties'), // 嵌套对象属性
items: z.union([SchemaAssetPropertySchema, z.array(SchemaAssetPropertySchema)]).optional().describe('Array item schema'), // 数组元素 schema
raw: z.any().optional().describe('Original legacy userDataConfig item for debugging only'), // 原始旧配置,仅用于调试
}).describe('Standardized asset import property schema')); // 标准化资源导入属性 schema

export const SchemaAssetPropertySchemaResult = z.record(z.string(), SchemaAssetPropertySchema).describe('Asset import property schema map, key is property name'); // 资源导入属性 schema 映射
type: z.enum(['string', 'number', 'boolean', 'object', 'array']).describe('Configuration property value type'),
default: z.any().optional().describe('Default value'),
title: z.string().optional().describe('Display title'),
description: z.string().optional().describe('Property description'),
enum: z.array(z.union([z.string(), z.number(), z.boolean()])).optional().describe('Allowed enum values'),
enumDescriptions: z.array(z.string()).optional().describe('Display text for enum values'),
minimum: z.number().optional().describe('Minimum number value'),
maximum: z.number().optional().describe('Maximum number value'),
step: z.number().optional().describe('Number input step'),
order: z.number().optional().describe('Display order'),
properties: z.record(z.string(), SchemaAssetPropertySchema).optional().describe('Nested object properties'),
items: z.union([SchemaAssetPropertySchema, z.array(SchemaAssetPropertySchema)]).optional().describe('Array item schema'),
additionalProperties: z.union([z.boolean(), SchemaAssetPropertySchema]).optional().describe('Additional object property schema'),
required: z.array(z.string()).optional().describe('Required nested object property keys'),
})).describe('Cocos configuration property schema for asset import properties');

export const SchemaAssetPropertySchemaResult = z.record(z.string(), SchemaAssetPropertySchema).describe('Asset import property schema map, key is property name, value follows ICocosConfigurationPropertySchema');
export type TAssetPropertySchemaResult = z.infer<typeof SchemaAssetPropertySchemaResult>;

export const SchemaAnimationGraphVariantDump = z.object({
Expand Down
5 changes: 3 additions & 2 deletions src/core/assets/@types/protected/asset-handler.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { type } from 'os';
import { IAsset, IAssetInfo, VirtualAsset, Asset, IExportData, IAssetType } from './asset';
import { Migrate } from '@cocos/asset-db/libs/importer';
import type { AssetPropertySchemaMap } from '../public';

export interface CustomOperator {
label?: string; // 处理方法名,displayName 将会出现在一些文档定义上
Expand Down Expand Up @@ -93,8 +94,8 @@ export interface AssetHandlerBase extends CustomHandlerBase {
// 对应导入资源在导入后的资源类型信息,未传递默认为 cc.Asset
assetType?: IAssetType;

// Schema-only userData config. It is not registered as runtime default userData.
propertySchemaConfig?: Record<string, IUerDataConfigItem>;
// Schema-only userData property schema. It is not registered as runtime default userData.
propertySchemaConfig?: AssetPropertySchemaMap;

// 指定资源的 userData 配置
userDataConfig?: {
Expand Down
27 changes: 2 additions & 25 deletions src/core/assets/@types/public.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { AssetHandlerType, ISupportCreateType, AssetUserDataMap, IAssetType } from './asset-types';
import type { IProperty } from '../../scene/@types/public';
import type { ICocosConfigurationPropertySchema } from '../../configuration/script/metadata';
export type { IProperty } from '../../scene/@types/public';
export type {
IAssetDeleteOptions,
Expand Down Expand Up @@ -37,31 +38,7 @@ export interface SerializedAssetQueryResult {
dump: SerializedAssetDump;
}

export type AssetPropertySchemaType = 'string' | 'number' | 'boolean' | 'enum' | 'asset' | 'array' | 'object';

export interface AssetPropertySchemaOption {
label: string;
value: string | number | boolean;
}

export interface AssetPropertySchema {
label: string;
description?: string;
type: AssetPropertySchemaType;
default?: unknown;
options?: AssetPropertySchemaOption[];
assetType?: string;
min?: number;
max?: number;
step?: number;
readOnly?: boolean;
order?: number;
properties?: Record<string, AssetPropertySchema>;
items?: AssetPropertySchema | AssetPropertySchema[];
raw?: unknown;
}

export type AssetPropertySchemaMap = Record<string, AssetPropertySchema>;
export type AssetPropertySchemaMap = Record<string, ICocosConfigurationPropertySchema>;

// 如果使用了 datakeys 过滤,请使用此接口定义
export interface IAssetInfo {
Expand Down
102 changes: 46 additions & 56 deletions src/core/assets/asset-handler/assets/auto-atlas.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Asset } from '@cocos/asset-db';
import { createTextureBaseUserDataConfig, makeDefaultTextureBaseAssetUserData } from './texture-base';
import { createTextureBasePropertySchema, makeDefaultTextureBaseAssetUserData } from './texture-base';

import { getDependUUIDList } from '../utils';
import { AssetHandler } from '../../@types/protected';
Expand Down Expand Up @@ -36,108 +36,98 @@ const AutoAtlasHandler: AssetHandler = {
assetType: 'cc.SpriteAtlas',
propertySchemaConfig: {
maxWidth: {
label: 'Max Width',
title: 'Max Width',
type: 'number',
default: defaultAutoAtlasUserData.maxWidth,
render: {
ui: 'ui-number-input',
attributes: { min: 1, step: 1 },
},
minimum: 1,
step: 1,
},
maxHeight: {
label: 'Max Height',
title: 'Max Height',
type: 'number',
default: defaultAutoAtlasUserData.maxHeight,
render: {
ui: 'ui-number-input',
attributes: { min: 1, step: 1 },
},
minimum: 1,
step: 1,
},
padding: {
label: 'Padding',
title: 'Padding',
type: 'number',
default: defaultAutoAtlasUserData.padding,
render: {
ui: 'ui-number-input',
attributes: { min: 0, step: 1 },
},
minimum: 0,
step: 1,
},
allowRotation: {
label: 'Allow Rotation',
title: 'Allow Rotation',
type: 'boolean',
default: defaultAutoAtlasUserData.allowRotation,
render: { ui: 'ui-checkbox' },
},
forceSquared: {
label: 'Force Squared',
title: 'Force Squared',
type: 'boolean',
default: defaultAutoAtlasUserData.forceSquared,
render: { ui: 'ui-checkbox' },
},
powerOfTwo: {
label: 'Power Of Two',
title: 'Power Of Two',
type: 'boolean',
default: defaultAutoAtlasUserData.powerOfTwo,
render: { ui: 'ui-checkbox' },
},
algorithm: {
label: 'Algorithm',
title: 'Algorithm',
type: 'string',
default: defaultAutoAtlasUserData.algorithm,
render: {
ui: 'ui-select',
items: [
{ label: 'MaxRects', value: 'MaxRects' },
],
},
enum: ['MaxRects'],
enumDescriptions: ['MaxRects'],
},
format: {
label: 'Format',
title: 'Format',
type: 'string',
default: defaultAutoAtlasUserData.format,
render: {
ui: 'ui-select',
items: [
{ label: 'PNG', value: 'png' },
{ label: 'JPG', value: 'jpg' },
],
},
enum: ['png', 'jpg'],
enumDescriptions: ['PNG', 'JPG'],
},
quality: {
label: 'Quality',
title: 'Quality',
type: 'number',
default: defaultAutoAtlasUserData.quality,
render: {
ui: 'ui-number-input',
attributes: { min: 0, max: 100, step: 1 },
},
minimum: 0,
maximum: 100,
step: 1,
},
contourBleed: {
label: 'Contour Bleed',
title: 'Contour Bleed',
type: 'boolean',
default: defaultAutoAtlasUserData.contourBleed,
render: { ui: 'ui-checkbox' },
},
paddingBleed: {
label: 'Padding Bleed',
title: 'Padding Bleed',
type: 'boolean',
default: defaultAutoAtlasUserData.paddingBleed,
render: { ui: 'ui-checkbox' },
},
filterUnused: {
label: 'Filter Unused',
title: 'Filter Unused',
type: 'boolean',
default: defaultAutoAtlasUserData.filterUnused,
render: { ui: 'ui-checkbox' },
},
removeTextureInBundle: {
label: 'Remove Texture In Bundle',
title: 'Remove Texture In Bundle',
type: 'boolean',
default: defaultAutoAtlasUserData.removeTextureInBundle,
render: { ui: 'ui-checkbox' },
},
removeImageInBundle: {
label: 'Remove Image In Bundle',
title: 'Remove Image In Bundle',
type: 'boolean',
default: defaultAutoAtlasUserData.removeImageInBundle,
render: { ui: 'ui-checkbox' },
},
removeSpriteAtlasInBundle: {
label: 'Remove SpriteAtlas In Bundle',
title: 'Remove SpriteAtlas In Bundle',
type: 'boolean',
default: defaultAutoAtlasUserData.removeSpriteAtlasInBundle,
render: { ui: 'ui-checkbox' },
},
textureSetting: {
label: 'Texture Setting',
title: 'Texture Setting',
type: 'object',
default: defaultAutoAtlasUserData.textureSetting,
itemConfigs: createTextureBaseUserDataConfig(),
properties: createTextureBasePropertySchema(),
},
},
createInfo: {
Expand Down
Loading
Loading