Skip to content

Instantly share code, notes, and snippets.

@paulhayes
Created July 24, 2017 12:22
Show Gist options
  • Select an option

  • Save paulhayes/4b8c0494626fa770f48e2e38bc0cb62c to your computer and use it in GitHub Desktop.

Select an option

Save paulhayes/4b8c0494626fa770f48e2e38bc0cb62c to your computer and use it in GitHub Desktop.
Adds Server build options to menu
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.IO;
using System.Security.AccessControl;
using System.Collections.Generic;
public class BuildMenu {
[MenuItem("File/Build Linux Headerless")]
static void BuildLinuxServer() {
AddScriptingSymbol("SERVER");
string appPath = Path.GetFullPath(Path.Combine("Server", Application.productName));
BuildPipeline.BuildPlayer( EditorBuildSettings.scenes, appPath, BuildTarget.StandaloneLinux64, BuildOptions.EnableHeadlessMode );
string metaPath = Path.Combine("Server", "application.json");
File.WriteAllText(metaPath, JsonUtility.ToJson(new AppData(),true));
RemoveScriptingSymbol("SERVER");
}
[MenuItem("File/Upload Linux Build")]
static void Upload() {
/*
* Send command to spawn node upload
*/
}
[MenuItem("File/Build Windows Server")]
static void BuildWindowsServer() {
AddScriptingSymbol("SERVER");
PlayerSettings.runInBackground = true;
string fileName = string.Format("{0}.exe",Application.productName);
string appPath = Path.GetFullPath(Path.Combine("Server", fileName));
BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, appPath, BuildTarget.StandaloneWindows64, BuildOptions.AutoRunPlayer | BuildOptions.Development );
//string metaPath = Path.Combine("Server", "application.json");
//File.WriteAllText(metaPath, JsonUtility.ToJson(new AppData(), true));
RemoveScriptingSymbol("SERVER");
}
static void AddScriptingSymbol(string symbol) {
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
var defineArray = new List<string>(defines.Split(';'));
defineArray.Add(symbol);
defines = string.Join(";", defineArray.ToArray());
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, defines);
}
static void RemoveScriptingSymbol(string symbol) {
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
var defineArray = new List<string>( defines.Split(';') );
defineArray.RemoveAll((s)=>symbol==s);
defines = string.Join(";", defineArray.ToArray());
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, defines);
}
}
[System.Serializable]
public class AppData {
public string productName;
public string companyName;
public string version;
public string unityVersion;
public AppData() {
productName = Application.productName;
companyName = Application.companyName;
version = Application.version;
unityVersion = Application.unityVersion;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment