Các ưu điểm / nhược điểm của Unity3D là sự lựa chọn để tạo trò chơi là gì? [đóng cửa]


64

Chúng tôi đang thực hiện dự án trường học của mình với Unity3d, vì họ đã sử dụng Shiva vào năm trước (có vẻ kinh khủng đối với tôi) và tôi muốn biết quan điểm của bạn về công cụ này.

Ưu điểm:

  • đa nền tảng, tôi thậm chí đã nghe nói Google sẽ triển khai nó trong Chrome
  • Mọi thứ bạn cần đều ở đây
  • ngôn ngữ kịch bản làm cho nó trở thành một lựa chọn tốt cho những người không lập trình

Nhược điểm:

  • nhiều người chơi?
  • độc quyền, bạn hoàn toàn phụ thuộc vào sự thống nhất và giới hạn của nó và không thể mở rộng nó
  • nó ít "làm một trò chơi từ đầu"
  • C ++ sẽ là một điều tuyệt vời

Tôi thực sự nghĩ rằng loại công cụ này là thú vị, nhưng nó có đáng để sử dụng ở trường cho một dự án liên quan đến hơn 3 người lập trình không? Chúng ta thực sự học được gì về mặt lập trình từ việc sử dụng loại công cụ này (Tôi ổn với python và js, nhưng tôi ghét C #)? Thay vào đó, chúng tôi có thể sử dụng Ogre, ngay cả khi chúng tôi đang học trực tiếp x bắt đầu từ tháng một ...


Một Con khác sẽ là bạn cần phải làm quen với mô hình / thiết kế 3D, nhưng một cái nhìn khác về trang web và điều này dường như không xảy ra .. vì trò chơi 2D là có thể
Johnny Quest

1
@Johnny Quest Chỉ không thực sự có nghĩa là nó có thể làm cho nó khó sử dụng.
Spooks

7
'C ++ sẽ là một điều tuyệt vời' - nghiêm túc, cái gì? Viết bằng C ++ bây giờ là 'tuyệt'? Cá nhân tôi ghét ngôn ngữ (tất cả các cách gõ, Python theo mọi cách: p), nhưng nó chắc chắn là một tính năng ngôn ngữ tuyệt vời và thư viện khôn ngoan.
Vịt Cộng sản

1
Unity là một công cụ tuyệt vời nhưng ... Một vài khuyết điểm cần lưu ý: 1) Unity có xu hướng hơi giống một con heo nhớ. Nó cần nhiều bộ nhớ hơn bạn nghĩ nó nên; có lẽ do những thứ lưu trữ như kết cấu. Điều này có thể gây ra sự cố gỡ lỗi và thậm chí lỗi OOM trên thiết bị di động. 2) Các vấn đề về hiệu năng có thể khó xác định vị trí, địa chỉ và cách khắc phục do bạn đang xử lý hộp đen (không có mã nguồn). Kiểm tra các shader của bạn chặt chẽ và xem cách bạn quản lý cảnh.
milkplus

2
@milkplus: đó là lý do tại sao tôi nghĩ rằng đoàn kết không phải là điều sinh viên nên học. Ví dụ: Lúc đầu tôi dạy sinh viên về lập trình, dạy họ trăn, nhưng lúc này hay lúc khác, bạn phải dạy họ về cách thức hoạt động của công cụ cấp độ, thậm chí là những điều cơ bản. Mọi người nên sử dụng một công cụ khi họ biết mọi thứ về những gì công cụ đó làm. Nếu không, đó là một thảm họa đang chờ để xảy ra. Bạn không thể luôn biện minh cho trích dẫn của Knuth bằng một thứ phức tạp như sự thống nhất.
jokoon

Câu trả lời:


66

