본문 바로가기
유니티 & C#

유니티 - Define Symbol 코드로 제어하기

by 17번 일개미 2023. 10. 24.
728x90

PlayerSettings 클래스에는

Define Symbol 을 제어할 수 있는 함수가 있다.

이것들을 제어하여 원하는 Symbol 만 빌드에 추가하여 빌드 자동화에 도움을 줄 수 있다.

 

PlayerSettings.SetScriptingDefineSymbolsForGroup(currentBuildTarget, defines);

currentBuildTarget 은 BuildTargetGroup Type 인데

이것을 가져오는 방법은 아래에 있다.

https://wildgoosechase.tistory.com/92

 

유니티 - 현재 BuildTargetGroup, BuildTarget 을 가져오는 방법

먼저, BuildTarget 을 가져온다. EditorUserBuildSettings.activeBuildTarget 가져온 BuildTarget 을 BuildPipeline.GetBuildTargetGroup() 의 인자로 넣어준다. BuildTargetGroup currentBuildTarget = BuildPipeline.GetBuildTargetGroup(EditorUserBuil

wildgoosechase.tistory.com

 

참고로, GetScriptingDefineSymbolsForGroup() 를 통해 현재 Define Symbol 들을 가져올 수도 있다.

주의할 점은 반환형이 string[] 이 아닌 string 이다.

이 string 안에 ';' 세미콜론을 구분자로 한 문장에 Symbol 들이 나열되어 있다.

Symbol 삭제 등이 필요할 시, ';' 을 기준으로 Split 을 잘 해보거나,
삭제를 원하는 Symbol string 의 IndexOf() 함수를 통해 얻은 Index 로 string 삭제가 가능하다.
이 때, 세미콜론도 함께 삭제해주어야 한다.

 

 

if (addSymbol == true)
{
	string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentBuildTarget);
	int index = defines.IndexOf(symbol);
	// 존재하지 않는 심볼이라면 추가
	if (index < 0)
	{
		defines = $"{defines}{symbol};";
		Debug.Log($"New Defines : {defines}");
		PlayerSettings.SetScriptingDefineSymbolsForGroup(currentBuildTarget, defines);
	}
}
else
{
	string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentBuildTarget);
	int index = defines.IndexOf(symbol);
	// 존재하는 심볼이라면 삭제
	if (index >= 0)
	{
		defines = defines.Remove(index, symbol.Length);
		Debug.Log($"New Defines : {defines}");
		PlayerSettings.SetScriptingDefineSymbolsForGroup(currentBuildTarget, defines);
	}
}

이런 식으로 추가/삭제를 할 수 있다.

테스트로 간단하게 작성한 코드라 삭제 시 세미콜론 체크에 문제가 있을 수 있다.
코드가 필요한 분은 알아서 수정해서 사용하시길!

728x90