2012-02-26 72 views
5
là gì

Tôi bắt đầu với trò chơi dev bằng Unity3d và tôi có thể thấy có 3 ngôn ngữ được hỗ trợ cho việc tạo ra các kịch bản: C#, unityscript và Boo ...ngôn ngữ kịch bản tốt nhất cho Unity3D

mặc dù, đến từ một web- thiết kế quá khứ Tôi rõ ràng được sử dụng với javascript, nhưng sau vài lần tôi có thể nhận thấy Unity3d không thực sự có hỗ trợ đầy đủ cho ngôn ngữ kịch bản và một số yếu tố như new Date().valueOf() và một số báo cáo khác trong các phương pháp như thuộc tính arguments và nhiều hoạt động đúng cách, có vẻ như tệp của tôi không thể có phương thức bao bọc mà bao gồm tất cả các phương pháp khác như:

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

và khi sử dụng một cái gì đó giống như new Date().valueOf() đó là hợp lệ trong JS tôi nhận được:

MissingMethodException: Phương pháp không tìm thấy: 'System.DateTime.valueOf'. Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher()

Vì vậy, trình biên dịch có thể biến mã 'unityscript' ban đầu thành ngôn ngữ Boo? vì vậy có lẽ Boo là sự lựa chọn 'bản địa' đúng và có thể bản thân unityscript không phải là cách tốt nhất để đi khi phát triển các ứng dụng unity3d?

Tôi đã suy nghĩ về một ngôn ngữ có hỗ trợ đầy đủ cho tất cả các lớp và phương thức gốc đã biết sẽ hoạt động mà không có vấn đề gì?

Xin lỗi vì bất kỳ lỗi nào được đề cập ở trên và vui lòng cho tôi biết suy nghĩ của bạn.

Trả lời

6

Unity không sử dụng Javascript 'thực' mỗi lần. Xem:

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

UnityScript dựa trên javascript 2.0. Có một vài điều còn thiếu (báo cáo chuyển đổi, vv), nhưng chúng nhận được một nửa tốc độ của C++, nhanh hơn Mozilla.

Khi bạn quen với nó, phát triển trong 'JS' cho sự đoàn kết rất nhanh và linh hoạt ... nhưng tất nhiên, nếu bạn định phát triển các thành phần gốc hoặc giao diện với bất kỳ thứ gì trong C, bạn ' sẽ cần phải sử dụng C# (cuối cùng, C# không khó học).

1

JS là ngôn ngữ phổ biến nhất để sử dụng với Unity. Nhưng ngôn ngữ được thực hiện trong Mono, và vì vậy bất kỳ hạn chế nào trong việc triển khai đó cũng sẽ ảnh hưởng đến các tập lệnh Unity.

Tôi không biết cách thực thi Mono của JS hoạt động, nhưng xét đoán từ thông báo lỗi, nó sử dụng kiểu dữ liệu ban đầu được xác định cho Boo, ít nhất. Tuy nhiên, điều đó không có nghĩa là JS được "biến thành Boo". Cả hai được biên dịch vào cùng một bytecode, được JIT'ed và chạy bởi thời gian chạy Mono. Vì vậy, không phải ngôn ngữ nào "bản địa" hơn ngôn ngữ khác.

2

Bạn nên sử dụng C#. Nó là phổ biến, trưởng thành, có nguồn gốc từ .NET. C# là những gì các đội lớn sử dụng. Học C# sẽ hữu ích trong tương lai. JS trong Unity3D không phải là JS thực sự như đã đề cập và không ai nghe nói về Boo.

+0

đó chắc chắn là điều cần cân nhắc, Valentin, cảm ơn. Tôi đã có cơ hội để tìm hiểu một chút C# khi tạo một trang web bằng cách sử dụng .NET MVC Framework một lần. Ý tưởng giao dịch với Javascript vốn là "không thực sự Javascript" không kích thích tôi quá nhiều. Ngoài ra, tôi không thể đồng ý nhiều hơn về Boo, không bao giờ nghe về nó;) – zanona

+0

Tôi thích boo, mặc dù tôi chắc chắn họ chỉ thực hiện nó vì nó mất vài giây, không phải vì mọi người sẽ muốn sử dụng nó. –

0

Ưu điểm và nhược điểm của việc sử dụng C# và tập lệnh Java từ here. C# nhanh hơn một chút so với JavaScript và bạn nhận được các tính năng bổ sung do C# cung cấp. Bạn có thể nhận ý kiến ​​của mọi người từ here.

Phát triển bằng C# có lợi thế của Visual Studio 2010.Nó cung cấp tính năng hoàn thành mã tốt hơn so với Mono phát triển.

Chỉ trong JavaScript, các biến có thể có loại không xác định. Điều này chỉ xảy ra nếu bạn không gán giá trị trong khi khai báo biến.

Hiệu suất chậm hơn với các biến được nhập động và bạn có thể gặp sự cố truyền. Iif đây là một mối quan tâm, sử dụng #pragma nghiêm ngặt.

7

Nếu bạn muốn trở thành nhà phát triển trong Unity và xây dựng sự nghiệp trên đó, hãy học C# và sử dụng nó - đừng lãng phí thời gian của bạn với UnityScript. Bạn có thể sử dụng C# bên ngoài Unity để lập trình. Nếu sự nghiệp chính của bạn đã được phát triển web (hoặc sẽ được), sau đó tiếp tục sử dụng javascript vì cuối cùng C# và UnityScript có chức năng tương tự nhưng C# được sử dụng rộng rãi hơn cho lập trình trò chơi và ứng dụng.

Phần lớn nội dung trên cửa hàng mà tôi đã sử dụng là C# hoặc cung cấp cả JS và C#. Việc trộn lẫn giữa các ngôn ngữ tạo ra các vấn đề phụ thuộc nghiêm trọng bởi vì để sử dụng một lớp trong một trong hai ngôn ngữ, nó đã phải được xử lý theo thứ tự tải tập lệnh Unity. Để sử dụng một lớp được định nghĩa Javascript trong C#, tệp kịch bản lệnh đó phải được xử lý trước tệp C# script. Nếu lớp javscript sau đó cần một cái gì đó từ lớp C#, bạn sẽ phải tìm cách xung quanh nó bởi vì nó chỉ đơn giản là không còn có thể từ tệp javascript. Unity có cách xác định thứ tự kịch bản lệnh.

Tôi nghĩ rằng tôi sẽ cảnh báo bạn về việc trộn C# với UnityScript vì nếu bạn không tập trung vào cái này hay cái kia, bạn sẽ gặp phải vấn đề này. Cuối cùng, C# là nền tảng trung gian giữa các ngôn ngữ không rõ ràng như VB và JavaScript, và các ngôn ngữ giống như C++ (tôi có nền C/C++ khoảng 10 năm).

Tiêu đề "xxx tốt nhất" dẫn đến câu trả lời có ý kiến, nhưng tôi đang cố gắng đưa ra lời khuyên tốt nhất có thể mà không phải chủ quan. C# sẽ cho phép bạn tiếp tục, ngay cả khi Unity đã biến mất một năm kể từ bây giờ. UnityScript/JavaScript sẽ chỉ cho phép bạn chuyển sang trở thành nhà phát triển web. Một nhà phát triển C# có thể dễ dàng chuyển sang UnityScript/JavaScript, nhưng ngược lại thì khó hơn nhiều (không phải không thể, chỉ khó khăn hơn).

Các vấn đề liên quan