[C#] 일부 방법을 사용하여 디버그 코드 추가(부록)

4931 단어 Unity3D
프로젝트 생성 시 Debug 코드를 차단하는 스크립트:
using System;
using System.IO;
using UnityEditor;
using UnityEngine;

public class BuildPlayer : ScriptableObject
{
	static string rootPath = Application.dataPath + Path.DirectorySeparatorChar;
	static string rootParent = new DirectoryInfo(rootPath).Parent.FullName + Path.DirectorySeparatorChar;
	static string projectName = new DirectoryInfo(rootPath).Parent.Name;
	static string scenePath = Application.dataPath + Path.DirectorySeparatorChar + "Scenes" + Path.DirectorySeparatorChar;
	static string apkNameDebug = rootParent + projectName + "_Debug_[Date].apk";
	static string apkNameRelease = rootParent + projectName + "_Release_[Date].apk";

	[MenuItem("Build Player/Build Android Debug", false, 101)]
	static void BuildAndroidDebug()
	{
		AssetDatabase.Refresh();
		// set build options and build player
		BuildOptions options = BuildOptions.Development | BuildOptions.AllowDebugging | BuildOptions.ShowBuiltPlayer;
		string[] allScenes = GetAllScenes();
		BuildPipeline.BuildPlayer(allScenes, InsertDateString(apkNameDebug), BuildTarget.Android, options);
	}

	[MenuItem("Build Player/Build Android Debug(Auto Deploy)", false, 102)]
	static void BuildAndroidDebugAutoDeploy()
	{
		AssetDatabase.Refresh();
		// set build options and build player
		BuildOptions options = BuildOptions.Development | BuildOptions.AutoRunPlayer | BuildOptions.AllowDebugging;
		string[] allScenes = GetAllScenes();
		BuildPipeline.BuildPlayer(allScenes, InsertDateString(apkNameDebug), BuildTarget.Android, options);
	}

	[MenuItem("Build Player/Build Android Debug(Auto Deploy And Connect Profiler)", false, 103)]
	static void BuildAndroidDebugAutoDeployAndConnectProfiler()
	{
		AssetDatabase.Refresh();
		// set build options and build player
		BuildOptions options = BuildOptions.Development | BuildOptions.AutoRunPlayer | BuildOptions.ConnectWithProfiler | BuildOptions.AllowDebugging;
		string[] allScenes = GetAllScenes();
		BuildPipeline.BuildPlayer(allScenes, InsertDateString(apkNameDebug), BuildTarget.Android, options);
	}

	[MenuItem("Build Player/Build Android Release", false, 201)]
	static void BuildAndroidRelease()
	{
		// rename all debug scripts to *.rem
		RenameDebugScripts();
		// set build options and build player
		BuildOptions options = BuildOptions.ShowBuiltPlayer;
		string[] allScenes = GetAllScenes();
		BuildPipeline.BuildPlayer(allScenes, InsertDateString(apkNameRelease), BuildTarget.Android, options);
		// restore all debug scripts' file names
		RestoreDebugScripts();
	}

	[MenuItem("Build Player/Build Android Release(Auto Deploy)", false, 202)]
	static void BuildAndroidReleaseAutoDeploy()
	{
		// rename all debug scripts to *.rem
		RenameDebugScripts();
		// set build options and build player
		BuildOptions options = BuildOptions.AutoRunPlayer;
		string[] allScenes = GetAllScenes();
		BuildPipeline.BuildPlayer(allScenes, InsertDateString(apkNameRelease), BuildTarget.Android, options);
		// restore all debug scripts' file names
		RestoreDebugScripts();
	}

	static void RenameDebugScripts()
	{
		string[] allDebugDirectories = Directory.GetDirectories(rootPath, "_Debug", SearchOption.AllDirectories);
		foreach (string directory in allDebugDirectories)
		{
			string[] scripts = Directory.GetFiles(directory, "*.cs", SearchOption.AllDirectories);
			foreach (string script in scripts)
			{
				string newScriptName = script + ".rem";
				File.Move(script, newScriptName);
				File.Delete(script + ".meta");
			}
		}
		AssetDatabase.Refresh();
	}

	static void RestoreDebugScripts()
	{
		string[] allDebugDirectories = Directory.GetDirectories(rootPath, "_Debug", SearchOption.AllDirectories);
		foreach (string directory in allDebugDirectories)
		{
			string[] renamedScripts = Directory.GetFiles(directory, "*.rem", SearchOption.AllDirectories);
			foreach (string renamedScript in renamedScripts)
			{
				string scriptName = renamedScript.Substring(0, renamedScript.Length - 3);
				File.Move(renamedScript, scriptName);
				File.Delete(renamedScript + ".meta");
			}
		}
		AssetDatabase.Refresh();
	}

	static string[] GetAllScenes()
	{
		string[] allScenes = null;
		DirectoryInfo dirInfo = new DirectoryInfo(scenePath);
		FileInfo[] fileInfos = dirInfo.GetFiles("*.unity", SearchOption.AllDirectories);
		allScenes = new string[fileInfos.Length];
		int index = 0;
		foreach (FileInfo fileInfo in fileInfos)
		{
			string scene = fileInfo.FullName.Replace(rootParent, "");
			allScenes[index++] = scene;
		}
		return allScenes;
	}

	static string InsertDateString(string apkName)
	{
		DateTime now = DateTime.Now;
		return apkName.Replace("[Date]", string.Format("[{0:d4}{1:d2}{2:d2}][{3:d2}{4:d2}{5:d2}]", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second));
	}
}

좋은 웹페이지 즐겨찾기