Różnica między zapleczem skryptów jedności IL2CPP i Mono2x

15

IL2CPP jest opracowanym przez Unity zapleczem skryptowym, którego można używać jako alternatywy dla Mono podczas tworzenia projektów dla niektórych platform. Uwaga - IL2CPP jest dostępny tylko podczas budowania dla następujących platform:

  • Android AppleTV, iOS *, Nintendo 3DS, Nintendo Switch, Playstation 4 Playstation Vita, WebGL *, Windows Store, Xbox One

Mam projekt (jedność 5.2), który przeszedł na wdrożenie Androida. Próbowałem zmienić kopię zapasową skryptu z Mono2xna IL2CPPi pokazuje mi to

IL2CPP na Andriodzie jest eksperymentalny i nie jest obsługiwany

Więc moje proste pytanie brzmi: jeśli nadal nie jest obsługiwane, to dlaczego uwzględniono tę opcję, jaka jest zasadnicza różnica między IL2CPP a Mono2x. Dlaczego przestawiłem się na backend skryptowy IL2CPP ? jakie są jego zalety i wady ?

Sprawdziłem również w jedności 5.5.2, że nie ma opcji IL2CPP we wdrożeniu platformy Windows.

Muhammad Faizan Khan
źródło

Odpowiedzi:

14

Informacje oparte na wersji Unity 2018.2:

Cytując instrukcję Unity na IL2CPP :

IL2CPP ( Intermediate Language To C ++ ) to opracowany przez Unity backend skryptowy, którego można używać jako alternatywy dla Mono podczas budowania projektów dla różnych platform. IL2CPP (kompilator z wyprzedzeniem (AOT)) obsługuje debugowanie kodu zarządzanego w taki sam sposób, jak backend skryptowy Mono.

Podczas budowania projektu za pomocą IL2CPP Unity konwertuje kod IL ze skryptów i zestawów do C ++, przed utworzeniem natywnego pliku binarnego (na przykład .exe, apk, .xap) dla wybranej platformy. Niektóre zastosowania IL2CPP obejmują zwiększenie wydajności, bezpieczeństwa i kompatybilności platformy projektów Unity.

Cytując samouczek Unity na IL2CPP i mono :

Każdy skryptowy backend ma zalety i wady, które powinny wpływać na twoją decyzję, który wybór jest właściwy dla twojej sytuacji:

IL2CPP:

  • Generowanie kodu jest znacznie ulepszone w porównaniu do Mono.
  • Debugowanie kodu skryptu w C ++ od góry do dołu jest możliwe.
  • Możesz włączyć usuwanie kodu silnika, aby zmniejszyć rozmiar kodu.
  • Czas budowy jest dłuższy niż w trybie Mono.
  • Obsługuje tylko kompilację Ahead of Time (AOT).

Mono:

  • Szybszy czas kompilacji niż IL2CPP.
  • Obsługuje więcej bibliotek zarządzanych dzięki kompilacji Just In Time (JIT).
  • Obsługuje wykonywanie kodu środowiska wykonawczego.
  • Należy wysłać zarządzane zestawy (pliki .dll, które produkują mono lub .net).

Ważne punkty:

  • Domyślna architektura docelowa w ustawieniach odtwarzacza Android to armv7 i x86 z IL2CPP i backendem Mono Scripting.
  • Mono nie jest obsługiwane w UWP lub iOS 11 i nowszych. Domyślna architektura w ustawieniach odtwarzacza iOS to armv7 i arm64 z zapleczem skryptowym IL2CPP.

  • Kompilacja UWP obsługuje tylko IL2CPP i .NET, backend skryptowy .NET (przestarzały) wykorzystuje platformę Microsoft .NET do obsługi skryptów.

Sanket Prabhu
źródło
1
Myślę, że w twojej odpowiedzi brakuje referencji. Widzę, że lista IL2CPP / Mono to ten sam tekst, co strona samouczka Unity IL2CPP i Mono , a pierwsze 2 akapity mają taki sam tekst jak strona podręcznika Unity IL2CPP w innej kolejności. Edytuj swoją odpowiedź, aby zawierała odniesienia, więcej informacji można znaleźć w centrum pomocy .
sonny,
3

IL2CPP jest opracowanym przez Unity zapleczem skryptowym, którego można używać jako alternatywy dla Mono podczas tworzenia projektów dla niektórych platform. Gdy zdecydujesz się zbudować projekt za pomocą IL2CPP, Unity konwertuje kod IL (czasami nazywany CIL - język pośredni lub wspólny język średniozaawansowany) ze skryptów i zespołów w kod C ++, przed utworzeniem natywnego pliku binarnego (.exe, apk, .xap, dla przykład) dla wybranej platformy. Niektóre zastosowania IL2CPP obejmują zwiększenie wydajności, bezpieczeństwa i kompatybilności platformy projektów Unity.

Źródło

IL2CPP jest podobno * platformą wykonawczą, która jest szybsza niż mono. W tym kontekście „eksperymentalny” kładzie silny nacisk na słowo „rzekomo” w poprzednim zdaniu.

Funkcje eksperymentalne zostały wydane z tego samego powodu, dla którego oprogramowanie beta zostało wydane publicznie: Oprogramowanie jest wystarczająco dobre do użycia, a programiści oczekują raportów o błędach i innych opinii od szerokiego grona użytkowników, aby mogli dotrzeć do momentu, w którym oprogramowanie jest gotowe lub faktyczne wydanie.


* IL2CPP nie działa dla kodu, który jest używany wyłącznie przez odbicie, co stanie się, gdy użyje się odbicia, serializacji lub ogólnych w klasach, które nigdy nie są wywoływane bezpośrednio, a tym samym usuwane z kompilacji. To samo ograniczenie dotyczy obecnie Mono na platformach, które używają ograniczeń kompilacji Ahead of Time.

Piotr
źródło
Więc wciąż nie jest jeszcze dojrzały, używam 5.2 brak doświadczenia w 5.5. lub 5.6. dodatkowo jakie są zalety i wady do przesunięcia w il2cpp?
Muhammad Faizan Khan
Jest dojrzały dla niektórych platform. Istnieje już od czasów Unity 5, przynajmniej dla IOS. Myślę, że nawet Android IL2CPP nie jest oznaczony jako eksperymentalny w najnowszych wersjach. Przekonałem się, że skok z Unity 4 do 5 jest wolniejszy na Androidzie, dopóki nie zacząłem używać IL2CPP. Na moich urządzeniach testujących jest zauważalnie szybszy.
Tartle Wizard
1
Ponieważ IL2CPP kompiluje się do kodu maszynowego z wyprzedzeniem, ma kilka dodatkowych ograniczeń dotyczących refleksji i używania leków generycznych . Kompilator Just-in-Time firmy Mono ma pod ręką informacje umożliwiające introspekcję i generowanie potrzebnego kodu w locie, ale w przypadku usługi AoT cały potrzebny kod musi być łatwy do wykrycia podczas kompilacji.
DMGregory