2012-02-26 14 views
5

Zaczynam z gier dev użyciu Unity3D i widzę tam 3 obsługiwanych języków do tworzenia skryptów: C#, unityscript i Boo ...Jaki jest najlepszy język skryptowy dla Unity3D

chociaż, pochodzących z WEB- projektować przeszłość Jestem oczywiście używany w javascript, ale po kilku próbach mogłem zauważyć, że Unity3d tak naprawdę nie ma pełnego wsparcia dla języka skryptowego i niektórych elementów, takich jak new Date().valueOf() i kilka innych wypowiedzi w ramach metod takich jak atrybut arguments i wiele innych nie będzie działa poprawnie, wydaje mi się również, że mój plik nie może mieć metody opakowującej, która obejmuje wszystkie inne metody, takie jak:

(function (scope) { 
    function Start() { 
     ... 
    } 
    ... 
}(this)); 

i przy użyciu coś podobnego new Date().valueOf() który jest ważny w JS uzyskać:

MissingMethodException: Method not found: 'System.DateTime.valueOf'. Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher()

Więc może kompilator zamienia że wstępna 'unityscript' kod w języku Boo? więc być może Boo jest właściwym wyborem "natywnym", a może sam skrypt sam w sobie nie jest najlepszym rozwiązaniem podczas tworzenia aplikacji unity3d?

Myślałem o języku, który ma pełne wsparcie dla wszystkich znanych klas rodzimych i metod, które będą działać bez problemu?

Przepraszamy za wszelkie błędy wymienione powyżej i daj nam znać, co myślisz.

Odpowiedz

6

Unity nie używa "prawdziwej" Javascript jako takiej. Zobacz:

http://forum.unity3d.com/threads/1117-Javascript-Version

UnityScript jest oparta o JavaScript 2.0. Istnieje kilka rzeczy, których brakuje (instrukcje switch itp.), Ale uzyskują połowę szybkości C++, która jest o wiele szybsza niż Mozilla.

Kiedy już się przyzwyczaicie, rozwijanie w "JS" dla jedności jest bardzo szybkie i elastyczne ... ale oczywiście, jeśli zamierzasz rozwijać natywne komponenty lub interfejs do czegokolwiek w C, to " Będę musiał użyć C# (w końcu C# nie jest trudne do nauczenia się).

1

JS jest najpopularniejszym językiem używanym w Unity. Ale język jest zaimplementowany w Mono, więc wszelkie ograniczenia w tej implementacji będą również wpływać na skrypty Unity.

Nie wiem, jak działa implementacja JS Mono, ale sądząc po komunikacie o błędzie, używa on typów danych początkowo zdefiniowanych dla Boo. Jednak nie oznacza to, że JS jest "zamieniony w Boo". Oba są kompilowane do tego samego kodu bajtowego, który jest JIT i uruchamiany przez środowisko wykonawcze Mono. Zatem żaden język nie jest bardziej "rodzimy" niż inny.

2

Powinieneś użyć C#. Jest popularny, dojrzały, pochodzi z .NET. C# to, co używają duże zespoły. Nauka C# przyda się w przyszłości. JS w Unity3D nie jest prawdziwym JS, jak już wspomniano i nikt nie słyszał o Boo.

+0

to zdecydowanie coś do rozważenia, Valentin, dzięki. Miałem już okazję nauczyć się trochę C# podczas tworzenia witryny przy użyciu .NET MVC Framework raz. Pomysł radzenia sobie z Javascriptem, który "nie jest tak naprawdę Javascriptem", nie podnieca mnie zbytnio. Ponadto, nie mogłem się więcej zgodzić na temat Boo, nigdy o nim nie słyszałem;) – zanona

+0

Uwielbiam boo, choć jestem pewien, że zaimplementowali go tylko dlatego, że zajęło to kilka sekund, a nie dlatego, że ludzie chcieliby z niego korzystać. –

0

Zalety i wady kasowania przy użyciu skryptu C# i Java z here. C# jest trochę szybszy niż JavaScript i masz dodatkowe funkcje zapewniane przez C#. Możesz uzyskać opinię ludzi od here.

Rozwijanie za pomocą C# ma zaletę Visual Studio 2010.Zapewnia lepszą funkcję uzupełniania kodu niż Mono.

W języku JavaScript zmienne mogą mieć nieokreślony typ. Dzieje się tak tylko wtedy, gdy nie przypisujesz wartości podczas deklarowania zmiennej.

Wydajność jest wolniejsza w przypadku zmiennych dynamicznych i można napotkać problemy z rzutowaniem. Jeśli jest to problem, użyj #pragma strict.

7

Jeśli chcesz zostać deweloperem w Unity i zbudować na nim karierę, naucz się języka C# i używaj go - nie marnuj czasu na UnityScript. Możesz użyć C# poza Unity do programowania. Jeśli twoją główną karierą jest już tworzenie stron internetowych (lub będzie), kontynuuj używanie javascript, ponieważ ostatecznie C# i UnityScript mają tę samą funkcjonalność, ale C# jest znacznie szerzej używane do programowania gier i aplikacji.

Większość aktywów w sklepie, z których korzystałem, to C# lub oferują zarówno JS, jak i C#. Mieszanie między językami powoduje poważne problemy z zależnościami, ponieważ aby użyć klasy w dowolnym języku, musi ona zostać przetworzona przez kolejność ładowania Unity. Aby użyć klasy zdefiniowanej w JavaScript w języku C#, ten plik skryptu musiał zostać przetworzony przed plikiem skryptowym C#. Jeśli klasa javscript potrzebuje później czegoś z klasy C#, będziesz musiał znaleźć sposoby obejścia tego, ponieważ nie jest to już możliwe z pliku javascript. Jedność ma sposoby definiowania kolejności skryptów.

Myślałem, że ostrzeżę cię o mieszaniu C# z UnityScript, ponieważ jeśli nie skupisz się na jednym lub drugim, wpadniesz na ten problem. Ostatecznie C# jest pośrednim miejscem między niejednoznacznymi językami, takimi jak VB i JavaScript, a językami pedantycznymi, takimi jak C++ (mam tło C/C++ około 10 lat).

Twój tytuł "Co to jest najlepszy xxx" prowadzi do odpowiedzi, ale próbuję dać najlepszą możliwą radę bez bycia subiektywnym. C# pozwoli ci kontynuować, nawet jeśli Jedność zniknie za rok. UnityScript/JavaScript pozwoliłoby ci na przejście do bycia programistą internetowym. Programista C# może łatwo przejść do UnityScript/JavaScript, ale odwrócenie jest znacznie trudniejsze (nie niemożliwe, po prostu trudniejsze).