사전캠프/Unity

유니티 기능 - #region, #if

서보훈 2024. 8. 26. 16:48

5주차 강의, 광고 추가에서 사용되는 코드를 보면 #if 를 사용하는것을 볼 수 있습니다.

 

 void Awake()
 {
     // Get the Ad Unit ID for the current platform:
 #if UNITY_IOS
     _adUnitId = _iOSAdUnitId;
 #elif UNITY_ANDROID || UNITY_EDITOR
     _adUnitId = _androidAdUnitId;
 #endif

     // Disable the button until the ad is ready to show:
 }

이는 무슨 역할을 하는지 정리해보겠습니다.

 


#region

#region singleton
public static GameManager Instance;

private void Awake()
{
    if(Instance == null)
    {
        Instance = this;
    }
}
#endregion

과도하게 긴 코드를 가릴때 사용하는 기능입니다.

 

Visual Studio 에서는 기본적으로 함수, 클래스 단위로 코드블록을 만들어줘서 해당 부분을 최소화 하는것을 지원합니다.

#region의 경우, 사용자가 지정한 만큼의 코드블록을 만들어주는 기능으로, 과도하게 과도하게 긴 코드에 적용하여 보이는 코드의 길이를 줄일 수 있습니다.

#region <블록이름> 형태로 만들며 끝에 #endregion 을 선언하여 코드블록이 끝났음을 선언해주어야합니다.

 

개인적으로는 싱글톤 패턴과 같은 만들어준 이후 추가적인 수정이 거의 필요 없는 코드에 적용하는편 입니다.

 


#if

전처리에서 사용되는 조건문입니다.

해당 조건문의 경우, 빌드 단계에서 처리되며 해당 조건에 따라 지정된 코드를 포함해서 빌드할지, 제외할지를 결정합니다.

 

광고에 사용되는 RewardedButton.cs를 보겠습니다.

 void Awake()
 {
     // Get the Ad Unit ID for the current platform:
 #if UNITY_IOS
     _adUnitId = _iOSAdUnitId;
 #elif UNITY_ANDROID || UNITY_EDITOR
     _adUnitId = _androidAdUnitId;
 #endif

     // Disable the button until the ad is ready to show:
 }

해당 스크립트에는 #if UNITY_IOS 와 #elif UNITY_ANDROID || UNITY_EDITOR, #endif 로 이루어져있습니다.

#endif의 경우 #endragion 과 같이 #if 문이 끝났음을 선언하고, #if 와 #elif 는 해당 조건이 충족되면 이 부분을 사용하고, 조건에 맞지 않으면 사용되지 않습니다.

 

해당 코드의 경우, 실행시 IOS 운영체제일경우 _adUnitId 변수가 _iosAdUnitId 변수로 초기화되고 안드로이드 운영체제이거나 유니티 에디터일경우 _androidAdUnitId 로 초기화 되도록 설정되어 있습니다.

 

해당 UNITY_IOS 와 UNITY_ANDROID 의경우 유니티 에디터에 자체적으로 등록되어있는 조건부로 다음 링크에서 확인할 수 있습니다.

https://docs.unity3d.com/kr/2021.3/Manual/PlatformDependentCompilation.html

 

조건부 컴파일 - Unity 매뉴얼

Unity의 C# 언어 지원에는 지시문의 사용이 포함되어 있어서 특정 스크립팅 심볼이 정의됨 또는 정의되지 않음에 따라 컴파일에서 코드를 선택적으로 포함하거나 제외할 수 있습니다.

docs.unity3d.com

 

만약, 이러한 조건부 컴파일을 만들어서 사용할 경우

Project Setting - Player - Other Setting 의 Script Compilation 에 조건의 이름을 추가하여 사용할 수 있습니다.

단, 해당 이름이 Script Compilation 에 있으면 true, 없으면 false로 작동하기 때문에 실제 빌드 전에 해당 부분을 확인해서 빌드시 코드가 추가되지 않도록 해줄 필요가 있습니다