Skip to content

Commit cdbae3c

Browse files
committed
buildConfig, buildConfigBase 분리
1 parent f6c7cc6 commit cdbae3c

File tree

6 files changed

+156
-100
lines changed

6 files changed

+156
-100
lines changed

Editor/BuildConfig/AndroidBuildConfig.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Unity_Builder
77
{
88
[CreateAssetMenu(fileName = "AndroidBuildConfig", menuName = GlobalConst.CreateAssetMenu_Prefix + "/AndroidBuildConfig")]
9-
public class AndroidBuildConfig : BuildConfigBase
9+
public class AndroidBuildConfig : BuildConfig
1010
{
1111
public override BuildTarget buildTarget => BuildTarget.Android;
1212

@@ -28,20 +28,22 @@ public class AndroidBuildConfig : BuildConfigBase
2828

2929
public int bundleVersionCode;
3030

31-
public override void ResetSetting()
31+
public override void ResetSetting(BuildConfig buildConfig)
3232
{
33-
base.ResetSetting();
33+
base.ResetSetting(buildConfig);
3434

3535
BuildTargetGroup targetGroup = BuildPipeline.GetBuildTargetGroup(buildTarget);
3636
scriptingBackEnd = PlayerSettings.GetScriptingBackend(targetGroup);
3737
bundleVersionCode = PlayerSettings.Android.bundleVersionCode;
38-
buildPath +=
38+
buildConfig.buildPath +=
3939
"\n_{bundleVersion}.{bundleVersionCode}" +
4040
"\n_{scriptingBackEnd}";
4141
}
4242

43-
public override void OnPreBuild(IDictionary<string, string> commandLine)
43+
public override void OnPreBuild(IDictionary<string, string> commandLine, ref BuildPlayerOptions buildPlayerOptions)
4444
{
45+
base.OnPreBuild(commandLine, ref buildPlayerOptions);
46+
4547
PlayerSettings.Android.keyaliasName = keyaliasName;
4648
PlayerSettings.Android.keyaliasPass = keyaliasPassword;
4749

@@ -57,16 +59,11 @@ public override void OnPreBuild(IDictionary<string, string> commandLine)
5759
$"keystoreName : {PlayerSettings.Android.keystoreName}, keystorePass : {PlayerSettings.Android.keystorePass}\n");
5860
}
5961

60-
public override void OnPostBuild(IDictionary<string, string> commandLine)
61-
{
62-
}
63-
6462
public override string GetBuildPath()
6563
{
6664
return base.GetBuildPath()
6765
.Replace("{scriptingBackEnd}", scriptingBackEnd.ToString())
6866
.Replace("{bundleVersionCode}", bundleVersionCode.ToString())
69-
7067
+ ".apk";
7168
}
7269
}
@@ -86,7 +83,7 @@ public override void OnInspectorGUI()
8683
AndroidBuildConfig config = target as AndroidBuildConfig;
8784
if (GUILayout.Button("Reset to Current EditorSetting"))
8885
{
89-
config.ResetSetting();
86+
config.ResetSetting(config);
9087
}
9188

9289
if (GUILayout.Button("Build!"))