"Chuyên nghiệp" chính của Uinty3D là nó rất nhanh. Tôi không nói về hiệu suất ở đây, nhưng về tốc độ phát triển. Bạn có:

  • Đường ống tài sản thống nhất. Không cần phải dành thời gian cho hệ thống con tài nguyên, không có thói quen nhập lỗi để viết và sửa lỗi: chỉ cần thả một tệp vào thư mục và nó hoạt động.
  • Tổng biên tập cấp. Không cần phải dành thời gian cho các công cụ cấp độ: chỉ cần đi thẳng vào kinh doanh.
  • Hỗ trợ tinh chỉnh và gỡ lỗi tuyệt vời: tất cả các biến trò chơi của bạn được hiển thị ngay khi bạn chơi và cũng có thể được thay đổi nhanh chóng - và tất cả điều này mà không cần viết một dòng mã. Tạm dừng trò chơi bất cứ lúc nào hoặc từng bước thông qua mã một tuyên bố.
  • Thư viện khá đầy đủ của các thành phần làm sẵn. Kết xuất, âm thanh, vật lý, điều khiển - rất nhiều mã "soạn sẵn" đã được viết.
  • Mono như một máy chủ kịch bản. Mặc dù người ta có thể tranh luận về giá trị của C # như một ngôn ngữ, thư viện lớp cơ sở của Mono cung cấp rất nhiều chức năng. Các bộ sưu tập, I / O, đa luồng và LINQ biểu cảm điên rồ đều tăng tốc độ phát triển đáng kể.

Ngoài ra, Unity3d thực sự tốt trên nhiều nền tảng. Tất nhiên, bạn không thể tạo, giả sử, một trò chơi windows .exe và sau đó kỳ diệu là nó "chỉ hoạt động" trên iPhone; nhưng Unity khá gần với điều đó. Những gì được yêu cầu là "điều chỉnh" nhiều hơn "porting".

Tất nhiên, trong một số trường hợp, Unity3D không lý tưởng. Nhiều người chơi mạng được tích hợp trong Unity là ổn đối với một số trò chơi ngang hàng LAN, nhưng bất cứ điều gì yêu cầu máy chủ trung tâm khá nhiều đều yêu cầu bạn viết tất cả mã mạng từ đầu. Hệ thống GUI của Unity khá kỳ quặc và chậm chạp, do đó, việc tạo GUI trong trò chơi phức tạp là một điều khó khăn. Tuy nhiên, tất cả các hệ thống GUI trò chơi khác mà tôi thấy cũng rất đau đớn, vì vậy, một hệ thống của Unity không phải là xấu về tổng thể.

Và, tất nhiên, Unity3D kém linh hoạt hơn một chút so với "công cụ trò chơi" như OGRE, chỉ cung cấp một thư viện / mã nguồn. Hiệu suất của nó không chính xác hàng đầu, và vì bạn chỉ có một hộp cát kịch bản, bạn không thể sử dụng một số hack cấp thấp thông minh để cải thiện nó. Ví dụ: nếu một số lý do, trình kết xuất cây tích hợp của Unity không làm bạn hài lòng, bạn không thể tự viết một cái (bạn có thể, nhưng nó sẽ hoạt động thông qua các tập lệnh và hầu hết có thể quá chậm và quá nhiều rắc rối ). Tuy nhiên, bạn vẫn có thể làm bất cứ điều gì với Unity miễn là bạn không mất một chút hiệu suất.

Tuy nhiên, "con" lớn nhất của Unity3D là kiểm soát nguồn. Như đã đề cập, Máy chủ tài sản của Unity có giá một xu khá. Và nó hút, thực sự, thực sự khó khăn. Nó thậm chí không có phân nhánh. Mặc dù về mặt lý thuyết, Unity3D hỗ trợ các hệ thống SCM của bên thứ 3, nhưng việc sử dụng chúng cũng rất nguy hiểm. Tôi đã thấy các cài đặt nhập "thay đổi" một cách kỳ diệu sau khi cam kết SVN hoặc tất cả các tham số của đối tượng biến mất sau khi sử dụng Perforce. Tất cả những thứ này có thể được xử lý xung quanh, nhưng dù sao, Unity3D + Kiểm soát nguồn = đau.

Vì vậy, để thực sự trả lời câu hỏi của bạn. Tôi tin rằng Unity3D là một trong những lựa chọn tốt nhất, nếu không phải tốt nhất, lựa chọn công cụ trò chơi cho một trò chơi "nhỏ". Đặc biệt là trong giai đoạn nguyên mẫu.

