기본 코드로 Unity Scripts를 작성하는 라이브러리 : C, C ++, Assembly.
이 프로젝트는 C#에 대한 실행 가능한 대안을 제공하는 것을 목표로합니다. C ++의 스크립팅이 모든 프로젝트의 모든 부분에 적합하지는 않지만 이제는 옵션입니다.
한 줄의 C# 코드를 변경하려면 새로운 게임 빌드를 만들어야합니다. IL2CPP가 실행되어야하기 때문에 일반적인 안드로이드 빌드 시간은 10 분 이상인 경향이 있습니다. 그런 다음 엄청난 양의 C ++를 컴파일해야합니다.
C ++를 사용하면 게임을 약 1 초에 C ++ 플러그인으로 컴파일하고 플러그인을 APK에 스왑 한 다음 즉시 게임을 설치하고 실행할 수 있습니다. 그것은 큰 생산성 향상입니다!
C ++는 C#보다 훨씬 빠르게 컴파일됩니다. 가장 일반적인 빌드 (가장 일반적인 빌드)가 C#보다 15 배 빠를 때 증분 빌드가 있습니다. 더 빠른 편집은 시간이 지남에 따라 생산성 향상에 더해집니다. 더 빠르게 반복 시간을 사용하면 프로그래밍의 "흐름"에 더 쉽게 머무를 수 있습니다.
Unity의 쓰레기 수집가는 필수이며 많은 문제가 있습니다. 느리게, 메인 실에서 실행되며, 모든 쓰레기를 한 번에 수집하고, 힙을 파편하며, 힙을 줄이지 않습니다. 따라서 게임은 "프레임 히치"를 경험하고 결국 메모리와 충돌이 부족합니다.
GC 주변을 해결하려면 상당한 노력이 필요하며 결과 코드는 유지하기가 어렵고 느려집니다. 여기에는 기본적으로 메모리 관리 매뉴얼을 만드는 객체 풀과 같은 기술이 포함됩니다. 또한 int 와 같은 권투 값 유형은 object 와 같은 관리 유형, 일부 상황에서는 foreach loops 및 기타 다양한 gotchas와 같은 관리 유형에 이르기까지 피해야합니다.
C ++에는 필요한 쓰레기 수집기가 없으며 Shared_PTR과 같은 "스마트 포인터"유형을 통한 선택적 자동 메모리 관리 기능이 있습니다. Unity의 원시 쓰레기 수집기에 대한 훌륭한 대안을 제공합니다.
일부 .NET API를 사용하면 여전히 쓰레기 생성이 포함되지만 문제는 모든 코드에 대한 널리 퍼져있는 문제가 아닌 해당 API에만 포함됩니다.
C ++를 직접 사용하면 CPU가 실행하는 코드를 완전히 제어 할 수 있습니다. C# 컴파일러, IL2CPP 및 마지막으로 C ++ 컴파일러보다 C ++ 컴파일러로 최적의 코드를 생성하는 것이 훨씬 쉽습니다. 중간 인을 잘라 내면 Compiler Intrinsics 또는 Assembly를 활용하여 Simd 및 Hardware AES 암호화와 같은 강력한 CPU 기능을 사용하여 대규모 성능 이득을 사용하여 기계 코드를 직접 작성할 수 있습니다.
C ++는 C#보다 훨씬 큰 언어이며 일부 개발자는 더 많은 도구를 사용하는 것을 선호합니다. 몇 가지 차이점은 다음과 같습니다.
IL2CPP는 C#을 이미 C ++로 변환하지만 많은 오버 헤드를 생성합니다. 생성 된 C ++를 통해 읽으면 많은 놀라움이 있습니다. 예를 들어, 정적 변수를 사용하는 모든 함수에 대한 오버 헤드가 있으며 추가 두 포인터는 모든 클래스의 시작 부분에 저장됩니다. sizeof() , 필수 널 검사 등과 같은 모든 종류의 기능에 대해서도 마찬가지입니다. 대신 C ++를 직접 작성할 수 있으며 IL2CPP 주변에서 작업 할 필요가 없습니다.
C ++는 비디오 게임 및 다른 많은 분야의 표준 언어입니다. C ++로 프로그래밍하면 기술과 코드를 비 통합 프로젝트로보다 쉽게 전송할 수 있습니다. 예를 들어, 비현실적 또는 목재 엔진에서 사용하는 것과 동일한 언어 (C ++)를 사용하여 잠금을 피할 수 있습니다.
GameObject go;
Transform transform = go.GetTransform();
Vector3 position(1.0f, 2.0f, 3.0f);
transform.SetPosition(position);
MonoBehaviour 메시지를 처리하십시오 void MyScript::Start()
{
String message("MyScript has started");
Debug::Log(message);
}
#if TARGET_OS_ANDROID )이 프로젝트의 핵심은 코드 생성기입니다. C# 및 C ++ 코드가 C ++ 게임 코드에서 C# API를 사용할 수 있도록하는 "Bindings"라는 C# 및 C ++ 코드를 생성합니다. 광범위한 언어 기능을 지원합니다.
classstructenumAction )decimalobj.x 처럼 get 및 set )obj[x] 처럼 get 및 set )add 및 remove )object int 개방out ref코드 생성기는 아직 지원하지 않습니다.
Array , string 및 object 메소드 (예 : GetHashCode )params 변수 매개 변수 (일명 "var args") 통과 코드 생성기를 구성하려면 Unity/Assets/NativeScriptTypes.json 열고 기존 예제를 확인하십시오. 이 파일에 추가하여 Unity, .NET 또는 사용자 정의 DLL에서 C# API를 C ++ 코드에 노출시킵니다.
코드 생성기를 실행하려면 NativeScript > Generate Bindings 선택하십시오.
거의 모든 프로젝트는 쓰레기 수집을 줄이고 IL2CPP 오버 헤드를 제거하고 컴파일러 내입 및 어셈블리에 액세스함으로써 순 성능이 우승 할 것입니다. C ++에서 C#으로 전화하면 사소한 성능 페널티 만 발생합니다. 드문 경우 거의 모든 코드가 .NET API 로의 호출 인 경우 순 성능 손실이 발생할 수 있습니다.
테스트 및 벤치 마크 기사
최적화 기사
C ++로 스크립팅하면 C#은 "바인딩"레이어로만 사용되므로 Unity는 C ++ 기능을 호출 할 수 있고 C ++ 기능은 Unity API를 호출 할 수 있습니다. 코드 생성기는 프로젝트의 요구에 따라 이러한 바인딩의 대부분을 생성하는 데 사용됩니다.
모든 코드와 몇 가지 바인딩은 단일 "기본"C ++ 플러그인에 존재합니다. C ++ 코드를 변경하면이 플러그인을 빌드 한 다음 편집기 또는 배포 된 빌드 (예 : Android 장치)에서 게임을 재생합니다. 코드 생성기를 실행하지 않으면 Unity를 컴파일 할 C# 코드는 없습니다.
표준 C# 워크 플로는 다음과 같습니다.
C ++를 사용하면 워크 플로가 다음과 같습니다.
Unity/Assets 디렉토리의 모든 것을 Unity Project의 Assets 디렉토리에 복사하십시오.NativeScriptTypes.json 편집하고 C ++에서 액세스하려는 Unity, .NET 및 사용자 정의 DLL API의 부분을 지정하십시오.Unity/Assets/CppSource/Game/Game.cpp 및 Unity/Assets/CppSource/Game/Game.h 편집하여 게임을 만듭니다. 일부 예제 코드가 제공되지만 자유롭게 삭제하십시오. 게임이 커짐에 따라 C ++ 소스 ( .cpp ) 및 헤더 ( .h ) 파일을 추가 할 수 있습니다./Applications/Utilities 에서 터미널 앱을 엽니 다cd /path/to/your/build/directory 실행하십시오cmake -G MyGenerator -DCMAKE_TOOLCHAIN_FILE=/path/to/your/project/CppSource/iOS.cmake /path/to/your/project/CppSource 실행하십시오. MyGenerator 선택한 생성기로 교체하십시오. 옵션을 보려면 cmake --help 실행하고 하단의 목록을보십시오. 일반적인 선택에는 명령 줄에서 빌드 할 "Unix MakeFiles"또는 Apple의 IDE를 사용하려면 "Xcode"가 포함됩니다.Unix Makefiles 생성기 또는 Open NativeScript.xcodeproj 로 선택한 경우 make 실행하고 Xcode를 선택한 경우 Product > Build 클릭하십시오. /Applications/Utilities 에서 터미널 앱을 엽니 다cd /path/to/your/build/directory 실행하십시오cmake -G "MyGenerator" -DEDITOR=TRUE /path/to/your/project/CppSource 실행하십시오. MyGenerator 선택한 생성기로 교체하십시오. 옵션을 보려면 cmake --help 실행하고 하단의 목록을보십시오. 일반적인 선택에는 명령 줄에서 빌드 할 "Unix MakeFiles"또는 Apple의 IDE를 사용하려면 "Xcode"가 포함됩니다. -DEDITOR=TRUE standalone 빌드의 경우 remove입니다.Unix Makefiles 생성기 또는 Open NativeScript.xcodeproj 로 선택한 경우 make 실행하고 Xcode를 선택한 경우 Product > Build 클릭하십시오. cd /path/to/your/build/directory 실행하십시오cmake -G "Visual Studio VERSION YEAR Win64" -DEDITOR=TRUE /path/to/your/project/CppSource 실행하십시오. 사용하려는 Visual Studio 버전으로 VERSION 과 YEAR 교체하십시오. 옵션을 보려면 cmake --help 실행하고 하단의 목록을보십시오. 예를 들어, Visual Studio 2017에는 "Visual Studio 15 2017 Win64" 사용하십시오. 커뮤니티를 포함한 모든 버전은 잘 작동합니다. -DEDITOR=TRUE standalone 빌드의 경우 remove입니다. Visual Studio 2019를 사용하는 경우 cmake -G "Visual Studio 16" -A "x64" -DEDITOR=TRUE /path/to/your/project/CppSource 실행하십시오.NativeScript.sln 열고 Build > Build Solution 클릭하십시오. cd /path/to/your/build/directory 실행하십시오cmake -G "MyGenerator" -DEDITOR=TRUE /path/to/your/project/CppSource 실행하십시오. MyGenerator 선택한 생성기로 교체하십시오. 옵션을 보려면 cmake --help 실행하고 하단의 목록을보십시오. 가장 일반적인 선택은 명령 줄에서 빌드하는 "Unix MakeFiles"이지만 IDE 옵션도 있습니다. -DEDITOR=TRUE standalone 빌드의 경우 remove입니다.Unix Makefiles 발전기로 선택한 경우 make 실행하십시오. cd /path/to/your/build/directory 실행하십시오cmake -G MyGenerator -DANDROID_NDK=/path/to/android/ndk /path/to/your/project/CppSource 실행하십시오. MyGenerator 선택한 생성기로 교체하십시오. 옵션을 보려면 cmake --help 실행하고 하단의 목록을보십시오. Android 이외의 플랫폼에 대한 빌드를 만들려면 -DANDROID_NDK=/path/to/android/ndk 부분을 생략하십시오.Unix Makefiles 발전기로 선택한 경우 make 실행하십시오. 이 프로젝트의 새 버전으로 업데이트하려면이 프로젝트의 Unity/Assets/NativeScript Assets/NativeScript Natives Script 디렉토리를 덮어 쓰고 코드 생성기를 다시 실행하십시오.
이 프로젝트의 개발을 설명하는 저자의 기사.
잭슨 던 스탄
Fork를 자유롭게하고 풀 요청을 보내거나 기능이나 버그 수정에 대한 문제를 제출하십시오.
모든 코드는 라이센스가 부여 된 MIT이므로 일반적으로 상업 및 비상업적 애플리케이션에서 쉽게 사용할 수 있습니다.
모든 작문은 CC가 4.0으로 라이센스가 부여되므로 속성이 제공되는 한 사용할 수 있습니다.