-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBuildScript.cs
More file actions
118 lines (99 loc) · 4.02 KB
/
BuildScript.cs
File metadata and controls
118 lines (99 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;
using System.IO;
using System.Diagnostics;
using Debug = UnityEngine.Debug;
public class BuildScript
{
private const string BuildPath = "Builds";
private const string ProductName = "Aincrad";
[MenuItem("VRChat/Build/All Platforms")]
public static void BuildAllPlatforms()
{
// Build for Windows
BuildForPlatform(BuildTarget.StandaloneWindows64, "Windows");
// Build for Android (Quest)
BuildForPlatform(BuildTarget.Android, "Android");
}
[MenuItem("VRChat/Build/Windows")]
public static void BuildWindows()
{
BuildForPlatform(BuildTarget.StandaloneWindows64, "Windows");
}
[MenuItem("VRChat/Build/Android (Quest)")]
public static void BuildAndroid()
{
BuildForPlatform(BuildTarget.Android, "Android");
}
private static void BuildForPlatform(BuildTarget target, string platformName)
{
// Set build location
string locationPathName = Path.Combine(BuildPath, platformName,
target == BuildTarget.Android ? $"{ProductName}.apk" : $"{ProductName}.exe");
// Ensure build directory exists
string directory = Path.GetDirectoryName(locationPathName);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
// Get enabled scenes
string[] scenes = GetEnabledScenes();
if (scenes.Length == 0)
{
Debug.LogError("No scenes found to build!");
return;
}
// Configure build options
BuildOptions options = BuildOptions.None;
if (target == BuildTarget.Android)
{
// Android specific settings
PlayerSettings.Android.minSdkVersion = AndroidSdkVersions.AndroidApiLevel24;
PlayerSettings.Android.targetSdkVersion = AndroidSdkVersions.AndroidApiLevel31;
PlayerSettings.Android.targetArchitectures = AndroidArchitecture.ARM64;
PlayerSettings.Android.bundleVersionCode++;
// Texture compression
EditorUserBuildSettings.androidBuildSubtarget = MobileTextureSubtarget.ASTC;
// Development build for debugging
if (EditorUserBuildSettings.development)
{
options |= BuildOptions.Development | BuildOptions.AllowDebugging;
}
}
// Build the player
BuildReport report = BuildPipeline.BuildPlayer(scenes, locationPathName, target, options);
BuildSummary summary = report.summary;
if (summary.result == BuildResult.Succeeded)
{
string size = (summary.totalSize / (1024f * 1024f)).ToString("F2");
string message = $"Build succeeded: {size}MB\n" +
$"Output: {summary.outputPath}\n" +
$"Time: {summary.totalTime.TotalSeconds:F2} seconds";
Debug.Log(message);
EditorUtility.DisplayDialog("Build Succeeded", message, "OK");
// Open the build folder
Process.Start(Path.GetDirectoryName(Path.GetFullPath(summary.outputPath)));
}
else if (summary.result == BuildResult.Failed)
{
string error = "Build failed with " + summary.totalErrors + " errors.\n" +
"Check the console for details.";
Debug.LogError(error);
EditorUtility.DisplayDialog("Build Failed", error, "OK");
}
}
private static string[] GetEnabledScenes()
{
System.Collections.Generic.List<string> scenes = new System.Collections.Generic.List<string>();
foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
{
if (scene.enabled)
{
scenes.Add(scene.path);
}
}
return scenes.ToArray();
}
}