Editor/BuildConfig/BuildConfig.cs

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
using System.Diagnostics;
2+
using UnityEngine;
3+
using UnityEditor;
4+
using System.Linq;
5+
using System.Collections.Generic;
6+
using System;
7+
using System.IO;
8+
9+
namespace Unity_Builder
10+
{
11+
public abstract class BuildConfig : BuildConfigBase
12+
{
13+
/// <summary>
14+
/// 예시) com.CompanyName.ProductName
15+
/// </summary>
16+
public string applicationIdentifier;
17+
18+
/// <summary>
19+
/// 설치한 디바이스에 표기될 이름
20+
/// </summary>
21+
public string productName;
22+
23+
public string defineSymbol;
24+
25+
/// <summary>
26+
/// 빌드에 포함할 씬들, 확장자는 안쓰셔도 됩니다.
27+
/// <para>예시) ["Assets/SomethingScene_1", "Assets/SomethingScene_1"]</para>
28+
/// </summary>
29+
public string[] buildSceneNames;
30+
31+
public string bundleVersion;
32+
33+
// 출력할 폴더 및 파일은 Jenkins에서 처리할 예정이였으나,
34+
// IL2CPP의 경우 같은 장소에 빌드해놓으면 더 빠르다는 메뉴얼로 인해 일단 보류
35+
// https://docs.unity3d.com/kr/2020.2/Manual/IL2CPP-OptimizingBuildTimes.html
36+
[Tooltip("relative Path - UnityProject/Assets/")]
37+
[Multiline]
38+
public string buildPath;
39+
40+
public bool developmentBuild;
41+
public bool autoRunPlayer;
42+
public bool openBuildFolder;
43+
44+
45+
// List<BuildConfigBase>
46+
47+
void Reset()
48+
{
49+
ResetSetting(this);
50+
}
51+
52+
public override string GetBuildPath()
53+
{
54+
DateTime now = DateTime.Now;
55+
56+
string newBuildPath = Application.dataPath.Replace("/Assets", "/") + buildPath
57+
.Replace("\n", "")
58+
.Replace("{applicationIdentifier}", applicationIdentifier)
59+
.Replace("{productName}", productName)
60+
.Replace("{bundleVersion}", bundleVersion)
61+
62+
.Replace("{yyyy}", now.ToString("yyyy"))
63+
.Replace("{yy}", now.ToString("yy"))
64+
.Replace("{MM}", now.ToString("MM"))
65+
.Replace("{dd}", now.ToString("dd"))
66+
.Replace("{hh}", now.ToString("hh"))
67+
.Replace("{mm}", now.ToString("mm"))
68+
;
69+
70+
return newBuildPath;
71+
}
72+
73+
public override void ResetSetting(BuildConfig config)
74+
{
75+
BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(buildTarget);
76+
77+
applicationIdentifier = PlayerSettings.applicationIdentifier;
78+
productName = PlayerSettings.productName;
79+
defineSymbol = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup);
80+
buildSceneNames = GetEnabled_EditorScenes();
81+
bundleVersion = PlayerSettings.bundleVersion;
82+
buildPath = "Builds/{productName}\n_{MM}{dd}_{hh}{mm}";
83+
}
84+
85+
public override void OnPreBuild(IDictionary<string, string> commandLine, ref BuildPlayerOptions buildPlayerOptions)
86+
{
87+
if (string.IsNullOrEmpty(applicationIdentifier) == false)
88+
PlayerSettings.applicationIdentifier = applicationIdentifier;
89+
PlayerSettings.bundleVersion = bundleVersion;
90+
91+
var options = buildPlayerOptions.options;
92+
if (developmentBuild)
93+
options |= BuildOptions.Development;
94+
95+
if (autoRunPlayer)
96+
options |= BuildOptions.AutoRunPlayer;
97+
98+
buildPlayerOptions.options = options;
99+
}
100+
101+
public override void OnPostBuild(IDictionary<string, string> commandLine)
102+
{
103+
if (openBuildFolder)
104+
{
105+
string buildPath = GetBuildPath();
106+
string buildFolderPath = Path.GetDirectoryName(buildPath);
107+
Process.Start(buildFolderPath);
108+
}
109+
}
110+
111+
public static string[] GetEnabled_EditorScenes()
112+
{
113+
return EditorBuildSettings.scenes
114+
.Where(p => p.enabled)
115+
.Select(p => p.path.Replace(".unity", ""))
116+
.ToArray();
117+
}
118+
}
119+
}

Editor/BuildConfig/BuildConfig.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/BuildConfig/BuildConfigBase.cs

Lines changed: 12 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,35 @@
1+
using System.Diagnostics;
12
using UnityEngine;
23
using UnityEditor;
34
using System.Linq;
45
using System.Collections.Generic;
56
using System;
7+
using System.IO;
68

