UE4创建VS工程项目源码分析 之准备

版权声明:未经同意,不能用于商业用途,版权归本博主所有 https://blog.csdn.net/qq_16123279/article/details/82082576

功能源文件位置:
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。



猜你喜欢

转载自blog.csdn.net/qq_16123279/article/details/82082576