Pytanie Używanie kodu .NET 4.5 w Unity 5


Pracuję nad grą przy użyciu Unity3D w wersji 5. Gra powinna używać ścisłych reguł biznesowych już zaprogramowanych w silniku C # .NET4.5. Korzystając z Xamarin / Mono, mamy nadzieję, że będzie to możliwe w Windows, Androidzie, innych ...

Próbowałem zbudować silnik w dll i używać go jako zarządzanego wtyczki w Unity. Ale Unity używa starej wersji Mono, aby skompilować całą grę i nie chce używać bibliotek .NET 4.5.

Naprawdę potrzebuję użyć tego kodu, zajrzałem do obniżenia go do .NET 3.5, ale nie jest to dopuszczalne rozwiązanie, biorąc pod uwagę pracę już wykonaną na silniku.

Jeśli chodzi o Androida, to myślę, że wykorzystam Xamarin, by uzyskać natywny kod Androida i użyć go jako rodzimej wtyczki w Unity. Teraz potrzebuję rozwiązania dla systemu Windows. Szukam sposobów, aby użyć kodu C # w C ++, aby utworzyć niezarządzanego dll, ale ja walczę o zrozumienie, który sposób ma zastosowanie tutaj między współdziałaniem COM, C ++ / CLI lub innymi metodami.

Czy ktoś zna sposób dołączania kodu z .NET 4.5 w Unity bez wysiłku?


18
2018-03-16 14:32


pochodzenie


będziesz musiał uczynić swoją klasę lib biblioteką klasy PCL - Ewan
@Ewan: Wydaje mi się, że Unity nie akceptuje PCL dla niczego innego niż aplikacje Windows8 / 8.1. Co więcej, PCL jest obsługiwany tylko z .NET 4.0+ - Warrows
czy mylisz to z nowym rdzeniem .net dla wygranej 8? Ive zrobione rzeczy PCL dla mono na iphone xamarin musisz mieć mono ramy zainstalowany inorder, aby móc na niego kierować - Ewan
nie będziesz mógł korzystać z funkcji .net 4.5, ale jeśli jest to tylko podstawowa logika, nie powinieneś tego robić - Ewan
Kiedy tworzę projekt PCL w Visual studio, mogę wybrać Xamarin.Android jako cel, między innymi, ale jeśli chcę, żeby działał na Windows, będę potrzebował .NET target, który nie jest proponowany w wersji 4.0. Ponadto, PCL ogranicza dostępne komponenty i używam takich rzeczy jak XmlDocument lub Tasks. Właśnie dlatego potrzebuję .NET 4.5 i nie mogę po prostu skompilować wersji 3.5. - Warrows


Odpowiedzi:


Wygląda na to, że Unity aktualizuje się do wersji 4.6+ i jest już dostępna w wersji beta

https://forum.unity3d.com/threads/upgraded-mono-net-in-editor-on-5-5-0b4.433541/


10
2017-09-27 21:56



Obecny status na czerwiec 2017 r .: forum.unity3d.com/threads/... - Arto Bendiken


Korzystanie z wtyczki visual studio: eksport niezarządzany, Byłem w stanie wyeksportować C # .NET 4.5 do niezarządzanego / natywnego pliku dll, który mogę użyć w Unity Engine. Zmusza to do wywoływania tylko prostych funkcji, ale przy niewielkiej pracy było możliwe, że zawinąłem rdzeń mojego silnika.


8
2018-04-03 13:22



używasz dynamic, Async / Await itp. w twoim silniku? jeśli tak, podaj kilka wskazówek, jak je zawijać - jungle_mole
Miesiąc temu w profesjonalnym projekcie nie mam już dostępu do kodu. Ale jeśli dobrze pamiętam, miałem Async / Await w kodzie, ale nie musiałem ich wywoływać przez opakowanie, więc było to całkiem proste. - Warrows
tak długo, jak, powiedzmy, sprawdzanie w pętli aktualizacji jakiejś kolekcji dla poleceń przychodzących (przypuszczam, że kolekcja musi być zablokowana) i produkować podnieść kilka wiadomości z subskrybentami "na drugim końcu", wszystko w porządku? jakie platformy aplikacja miała być uruchamiana (lub była uruchamiana)? - jungle_mole
Przykro mi, nie pamiętam dokładnie, co zrobiliśmy lub nie udało nam się zrobić. Ale w końcu musieliśmy przejść do .NET 3.5 z różnych powodów, a ten problem z kompatybilnością był jednym z nich. - Warrows


Krótka odpowiedź brzmi: nie.

Unity ma "funkcjonalność ery .NET 2.0 / 3.5", zgodnie z oficjalny post na blogu.

Zgodnie z tym samym stanowiskiem, przyszłą wersję Unity zostanie uaktualniona do "nowoczesnej wersji .NET", bez podanego harmonogramu dla tego dużego przedsięwzięcia.

UWAGA: Ta odpowiedź została napisana w odpowiedzi na pierwotną wersję pytania, która polegała po prostu na tym, czy biblioteka .NET 4.5 mogła zostać użyta bezpośrednio w Unity.


6
2018-03-16 15:12



Mówisz krótka odpowiedź brzmi "nie". Ale jaka jest długa historia? Naprawdę potrzebuję użyć tego kodu, zajrzałem do obniżenia go do .NET 3.5, ale nie jest to dopuszczalne rozwiązanie, biorąc pod uwagę pracę już wykonaną na silniku. Jeśli chodzi o Androida, to myślę, że wykorzystam Xamarin, by uzyskać natywny kod Androida i użyć go jako rodzimej wtyczki w Unity. Teraz potrzebuję rozwiązania dla systemu Windows. Szukam sposobów, aby użyć kodu C # w C ++, aby utworzyć niezarządzanego dll, ale ja walczę o zrozumienie, który sposób ma zastosowanie tutaj między współdziałaniem COM, C ++ / CLI lub innymi metodami. - Warrows
Nawet jeśli mógłbyś przejść na wersję 3.5, nie ma gwarancji, że to zadziała, ponieważ Unity nie ma pełnego wsparcia 3.5. Unity obsługuje macierzyste wywołania systemu Windows, ale jak przekonwertować bibliotekę do macierzystego systemu Windows, obawiam się, że nie wiem. Powodzenia! - Ghopper21
Dzięki, edytuję pytanie, aby było bardziej precyzyjne. - Warrows
@Warrows - przyjacielska wskazówka dotycząca przepełnienia stosu. Najlepiej uważać na edytowanie pytań w ten sposób, w którym zasadniczo zmieniasz pytanie, ponieważ może to spowodować, że istniejące odpowiedzi (takie jak moje, które wcześniej zaakceptowałeś) są niekompletne lub nawet błędne. Oznacza to, że inni użytkownicy mogą uważać, że moja odpowiedź jest zła i mogą ją anulować. - Ghopper21
@Warrows - również, myślę, że w tym przypadku może być bardziej prawdopodobne, że otrzymasz konkretną pomoc, jeśli zadasz oddzielne, bardziej szczegółowe pytanie o konwersję biblioteki C # do natywnego kodu Windows. Problem z pytaniem o "mały / żaden wysiłek" jest taki, że jest on niejasny, a niektórzy użytkownicy mogą nawet głosować, aby zamknąć pytanie jako "zbyt szerokie". - Ghopper21