79
namespace Unity_Builder
810
{
911
public interface IBuildConfig
1012
{
1113
BuildTarget buildTarget { get; }
1214

13-
void ResetSetting();
14-
void OnPreBuild(IDictionary<string, string> commandLine);
15+
void ResetSetting(BuildConfig buildConfig);
16+
string GetBuildPath();
17+
18+
void OnPreBuild(IDictionary<string, string> commandLine, ref BuildPlayerOptions buildPlayerOptions);
1519
void OnPostBuild(IDictionary<string, string> commandLine);
1620
}
1721

22+
/// <summary>
23+
/// Unity Inspector에 등록하기 위함..
24+
/// </summary>
1825
public abstract class BuildConfigBase : ScriptableObject, IBuildConfig
1926
{
2027
public abstract BuildTarget buildTarget { get; }
2128

22-
/// <summary>
23-
/// 예시) com.CompanyName.ProductName
24-
/// </summary>
25-
public string applicationIdentifier;
26-
27-
/// <summary>
28-
/// 설치한 디바이스에 표기될 이름
29-
/// </summary>
30-
public string productName;
31-
32-
public string defineSymbol;
33-
34-
/// <summary>
35-
/// 빌드에 포함할 씬들, 확장자는 안쓰셔도 됩니다.
36-
/// <para>예시) ["Assets/SomethingScene_1", "Assets/SomethingScene_1"]</para>
37-
/// </summary>
38-
public string[] buildSceneNames;
39-
40-
public string bundleVersion;
41-
42-
// 출력할 폴더 및 파일은 Jenkins에서 처리할 예정이였으나,
43-
// IL2CPP의 경우 같은 장소에 빌드해놓으면 더 빠르다는 메뉴얼로 인해 일단 보류
44-
// https://docs.unity3d.com/kr/2020.2/Manual/IL2CPP-OptimizingBuildTimes.html
45-
[Tooltip("relative Path - UnityProject/Assets/")]
46-
[Multiline]
47-
public string buildPath;
48-
49-
void Reset()
50-
{
51-
ResetSetting();
52-
}
53-
54-
public virtual string GetBuildPath()
55-
{
56-
DateTime now = DateTime.Now;
57-
58-
string newBuildPath = Application.dataPath.Replace("/Assets", "/") + buildPath
59-
.Replace("\n", "")
60-
.Replace("{applicationIdentifier}", applicationIdentifier)
61-
.Replace("{productName}", productName)
62-
.Replace("{bundleVersion}", bundleVersion)
63-
64-
.Replace("{yyyy}", now.ToString("yyyy"))
65-
.Replace("{yy}", now.ToString("yy"))
66-
.Replace("{MM}", now.ToString("MM"))
67-
.Replace("{dd}", now.ToString("dd"))
68-
.Replace("{hh}", now.ToString("hh"))
69-
.Replace("{mm}", now.ToString("mm"))
70-
;
71-
72-
return newBuildPath;
73-
}
74-
75-
public virtual void ResetSetting()
76-
{
77-
BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(buildTarget);
78-
79-
applicationIdentifier = PlayerSettings.applicationIdentifier;
80-
productName = PlayerSettings.productName;
81-
defineSymbol = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup);
82-
buildSceneNames = GetEnabled_EditorScenes();
83-
bundleVersion = PlayerSettings.bundleVersion;
84-
buildPath = "Builds/{productName}\n_{MM}{dd}_{hh}{mm}";
85-
}
86-
87-
public virtual void OnPreBuild(IDictionary<string, string> commandLine)
88-
{
89-
if (string.IsNullOrEmpty(applicationIdentifier) == false)
90-
PlayerSettings.applicationIdentifier = applicationIdentifier;
91-
92-
PlayerSettings.bundleVersion = bundleVersion;
93-
}
29+
public abstract void ResetSetting(BuildConfig buildConfig);
30+
public abstract string GetBuildPath();
9431

9532
public abstract void OnPostBuild(IDictionary<string, string> commandLine);
96-
97-
public static string[] GetEnabled_EditorScenes()
98-
{
99-
return EditorBuildSettings.scenes
100-
.Where(p => p.enabled)
101-
.Select(p => p.path.Replace(".unity", ""))
102-
.ToArray();
103-
}
104-
33+
public abstract void OnPreBuild(IDictionary<string, string> commandLine, ref BuildPlayerOptions buildPlayerOptions);
10534
}
10635
}

Editor/UnityBuilder.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class UnityBuilder
3636
{
3737
public static void Build()
3838
{
39-
if (GetSO_FromCommandLine("configpath", out BuildConfigBase config))
39+
if (GetSO_FromCommandLine("configpath", out BuildConfig config))
4040
{
4141
Build(config);
4242
}
@@ -46,7 +46,7 @@ public static void Build()
4646
}
4747
}
4848

49-
public static void Build(BuildConfigBase buildConfig)
49+
public static void Build(BuildConfig buildConfig)
5050
{
5151
BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(buildConfig.buildTarget);
5252
BuildPlayerOptions buildPlayerOptions = Generate_BuildPlayerOption(buildConfig);
@@ -62,7 +62,7 @@ public static void Build(BuildConfigBase buildConfig)
6262
Dictionary<string, string> commandLine = new Dictionary<string, string>();
6363
try
6464
{
65-
buildConfig.OnPreBuild(commandLine);
65+
buildConfig.OnPreBuild(commandLine, ref buildPlayerOptions);
6666
BuildReport report = UnityEditor.BuildPipeline.BuildPlayer(buildPlayerOptions);
6767
buildConfig.OnPostBuild(commandLine);
6868

@@ -105,7 +105,7 @@ public static bool GetSO_FromCommandLine<T>(string commandLine, out T outFile)
105105

106106
#region private
107107

108-
private static BuildPlayerOptions Generate_BuildPlayerOption(BuildConfigBase buildConfig)
108+
private static BuildPlayerOptions Generate_BuildPlayerOption(BuildConfig buildConfig)
109109
{
110110
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions
111111
{
@@ -119,7 +119,7 @@ private static BuildPlayerOptions Generate_BuildPlayerOption(BuildConfigBase bui
119119
}
120120

121121

122-
private static PlayerSetting_Backup SettingBuildConfig_To_EditorSetting(BuildConfigBase buildConfig, BuildTargetGroup buildTargetGroup)
122+
private static PlayerSetting_Backup SettingBuildConfig_To_EditorSetting(BuildConfig buildConfig, BuildTargetGroup buildTargetGroup)
123123
{
124124
string defineSymbol_Backup = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup);
125125
PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargetGroup, buildConfig.defineSymbol);

Tests/Editor/BuildConfigTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class BuildConfigTests
1212
public void OverwriteTest()
1313
{
1414
AndroidBuildConfig buildConfig = AndroidBuildConfig.CreateInstance<AndroidBuildConfig>();
15-
buildConfig.ResetSetting();
15+
buildConfig.ResetSetting(buildConfig);
1616

1717
string productName = buildConfig.productName;
1818
string testProductName = "product_" + Random.Range(1, 100).ToString();

0 commit comments

Comments
 (0)