//拖动释放时 void EditorSceneWidget::dropEvent(QDropEvent *event) { QList<QUrl> urls = event->mimeData()->urls(); if(urls.isEmpty()) return; QString fileName = urls.first().path(); if(fileName.isEmpty()) { return; } IntVector2 pos(event->pos().x(),event->pos().y()); vector<SceneHitResult> results = SceneHelper::Instance()->QueryCurrentMousePosObjects(250.f,&pos); if(results.size() == 0) return; fileName = fileName.right(fileName.size() - 1); if(fileName.indexOf(".mdl") > 0) { for(int i = 0;i < results.size();i ++) { const SceneHitResult& obj = results[i]; if(obj.object->GetTypeName() == "TerrainPatch") { SceneHelper::AddMesh(fileName.toStdString().c_str(),obj.hitPos.x_,obj.hitPos.y_,obj.hitPos.z_,fileName.toStdString().c_str()); break; } } } else if(fileName.indexOf(".xml") > 0) //todo:进一步识别是否是Material { const SceneHitResult& obj = results[0]; if(obj.object->GetTypeName() == "StaticModel" || obj.object->GetTypeName() == "AnimatedModel") { StaticModel* pModel = (StaticModel*)obj.object; ResourceCache* cache = EditorRoot::Instance()->engine_->GetContext()->GetSubsystem<ResourceCache>(); //选择材质序号 int index = 0; if(pModel->GetBatches().Size() > 1) { } pModel->SetMaterial(index,cache->GetResource<Material>(fileName.toStdString().c_str())); } } }