Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 다양한 플랫폼에서 동일한 스크립팅 API를 제공하지만, 각 플랫폼마다 고유한 제약이 존재할 수 있습니다. 아래에서는 이러한 제약들을 정리하고, 스크립팅을 사용하는 방법에 대한 설명과 예제를 제공합니다.

플랫폼별 스크립팅 제약

아래 표는 각 플랫폼과 스크립팅 백엔드에 따라 AOT(Ahead-of-time compile) 지원 여부와 스레드 지원 여부를 정리한 것입니다.

플랫폼 AOT 컴파일 지원 스레드 지원
Android (IL2CPP) 지원 지원
Android (Mono) 지원 안 함 지원
iOS (IL2CPP) 지원 지원
Standalone (IL2CPP) 지원 지원
Standalone (Mono) 지원 안 함 지원
유니버설 Windows 플랫폼 (IL2CPP) 지원 지원
WebGL (IL2CPP) 지원 지원 안 함

AOT 컴파일

모든 플랫폼이 런타임 코드 생성을 지원하지 않기 때문에, JIT(just-in-time) 컴파일을 사용하는 관리되는 코드는 AOT(Ahead-of-time) 방식으로 컴파일되어야 합니다. AOT 방식은 런타임 성능에 영향을 줄 수 있습니다.

반사(Reflection)

반사는 AOT 플랫폼에서 지원되지만, 코드가 런타임에 존재하지 않을 수 있습니다. 이는 AOT 컴파일러가 반사를 통해 필요한 코드를 인식하지 못할 경우 발생합니다.

직렬화(Serialization)

AOT 플랫폼에서는 반사를 통해 직렬화 및 역직렬화를 수행할 때 문제가 발생할 수 있습니다. 필요한 타입이나 메서드가 인식되지 않으면 직렬화가 실패할 수 있습니다.

제네릭(Generics)

제네릭 타입 및 메서드는 AOT 스크립팅에 영향을 미칠 수 있습니다. 예를 들어, 다음과 같은 경우에 AOT가 제대로 작동하지 않을 수 있습니다.

  • 런타임에 새 제네릭 인스턴스를 생성하는 경우
  • 정적 메서드를 호출하는 경우

이러한 경우를 해결하기 위해서는 특정 제약을 추가하고, IL2CPP가 필요한 코드를 생성할 수 있도록 도와주는 방법이 있습니다.

코드 예제

아래 예제는 IL2CPP에서 제네릭 타입을 사용하기 위해 특별화된 메서드를 정의하는 방법을 보여줍니다.

public void UsedOnlyForAOTCodeGeneration()
{
    // Ensure that IL2CPP will create code for MyGenericStruct
    // using MyStruct as an argument.
    new GenericType<MyStruct>();

    // Ensure that IL2CPP will create code for SomeType.GenericMethod
    // using MyStruct as an argument.
    new SomeType().GenericMethod<MyStruct>();

    public void OnMessage<T>(T value) 
    {
        Debug.LogFormat("Message value:{0}", value);
    }

    throw new InvalidOperationException(
        "This method is used for AOT code generation only." +
        "Do not call it at runtime.");
}

네이티브 코드에서의 관리 메서드 호출

AOT 플랫폼에서는 네이티브 코드가 호출할 수 있도록 관리되는 메서드를 마셜링해야 합니다. 관리 메서드는 정적이며, 적절한 특성을 사용해야 합니다.

예제

아래는 여러 개의 MonoPInvokeCallback 특성을 가진 메서드를 정의하는 방법을 보여줍니다.

[MonoPInvokeCallback(typeof(Action<long>))]
[MonoPInvokeCallback(typeof(Action<int>))]
private static string NameOfT<T>(T item) 
{
    return typeof(T).Name;
}

결론

Unity의 스크립팅 API는 다양한 플랫폼에 맞추어 여러 가지 제약이 있습니다. 이러한 제약을 이해하고 적절한 방법으로 코드를 작성하면 더 나은 성능과 안정성을 확보할 수 있습니다. 위의 기술들을 활용하여 다양한 플랫폼에서의 게임 개발을 더욱 수월하게 해보세요!

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA