This commit is contained in:
2026-05-18 18:53:30 +08:00
parent fb193c0528
commit 840e3d6a55
12 changed files with 907 additions and 68 deletions

View File

@ -31,6 +31,7 @@ type ModelTransform = {
};
type ModelMetadata = {
modelName: string;
modelId: string;
modelUrl: string;
modelControlType?: ModelControlType;
@ -253,6 +254,7 @@ export class AppModel extends Monobehiver {
// 单个加载
return await this.addSingle(
modelConfig.modelName,
modelConfig.modelId,
modelConfig.modelUrl,
modelConfig.modelControlType,
@ -264,9 +266,9 @@ export class AppModel extends Monobehiver {
/**
* 添加单个模型
*/
private async addSingle(modelName: string, modelUrl: string, modelControlType?: ModelControlType, drag?: DragConfig, transform?: ModelTransform): Promise<LoadResult> {
private async addSingle(modelName: string, modelId: string, modelUrl: string, modelControlType?: ModelControlType, drag?: DragConfig, transform?: ModelTransform): Promise<LoadResult> {
// 检查是否已存在
const existingMeshes = this.modelDic.Get(modelName);
const existingMeshes = this.modelDic.Get(modelId);
if (existingMeshes?.length && !existingMeshes[0].isDisposed()) {
console.log(`模型 ${modelName} 已存在,直接显示`);
this.showMeshes(existingMeshes);
@ -280,14 +282,15 @@ export class AppModel extends Monobehiver {
if (result.success && result.meshes) {
// 克隆材质,确保每个模型有独立的材质
this.cloneMaterials(result.meshes, modelName);
this.cloneMaterials(result.meshes, modelId);
result.meshes = this.createModelRoot(modelName, result.meshes);
this.modelDic.Set(modelName, result.meshes);
result.meshes = this.createModelRoot(modelId, result.meshes);
this.modelDic.Set(modelId, result.meshes);
// 存储元数据
this.modelMetadataDic.Set(modelName, {
modelId: modelName,
this.modelMetadataDic.Set(modelId, {
modelName: modelName,
modelId: modelId,
modelUrl: modelUrl,
modelControlType: modelControlType,
drag: drag,
@ -296,12 +299,12 @@ export class AppModel extends Monobehiver {
// 应用 transform
if (transform) {
this.applyTransform(modelName, transform);
this.applyTransform(modelId, transform);
}
// 配置拖拽功能
if (drag) {
this.mainApp.appModelDrag?.configureDrag(modelName, drag);
this.mainApp.appModelDrag?.configureDrag(modelId, drag);
}
// 更新 GameManager 的字典
@ -325,7 +328,7 @@ export class AppModel extends Monobehiver {
EventBridge.modelLoadProgress({ loaded: 0, total, progress: 0, percentage: 0 });
for (let i = 0; i < models.length; i++) {
const { modelId, modelUrl, modelControlType, drag, transform } = models[i];
const { modelName, modelId, modelUrl, modelControlType, drag, transform } = models[i];
const result = await this.loadSingleModel(modelUrl, (event) => {
this.emitProgress(i, total, modelUrl, event);
@ -340,6 +343,7 @@ export class AppModel extends Monobehiver {
// 存储元数据
this.modelMetadataDic.Set(modelId, {
modelName: modelName,
modelId: modelId,
modelUrl: modelUrl,
modelControlType: modelControlType,
@ -483,6 +487,7 @@ export class AppModel extends Monobehiver {
this.removeByName(modelConfig.modelId);
return await this.addSingle(
modelConfig.modelName,
modelConfig.modelId,
modelConfig.modelUrl,
modelConfig.modelControlType,