Điều đó nói rằng, nếu chúng ta đang nói về một dự án giáo dục, tôi khuyên bạn nên chống lại nó. Để tìm hiểu cách các trò chơi hoạt động, tốt hơn hết là viết một bài ở mức độ thấp nhất có thể. Công cụ trò chơi là một công cụ tuyệt vời; nhưng để sử dụng nó để đạt được lợi ích tối đa, cần phải hiểu cách họ làm việc và lý do tại sao họ làm việc theo cách đó. Và cách tốt nhất để học điều này là viết công cụ trò chơi của riêng bạn - ngay cả khi cuối cùng nó trở nên tào lao.


3
Tôi sẽ trích dẫn "Đường dẫn tài sản hợp nhất. Không cần phải dành thời gian cho hệ thống con tài nguyên, không có thói quen nhập lỗi để viết và sửa lỗi: chỉ cần thả một tệp vào thư mục và nó hoạt động."
nkint

7
và "Con" lớn nhất của Unity3D, tuy nhiên, là kiểm soát nguồn. "
nkint

2
và "Điều đó nói rằng, nếu chúng ta đang nói về một dự án giáo dục, tôi khuyên bạn nên chống lại nó."
nkint

Về vấn đề "gen cây" của bạn. Tôi nghĩ thực tế trong C #, bạn có thể viết một gen cây C ++, đặt nó vào một tệp dll và coi nó như là quản lý c ++. Vì vậy, về mặt lý thuyết bạn có thể truy cập vào "sửa lỗi động cơ" của mình thành sự thống nhất.
daemonfire300

Tôi thừa nhận rằng hệ thống Unity GUI 2.0 không có gì khác, ngoài hệ thống "kết xuất chỉnh lưu bằng văn bản", nhưng nó rất dễ mở rộng. Hãy xem @AffinityUI hoặc các dự án UI Unity khác có trọng lượng rất nhẹ, nguồn mở và làm cho hệ thống UI có giá trị.
daemonfire300

28

Tôi sẽ bắt đầu bằng cách bình luận về danh sách của bạn:

  • Viết kịch bản không chỉ là một lợi ích cho những người không lập trình. Trở thành một lập trình viên (tốt) không chỉ là biết một ngôn ngữ, đó là biết cách giải mã các vấn đề và suy nghĩ theo một cách cụ thể. Ngôn ngữ kịch bản có thể cho phép lập trình viên tận dụng các kỹ năng tư duy phê phán bậc cao đó để tạo ra kết quả mạnh mẽ hơn, thú vị hơn trong thời gian ngắn hơn họ có thể cần tạo ra kết quả tương đương trong khi cũng lo lắng về các chi tiết cấp thấp hơn mà một số ngôn ngữ (C ++ đến với tâm trí) lực vào hình ảnh.

  • Hỗ trợ nhiều người chơi (hoặc thiếu nó) chỉ là vấn đề theo cách này hay cách khác nếu dự án của bạn cần.

  • Tôi không thấy "độc quyền" là một con lừa. Nếu đây là một dự án trường học, có lẽ bạn sẽ không muốn dành thời gian hack vào nguồn của khuôn khổ bạn sử dụng, hoặc bất cứ điều gì. Bên cạnh đó, DirectX cũng là độc quyền.

  • Hoàn toàn không có gì sai khi sử dụng các công cụ hoặc khung công tác cấp cao hơn như Unity. "Làm một trò chơi từ đầu" là không thành công - chính xác thì bạn nghĩ gì "từ đầu?" Bạn vẫn sẽ sử dụng API đồ họa của người khác. Thời gian chạy của ai đó (thậm chí C yêu cầu thư viện thời gian chạy). "Làm một trò chơi" là những gì kiếm được sự tôn trọng, chứ không phải "làm một trò chơi mà không sử dụng bất kỳ công cụ hữu ích nào".

  • C ++ là một thứ "tuyệt" là một chút chủ quan. Ngôn ngữ được sử dụng rất thường xuyên bởi các chuyên gia trong ngành, nhưng có lẽ không phải vì những lý do bạn sẽ nghĩ. Là một ngôn ngữ, nó bắt đầu thể hiện tuổi của nó và có thể cực kỳ cồng kềnh so với các tùy chọn hiện đại hơn. Trong mọi trường hợp, ngôn ngữ chỉ là công cụ và một lập trình viên giỏi sẽ có thể chọn ngôn ngữ mới một cách dễ dàng.

