수색…


컴파일러 정의

컴파일러 정의는 플랫폼 특정 코드를 실행합니다. 그것들을 사용하면 다양한 플랫폼간에 작은 차이를 만들 수 있습니다.

  • Android 기기에서 Apple 기기 및 Google Play 업적에서 게임 센터 업적을 트리거합니다.
  • 메뉴의 아이콘을 변경하십시오 (Windows의 Windows 로고, Linux의 Linux Penguin).
  • 아마도 플랫폼에 따라 특정 플랫폼 정비사가있을 수 있습니다.
  • 그리고 훨씬 더 ...
void Update(){ 

#if UNITY_IPHONE
    //code here is only called when running on iPhone
#endif

#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
    //code here is only ran in a unity game running on windows outside of the editor
#endif

//other code that will be ran regardless of platform

}

Unity 컴파일러 정의의 전체 목록은 여기에서 찾을 수 있습니다.

플랫폼 특정 메소드를 부분 클래스로 구성

부분 클래스 는 스크립트의 핵심 로직을 플랫폼 특정 메소드와 분리하는 명확한 방법을 제공합니다.

부분 클래스와 메소드는 partial 키워드로 표시됩니다. 이것은 컴파일러에게 클래스를 "열린"상태로 남겨두고 나머지 파일을 다른 파일에서 찾는다.

// ExampleClass.cs
using UnityEngine;

public partial class ExampleClass : MonoBehaviour
{
    partial void PlatformSpecificMethod();

    void OnEnable()
    {
        PlatformSpecificMethod();
    }
}

이제 부분 메서드를 구현하는 플랫폼 별 스크립트 용 파일을 만들 수 있습니다. 부분 메소드는 매개 변수 ( ref 도 가능)를 가질 수 있지만 void 를 리턴해야합니다.

// ExampleClass.Iphone.cs

#if UNITY_IPHONE
using UnityEngine;

public partial class ExampleClass
{
    partial void PlatformSpecificMethod()
    {
        Debug.Log("I am an iPhone");
    }
}
#endif
// ExampleClass.Android.cs

#if UNITY_ANDROID
using UnityEngine;

public partial class ExampleClass
{
    partial void PlatformSpecificMethod()
    {
        Debug.Log("I am an Android");
    }
}
#endif

부분적인 메소드가 구현되지 않으면 컴파일러는 호출을 생략합니다.

팁 :이 패턴은 편집기 전용 메소드를 작성할 때도 유용합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow