1.Unreal Engine 4 설치 및 ProudNet을 연동한 빌드 방법

heon.kwakEdit

1.1Unreal Engine 4 설치

그림 1-1그림1

그림 1-2그림2

그림 1-3그림3

그림 1-4그림4

그림 1-5그림5

그림 1-6그림6

그림 1-7그림7

그림 1-8그림8

그림 1-9그림9

1.2데스크탑 환경(Windows/Mac/Linux)에서 프로젝트 생성 및 빌드

그림 1-10그림10

그림 1-11그림11

그림 1-12그림12

using UnrealBuildTool;
using System.IO;
public class UE4ProudNetTest_Src : ModuleRules
{
 public UE4ProudNetTest_Src(TargetInfo Target)
 {
  PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
        LoadProudNet(Target);
 }
    private string ModulePath
    {
        get
        {
            return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name));
        }
    }
    private string ThirdPartyPath
    {
        get
        {
            return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/"));
        }
    }
    public bool LoadProudNet(TargetInfo Target)
    {
        bool isLibrarySupported = false;
        isLibrarySupported = true;
        if (Target.Platform == UnrealTargetPlatform.Win64)
        {
            string LibrariesPath = Path.Combine(ThirdPartyPath, "ProudNet", "lib", "x64", "Release");
            PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "ProudNetClient.lib"));
            PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "ProudNet", "include"));
            //Definitions.Add(string.Format("WITH_PROUD_NET_BINDING={0}", isLibrarySupported ? 1 : 0));
        }
        else if (Target.Platform == UnrealTargetPlatform.Win32)
        {
            string LibrariesPath = Path.Combine(ThirdPartyPath, "ProudNet", "lib", "Win32", "Release");
            PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "ProudNetClient.lib"));
            PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "ProudNet", "include"));
            //Definitions.Add(string.Format("WITH_PROUD_NET_BINDING={0}", isLibrarySupported ? 1 : 0));
        }
        else if (Target.Platform == UnrealTargetPlatform.IOS)
        {
            string LibrariesPath = Path.Combine(ThirdPartyPath, "ProudNet", "lib", "IOS", "Release-iphoneos");
            PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libProudNetClient.a"));
            PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libiconv.2.tbd"));
            PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "ProudNet", "include"));
            //Definitions.Add(string.Format("WITH_PROUD_NET_BINDING={0}", isLibrarySupported ? 1 : 0));
        }
        else if (Target.Platform == UnrealTargetPlatform.Android)
        {
            string LibrariesPath = Path.Combine(ThirdPartyPath, "ProudNet", "lib", "Android", "Release");
            PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "libProudNetClient.a"));
            PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "ProudNet", "include"));
            Definitions.Add(string.Format("WITH_PROUD_NET_BINDING={0}", isLibrarySupported ? 1 : 0));
            //Definitions.Add("_EG_ANDROID_PLATFORM");
        }
        return isLibrarySupported;
    }
}
using UnrealBuildTool;
using System.IO;

public class UE4withPN : ModuleRules
{
    public string ModulePath
    {
        get
        {
            // https://answers.unrealengine.com/questions/396982/cant-build-project-in-ue-412.html?sort=oldest
            RulesAssembly r;
            FileReference CheckProjectFile;
            UProjectInfo.TryGetProjectForTarget("UE4withPN", out CheckProjectFile);

            r = RulesCompiler.CreateProjectRulesAssembly(CheckProjectFile);
            FileReference f = r.GetModuleFileName(this.GetType().Name);

            return Path.GetDirectoryName(f.CanonicalName);
        }
    }

    private string ThirdPartyPath
    {
        get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
    }

    public UE4withPN(TargetInfo Target)
    {
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

        PrivateDependencyModuleNames.AddRange(new string[] {  });

        // Uncomment if you are using Slate UI
        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

        // Uncomment if you are using online features
        // PrivateDependencyModuleNames.Add("OnlineSubsystem");
        // if ((Target.Platform == UnrealTargetPlatform.Win32) || (Target.Platform == UnrealTargetPlatform.Win64))
        // {
        //        if (UEBuildConfiguration.bCompileSteamOSS == true)
        //        {
        //            DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");
        //        }
        // }

        // 이 함수 내에서 지정하는 경로가 다르다면 빌드되지 않는다! 주의!!
        LoadProudNet(Target);
    }

    public bool LoadProudNet(TargetInfo Target)
    {
        bool isLibrarySupported = true;

        switch (Target.Platform)
        {
            case UnrealTargetPlatform.Win64:
                {
                    string LibraryPath = Path.Combine(ThirdPartyPath, "ProudNet", "lib", "x64", "VS2015", "Release");
                    PublicAdditionalLibraries.Add(Path.Combine(LibraryPath, "ProudNetClient.lib"));
                    PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "ProudNet", "include"));
                }
                break;

            default:
                isLibrarySupported = false;
                break;
        }

        return isLibrarySupported;
    }
}

그림 1-13그림18

1.3Android 빌드

1.4IOS 빌드

빌드 시 특이 사항

Windows 환경에서 IOS 원격 빌드 방법

Mac 환경 설정

[root]
  path = /
  hosts allow \ [PC 이름]
  uid = root
  gid = wheel
  read only = false
  comment = Root volume

Windows 환경 설정

그림 1-14그림15

그림 1-15그림16