Lợi thế lớn khi sử dụng Unity cho dự án trường học của bạn là khung công tác cấp cao với rất nhiều công việc cơ sở hạ tầng đã sẵn sàng cho bạn - điều này sẽ cho phép bạn tập trung vào trò chơi của mình chứ không phải xây dựng nền tảng. Có lẽ, bạn có một cửa sổ tương đối hạn chế để sản xuất trò chơi này để bạn càng tận dụng các công cụ hiện có, bạn sẽ càng phải tạo ra logic hoặc tài sản dành riêng cho trò chơi của mình và sẽ khiến trò chơi của bạn trông và cảm nhận hoàn thiện hơn - có một đường cong học tập cho Unity, nhưng bạn kết thúc với nhiều thứ hơn theo ý của bạn nhanh hơn nhiều.

Một bất lợi là bạn có khả năng chìm trong thời gian tìm hiểu một công cụ cụ thể liên quan đến kiến ​​thức có thể không chuyển nhượng được, đặc biệt nếu bạn quyết định rằng quy trình làm việc và môi trường của Unity không dành cho bạn và bạn không bao giờ muốn sử dụng nó nữa . Ngoài ra, Unity không có quy trình làm việc 2D rõ ràng nhất - nó rất tập trung vào các trò chơi 3D, tất cả các chi phí trong tài sản nghệ thuật có xu hướng liên quan. Nhưng tôi nghĩ rằng, đối với một dự án trường học như bạn mô tả, Unity là một lựa chọn khá tốt.


13
Tôi sẽ trích dẫn "Làm một trò chơi" là những gì kiếm được sự tôn trọng, chứ không phải "làm một trò chơi mà không sử dụng bất kỳ công cụ hữu ích nào."
nkint

2
"Hoàn toàn không có gì sai khi sử dụng các công cụ hoặc khung công tác cấp cao hơn như Unity." Tạo trò chơi từ đầu "là không thành công - chính xác thì bạn nghĩ gì" từ đầu? "Hoàn toàn không có gì sai, nhưng đến lưu ý rằng những người tạo ra công nghệ mới sẽ ở mức độ thấp nhất có thể, ví dụ Uncharted 2 thậm chí đã sử dụng API đồ họa được sửa đổi trong nhà.
Concept3d

1
Bất kỳ nhà phát triển nào muốn đạt đến đỉnh cao tuyệt đối của đồ họa máy tính sẽ cần phải tập trung ở mức thấp nhất và tạo ra công cụ của riêng họ với trò chơi của họ; nhưng dường như đây là khoảng 1% của tất cả các nhà phát triển trò chơi. Nếu một công ty đang tạo ra một trò chơi tiên tiến như Uncharted 1, tại thời điểm Uncharted 3 sắp ra mắt, họ có thể sử dụng một số khuôn khổ hiện có (không nhất thiết phải là Unity). Câu hỏi được đặt ra: Bạn đang tạo Uncharted 4?
Katana314

9

Một vấn đề lớn với Unity là kiểm soát nguồn. Nếu bạn không làm việc trong một nhóm thì điều này sẽ không quan trọng bằng (có thể nói là vậy), nhưng điều đó rất có thể sẽ không xảy ra.

Bạn có thể sử dụng Máy chủ tài sản Unity, nhưng yêu cầu 1) Unity Pro ($ 1500) và 2) Giấy phép máy chủ tài sản mỗi chỗ ngồi ($ 500). Tôi cho rằng bạn có thể nhận được một số loại giảm giá giáo dục, nhưng nó không miễn phí.

Ngoài ra, bạn có thể sử dụng một cái gì đó như SVN với Unity. Để hỗ trợ đúng cách, bạn vẫn cần Unity Pro.

Bạn thực sự không thể kiểm tra phiên bản Unity chuyên nghiệp vào SVN và mong đợi nó hoạt động hoàn hảo. Cơ chế của họ để ràng buộc GUID với tài sản và do đó không chính xác là an toàn SCM.


