Scripting Define Symbol?
-
스크립트에서
#define
으로 정의하듯, 프로젝트 전체에서 정의하여 사용할 수 있는 심볼 -
Project Settings
-Player
-Other Settings
-Scripting Define Symbols
-
빌드 타겟마다 달라진다.
-
유니티 에디터 스크립팅을 통해 확인, 추가, 제거할 수 있다.
Source Code
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
using System.Text.RegularExpressions;
using UnityEditor;
public static class DefineSymbolManager
{
public struct DefineSymbolData
{
public BuildTargetGroup buildTargetGroup; // 현재 빌드 타겟 그룹
public string fullSymbolString; // 현재 빌드 타겟 그룹에서 정의된 심볼 문자열 전체
public Regex symbolRegex;
public DefineSymbolData(string symbol)
{
buildTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
fullSymbolString = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargetGroup);
symbolRegex = new Regex(@"\b" + symbol + @"\b(;|$)");
}
}
/// <summary> 심볼이 이미 정의되어 있는지 검사 </summary>
public static bool IsSymbolAlreadyDefined(string symbol)
{
DefineSymbolData dsd = new DefineSymbolData(symbol);
return dsd.symbolRegex.IsMatch(dsd.fullSymbolString);
}
/// <summary> 심볼이 이미 정의되어 있는지 검사 </summary>
public static bool IsSymbolAlreadyDefined(string symbol, out DefineSymbolData dsd)
{
dsd = new DefineSymbolData(symbol);
return dsd.symbolRegex.IsMatch(dsd.fullSymbolString);
}
/// <summary> 특정 디파인 심볼 추가 </summary>
public static void AddDefineSymbol(string symbol)
{
// 기존에 존재하지 않으면 끝에 추가
if (!IsSymbolAlreadyDefined(symbol, out var dsd))
{
PlayerSettings.SetScriptingDefineSymbolsForGroup(dsd.buildTargetGroup, $"{dsd.fullSymbolString};{symbol}");
}
}
/// <summary> 특정 디파인 심볼 제거 </summary>
public static void RemoveDefineSymbol(string symbol)
{
// 기존에 존재하면 제거
if (IsSymbolAlreadyDefined(symbol, out var dsd))
{
string strResult = dsd.symbolRegex.Replace(dsd.fullSymbolString, "");
PlayerSettings.SetScriptingDefineSymbolsForGroup(dsd.buildTargetGroup, strResult);
}
}
}