功能源文件位置:
UE4->Source->Editor->GameProjectGeneration->Private->SNewProjectWizard.cpp
下图按钮所调用的函数为:void SNewProjectWizard::CreateAndOpenProject( );
void SNewProjectWizard::CreateAndOpenProject( )
{
if( !IsCreateProjectEnabled() )
{
return;
}
//[ProjectFile]
FString ProjectFile = GetProjectFilenameWithPath();
//(ProjectFile:"E:\\3DEngine\\UnrealEngine4\\UEProject\\C++\\codeTest\\codeTest.uproject")
if ( !CreateProject(ProjectFile) )
{
return;
}
// Prevent periodic validity checks. This is to prevent a brief error message about the project already existing while you are exiting.
bPreventPeriodicValidityChecksUntilNextChange = true;
if( GetSelectedTemplateItem()->bGenerateCode )
{
// If the engine is installed it is already compiled, so we can try to build and open a new project immediately. Non-installed situations might require building
// the engine (especially the case when binaries came from P4), so we only open the IDE for that.
if (FApp::IsEngineInstalled())
{
if (GameProjectUtils::BuildCodeProject(ProjectFile))
{
OpenCodeIDE( ProjectFile );
OpenProject( ProjectFile );
}
else
{
// User will have already been prompted to open the IDE
}
}
else
{
OpenCodeIDE( ProjectFile );
}
}
else
{
OpenProject( ProjectFile );
}
}
函数内部又调用了bool SNewProjectWizard::CreateProject( const FString& ProjectFile )
bool SNewProjectWizard::CreateProject( const FString& ProjectFile )
{
// Get the selected template
TSharedPtr<FTemplateItem> SelectedTemplate = GetSelectedTemplateItem();
if (!ensure(SelectedTemplate.IsValid()))
{
// A template must be selected.
return false;
}
FText FailReason, FailLog;
FProjectInformation ProjectInfo(ProjectFile, SelectedTemplate->bGenerateCode, bCopyStarterContent, SelectedTemplate->ProjectFile);
ProjectInfo.TargetedHardware = SelectedHardwareClassTarget;
ProjectInfo.DefaultGraphicsPerformance = SelectedGraphicsPreset;
ProjectInfo.bIsEnterpriseProject = (SelectedTemplate->Type == FTemplateCategory::EnterpriseCategoryName);
if (!GameProjectUtils::CreateProject(ProjectInfo, FailReason, FailLog))
{
SOutputLogDialog::Open(LOCTEXT("CreateProject", "Create Project"), FailReason, FailLog, FText::GetEmpty());
return false;
}
// Successfully created the project. Update the last created location string.
FString CreatedProjectPath = FPaths::GetPath(FPaths::GetPath(ProjectFile));
// if the original path was the drives root (ie: C:/) the double path call strips the last /
if (CreatedProjectPath.EndsWith(":"))
{
CreatedProjectPath.AppendChar('/');
}
auto* Settings = GetMutableDefault<UEditorSettings>();
Settings->CreatedProjectPaths.Remove(CreatedProjectPath);
Settings->CreatedProjectPaths.Insert(CreatedProjectPath, 0);
Settings->bCopyStarterContentPreference = bCopyStarterContent;
Settings->PostEditChange();
return true;
}
以下图方式来调试该功能
FTemplateItem解析
参数很直白明了,不用多说了Type肯定有C++和Blueprint。