Chức năng nhiều người chơi khá tốt, mặc dù thành thật mà nói tôi đã không chuyển một trò chơi với nó. Về lý thuyết, bạn chỉ cần đính kèm các quan điểm mạng vào mọi thứ và nói với nó những gì bạn muốn tuần tự hóa để thiết lập sao chép đúng cách. Từ đó, một số UI hoạt động để kết nối với các đồng nghiệp khác và thiết lập. Mặc dù vậy, nó chủ yếu là ngang hàng. Bạn có thể có thể thực hiện lập trình máy khách / máy chủ chạy ở chế độ không đầu, nhưng tôi không bị rối với nó. Nhưng chỉ cần bắt người A chạy xung quanh màn hình của người B là điều khá dễ dàng và nhanh chóng.

Ngoài ra C # là một tích cực theo như tôi quan tâm. LINQ là siêu biểu cảm. Nó có xử lý ngoại lệ thích hợp và thu gom rác. Nó có các mô hình hiện đại hơn nhiều như đại biểu, lambdas, giao diện và hỗ trợ chung tốt hơn so với C ++. ( Chỉnh sửa : điều này rõ ràng gây tranh cãi. Quan điểm của tôi là C # hầu như không phải là ngôn ngữ xấu . Tôi không muốn tranh luận lâu về ưu và nhược điểm của ngôn ngữ so với C ++.)

Tuy nhiên, điểm tích cực nhất của việc sử dụng Unity có lẽ là đường ống nghệ thuật. Bạn có thể lấy tệp PSD hoặc Max (giả sử bạn đã cài đặt 3ds max) trong thư mục và nó được nhập.


3
@DeadMG, vâng, thực sự rất tốt. Có, tôi biết về boost, siêu lập trình mẫu, v.v. Nhưng tôi thấy C # là một ngôn ngữ hiện đại hơn.
Tetrad

3
@DeadMG Tôi nghĩ rằng vấn đề là C # cực kỳ mượt mà đối với nhiều trường hợp sử dụng mà C ++ để lại rất nhiều mong muốn. Không phải C ++ không thể làm những điều đó.
Nate

3
Điều duy nhất trong danh sách của anh ấy tôi có thể không đồng ý là 'hỗ trợ chung tốt hơn C ++'.
Kylotan

1
@Kylotan "for (vector <vector <int >> :: iterator iterator = points.begin (); iterator! = Điểm.end (); iterator ++) {" VS "foreach (var pointset in points)" .. .yup, tôi với C #.
Katana314

3
@ Katana314 Tất nhiên trong C ++ 11 : for ( auto x : xs ).
Eric

6

Cập nhật: Unity hiện cung cấp tất cả các tính năng này ngay cả trong phiên bản miễn phí, vì vậy vui lòng bỏ qua câu trả lời bên dưới.


Một cái gì đó đáng chú ý - nếu bạn đang sử dụng phiên bản Unity3D miễn phí, bạn sẽ không thể sử dụng một số hiệu ứng, bao gồm các trình đổ bóng xử lý hậu kỳ (như nở hoa) và quan trọng hơn là bóng động. Những thứ này rõ ràng sẽ không ảnh hưởng nhiều đến quy trình làm việc cho dự án, nhưng chúng có những hạn chế về những gì có thể đạt được miễn phí với động cơ.


1
Điều này không còn chính xác và cần được cập nhật hoặc loại bỏ.
MichaelHouse

@ Byte56 Cảm ơn. Trong tương lai, bạn sẽ có thể tự cập nhật bài viết cũ mà không cần phải để lại nhận xét.
Michael Younkin 8/2/2016

Tôi đã trả lời một lá cờ để xóa câu trả lời này và tôi không đề nghị bạn cập nhật nó để nói rằng nó không còn chính xác nữa. Tôi đã đề nghị bạn cập nhật nó cho chính xác, hoặc loại bỏ nó. Câu trả lời này hiện không trả lời ưu và nhược điểm của Unity 3D là một lựa chọn. Tôi chắc chắn rằng bạn có thể tìm ra một cách để lưu nó mặc dù. (Bạn có thể cập nhật nó để bao gồm tất cả các tính năng mà Unity hiện cung cấp và những tính năng mà chúng không miễn phí).
MichaelHouse

3

