Posts 유니티 - Scripting Define Symbol 스크립트로 제어하기
Post
Cancel

유니티 - Scripting Define Symbol 스크립트로 제어하기

Scripting Define Symbol?


image

  • 스크립트에서 #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);
        }
    }
}
This post is licensed under CC BY 4.0 by the author.