Câu trả lời của Nevermind bao gồm mọi thứ khá kỹ lưỡng, nhưng chỉ để nói về khía cạnh kiểm soát nguồn của mọi thứ, thực sự không có gì ghê gớm khi bạn học cách tìm ra một số vấn đề:

  • Trước hết, có Máy chủ tài sản là đắt tiền, và khá kinh khủng cho tất cả nhưng sử dụng cơ bản. Lợi ích chính của nó là được tích hợp vào Unity, và mặc dù nó có giá trị để dễ sử dụng và đáng giá cho các dự án đơn giản hơn, đối với bất kỳ thứ gì lớn hơn (thường là các dự án có ngân sách cho AS), nó không đủ linh hoạt.
  • Chuyển sang kiểm soát phiên bản bên ngoài, điều quan trọng là phải nhận ra rằng Meta Files phải được xử lý như mọi tài sản khác và luôn được thêm vào / cập nhật trong kiểm soát phiên bản. Không làm điều này có thể là những gì đã xảy ra trong kịch bản cài đặt của Nevermind biến mất.
  • Cuối cùng, làm việc với bất kỳ hệ thống kiểm soát phiên bản nào trong Unity (bao gồm Máy chủ tài sản), giao tiếp nhóm trở nên cần thiết khi làm việc với các tài sản nhị phân để tránh dậm chân vào công việc của nhau.

Trong trường hợp bạn muốn biết thêm chi tiết về những điểm này, tôi đã đăng cách đây một thời gian về việc sử dụng git với Unity dựa trên kinh nghiệm của tôi về một số dự án Unity khá lớn: http://goo.gl/ivJVR


Ok, wow, xin lỗi hoại tử. Tôi chỉ nhận thấy điều này đã được hỏi (và trả lời) vào năm 2011! Tôi đã thêm vào nó bởi vì nó xuất hiện trong thư tin tức của stackexchange trong tuần này .
FlintZA

Không có thứ gọi là "necro" trên SE. Trường hợp tại điểm, nhận xét của tôi. : P
Cypher

2

Thực ra. Nhiều người chơi được hỗ trợ. Nó chỉ đơn giản là vấn đề chọn một máy chủ mà bạn muốn chạy trò chơi của bạn.

Sản phẩm hấp dẫn trên thị trường hiện nay là "Máy chủ SmartFox" họ cung cấp một vài gói khác nhau, tất cả đều miễn phí (ở một mức độ nào đó). Nó chỉ miễn phí nếu bạn có kế hoạch có một lượng người chơi nhất định, vì mỗi gói cho phép một lượng người chơi nhất định "miễn phí".

Nếu bạn chọn nâng cấp, giá khá cao cho một nhà phát triển độc lập. Vì vậy, về lâu dài, nếu bạn có nhiều người chơi trên máy chủ của mình, bạn sẽ phải tính phí cho trò chơi của mình thay vì tải nó lên các trang web như Download.com dưới dạng trò chơi đầy đủ miễn phí. Điều này có thể không phải là vấn đề đối với một số người, nhưng hầu hết chúng ta không thể chi trả 2.500 đô la tiền túi cho một máy chủ.

Ví dụ: SmartFox pro cho phép 20 người chơi miễn phí. Nếu bạn muốn nâng cấp, bạn sẽ tốn 500 Euro, cao hơn một chút ở Mỹ, khoảng 600-700 và cho phép 100 kết nối.

Lần nâng cấp tiếp theo dành cho số lượng người chơi tối đa là 500 và là 1000 Euro, nhưng ... Bạn không phải trả 1000, bạn phải trả số tiền chênh lệch.

Vì vậy, bạn sẽ chỉ phải trả thêm 500 Euro, thay vì toàn bộ 1000. Các bản nâng cấp cuối cùng hỗ trợ số lượng kết nối không giới hạn, với giá 2.000 Euro. Đó là gần 3.000 đô la Mỹ.

Vì vậy, nếu bạn nâng cấp từ 500 kết nối, bạn phải trả 1000 Euro, nếu bạn nâng cấp từ 100 kết nối, bạn phải trả 1.5000 Euro, và tất nhiên, 2.000 Euro để nâng cấp miễn phí.

Ngoài ra, máy chủ này rất dễ cài đặt với Unity và có rất nhiều video hướng dẫn về cách thực hiện chính xác trên Youtube.


Tôi đã làm việc rộng rãi với SmartFox Server từ năm 2005 và nó gây được tiếng vang lớn. Rất ổn định và trưởng thành.
PippoApps.com
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.