
Lập trình kịch bản trong Unity dành cho lập trình viên có kinh nghiệm
Trang web này đã được dịch bằng máy để thuận tiện cho bạn. Chúng tôi không thể đảm bảo tính chính xác hoặc độ tin cậy của nội dung được dịch. Nếu bạn có thắc mắc về tính chính xác của nội dung được dịch, vui lòng tham khảo phiên bản tiếng Anh chính thức của trang web.
Dành cho các lập trình viên mới làm quen với Unity
Trong Unity , bạn có thể sử dụng các script để phát triển hầu hết mọi phần của trò chơi hoặc nội dung tương tác thời gian thực khác. Unity hỗ trợ lập trình kịch bản bằng C# và có hai cách chính để thiết kế kiến trúc kịch bản C# của bạn. UnityThiết kế hướng đối tượng, là phương pháp truyền thống và được sử dụng rộng rãi nhất, và thiết kế hướng dữ liệu, hiện đã khả thi trong Unity, đối với các trường hợp sử dụng cụ thể, thông qua công nghệ đa luồng hiệu năng cao mới của chúng tôi. Ngăn xếp công nghệ hướng dữ liệu (DOTS).
Bạn đến với Unity từ nền tảng lập trình C++ phải không?
Unity hỗ trợ C#, một ngôn ngữ tiêu chuẩn trong ngành có một số điểm tương đồng với Java hoặc C++.
So với C++, C# dễ học hơn. Ngoài ra, nó là một "ngôn ngữ được quản lý", có nghĩa là nó tự động thực hiện việc quản lý bộ nhớ cho bạn: cấp phát/giải phóng bộ nhớ, xử lý rò rỉ bộ nhớ, v.v.
Nhìn chung, C# thường được ưa chuộng hơn C++ nếu bạn muốn làm game trước, rồi sau đó mới tìm hiểu các khía cạnh lập trình nâng cao hơn.

Đối tượng và thành phần GameObjects trong Unity
Tất cả lối chơi và tính tương tác được phát triển trong Unity đều được xây dựng dựa trên ba khối cấu trúc cơ bản: GameObjects, thành phần và biến.
Mọi đối tượng trong trò chơi đều là GameObject : nhân vật, ánh sáng, hiệu ứng đặc biệt, đạo cụ – tất cả mọi thứ.
Các thành phần
GameObjects không thể tự làm bất cứ điều gì. Để thực sự trở thành một đối tượng, bạn cần gán thuộc tính cho GameObject, điều này được thực hiện bằng cách thêm các Component.
Các thành phần xác định và kiểm soát hành vi của GameObjects mà chúng được gắn vào. Một ví dụ đơn giản là việc tạo ra một nguồn sáng, bao gồm việc gắn một Light Component vào một GameObject (xem bên dưới). Hoặc, thêm thành phần Rigid body vào một đối tượng để làm cho nó rơi xuống.
Các thành phần có thể có bất kỳ số lượng thuộc tính hoặc biến nào có thể chỉnh sửa được , có thể được điều chỉnh thông qua cửa sổ Inspector trong trình chỉnh sửa Unity và/hoặc thông qua tập lệnh. Trong ví dụ trên, một số đặc tính của ánh sáng là phạm vi, màu sắc và cường độ.
Lập trình các thành phần trong Unity
Các thành phần tích hợp sẵn của Unity rất linh hoạt, nhưng bạn sẽ sớm nhận ra mình cần phải vượt ra ngoài những gì chúng cung cấp để triển khai logic riêng của mình. Để làm điều này, bạn sử dụng các đoạn mã (script) để triển khai logic và hành vi trò chơi của riêng mình, sau đó thêm các đoạn mã đó dưới dạng các thành phần (Component) vào GameObjects). Mỗi đoạn mã (script) kết nối với các hoạt động nội bộ của Unity bằng cách triển khai một lớp kế thừa từ lớp tích hợp sẵn có tên là MonoBehaviour.
Các thành phần kịch bản của bạn sẽ cho phép bạn thực hiện nhiều việc: kích hoạt các sự kiện trong trò chơi, kiểm tra va chạm, áp dụng vật lý, phản hồi đầu vào của người dùng, và nhiều hơn nữa. Xem API lập trình kịch bản Unity để biết thêm thông tin.

Lợi ích của thiết kế hướng dữ liệu với DOTS
Khái niệm GameObject-Component truyền thống vẫn hoạt động tốt vì nó dễ hiểu đối với cả lập trình viên và người không phải lập trình viên, và dễ dàng xây dựng giao diện người dùng trực quan. Bạn thêm một Rigidbody Component vào một GameObject và nó sẽ bắt đầu rơi, hoặc thêm một Light Component vào một GameObject và nó sẽ phát ra ánh sáng. Và cứ thế tiếp tục.
Tuy nhiên, hệ thống Component được viết bằng ngôn ngữ lập trình hướng đối tượng, điều này tạo ra những thách thức cho các nhà phát triển khi quản lý bộ nhớ đệm và bộ nhớ chính trong môi trường phần cứng luôn thay đổi.
Components và GameObjects là những đối tượng "nặng ký kiểu C++". Tất cả GameObjects đều có tên. Các thành phần của chúng là các lớp bao bọc C# nằm trên các thành phần C++. Điều này giúp chúng dễ thao tác hơn, tuy nhiên, có thể ảnh hưởng đến hiệu năng vì chúng có thể được lưu trữ một cách không có cấu trúc. Đối tượng C# đó có thể nằm ở bất kỳ đâu trong bộ nhớ. Đối tượng C++ cũng có thể nằm ở bất kỳ vị trí nào trong bộ nhớ. Các sự vật không được nhóm lại với nhau trong bộ nhớ liền kề. Mỗi khi cần tải bất kỳ dữ liệu nào vào CPU để xử lý, tất cả thông tin đều phải được lấy từ nhiều nguồn khác nhau. Quá trình này có thể trở nên chậm và kém hiệu quả, do đó cần rất nhiều biện pháp tối ưu hóa.
Để giải quyết những vấn đề về hiệu năng này, chúng tôi đang xây dựng lại nền tảng cốt lõi của Unity với bộ công nghệ hướng dữ liệu đa luồng hiệu năng cao, gọi tắt là DOTS (hiện đang trong giai đoạn xem trước).
DOTS cho phép trò chơi của bạn tận dụng tối đa sức mạnh của các bộ xử lý đa lõi thế hệ mới nhất một cách hiệu quả. Nó bao gồm:
- Hệ thống quản lý tác vụ C# để chạy mã đa luồng một cách hiệu quả.
- Hệ thống thành phần thực thể (ECS) được sử dụng mặc định để viết mã hiệu năng cao.
- Trình biên dịch Burst để tạo ra mã gốc được tối ưu hóa cao.
Trong DOTS, ECS là hệ thống thành phần mới; những gì bạn làm với một GameObject theo cách lập trình hướng đối tượng truyền thống, bạn sẽ làm với một Entity trong hệ thống mới này. Các linh kiện vẫn được gọi là linh kiện. Điểm khác biệt quan trọng nằm ở cách bố trí dữ liệu. Bạn có thể đọc thêm về điều này trong bài đăng trên blog “ Trên DOTS: Hệ thống thành phần thực thể ”.

Tận dụng tối đa phần cứng hiện đại.
Ngoài việc là một cách tiếp cận tốt hơn cho lập trình game vì lý do thiết kế, việc sử dụng ECS còn giúp bạn tận dụng tối đa Hệ thống Job C# và Trình biên dịch Burst của Unity, cho phép bạn khai thác triệt để sức mạnh của phần cứng hiện đại ngày nay.
Hệ thống đa luồng của DOTS cho phép bạn tạo các trò chơi chạy trên nhiều loại phần cứng khác nhau và xây dựng thế giới game phong phú hơn với nhiều yếu tố và mô phỏng phức tạp hơn. Mã lập trình hiệu quả góp phần tối ưu hóa khả năng kiểm soát nhiệt độ và thời lượng pin trên thiết bị di động của người chơi. Bằng cách chuyển từ thiết kế hướng đối tượng sang thiết kế hướng dữ liệu, bạn có thể dễ dàng tái sử dụng mã của mình hơn và người khác cũng có thể dễ dàng hiểu và làm việc với mã đó hơn.
Vì một số công nghệ của DOTS vẫn đang trong giai đoạn thử nghiệm, nên các nhà phát triển chỉ nên sử dụng nó để giải quyết một thách thức cụ thể về hiệu năng trong dự án của mình, thay vì xây dựng toàn bộ dự án dựa trên nó. Hãy xem phần “Tài liệu tham khảo khác” ở cuối trang này để tìm các liên kết đến các tài liệu quan trọng của DOTS.

Gỡ lỗi trong Unity
Việc tinh chỉnh và gỡ lỗi rất hiệu quả trong Unity vì tất cả các biến số trong quá trình chơi đều được hiển thị ngay khi nhà phát triển đang chơi, do đó mọi thứ có thể được thay đổi ngay lập tức mà không cần viết một dòng mã nào. Bạn có thể tạm dừng trò chơi bất cứ lúc nào hoặc chạy từng dòng mã một.
Dưới đây là một số nguồn tài liệu hữu ích để tìm hiểu thêm về tối ưu hóa trong Unity:
Tìm hiểu về tối ưu hóa trong Unity
Các nguyên tắc thực hành tốt nhất chung (bao gồm nhiều lời khuyên chi tiết về tối ưu hóa hệ thống giao diện người dùng của Unity)
Lập trình backend trong Unity
.NET: Unity đã sử dụng một triển khai của môi trường chạy Mono tiêu chuẩn để lập trình kịch bản, hỗ trợ ngôn ngữ C# một cách tự nhiên. Hiện tại, Unity được tích hợp sẵn trong Visual Studio for Mac thay vì MonoDevelop- Unity trên macOS. Trên Windows, Unity được tích hợp sẵn trong Visual Studio.
Môi trường thực thi kịch bản .NET 4.6 trong Unity hỗ trợ nhiều tính năng C# mới thú vị và khả năng gỡ lỗi có sẵn trong C# 6.0 trở lên. Điều này cũng mang lại trải nghiệm IDE C# tuyệt vời, đi kèm với các tính năng C# mới.
IL2CPP: Đây là một hệ thống phụ trợ lập trình được phát triển bằng Unity, bạn có thể sử dụng nó như một giải pháp thay thế cho Mono khi xây dựng dự án cho một số nền tảng. Khi bạn chọn xây dựng dự án bằng IL2CPP, Unity sẽ chuyển đổi mã IL từ các tập lệnh và assembly thành mã C++, trước khi tạo tệp nhị phân gốc (.exe, .apk, .xap, chẳng hạn) cho nền tảng bạn đã chọn.
Lưu ý rằng IL2CPP là công cụ biên dịch kịch bản duy nhất có sẵn khi xây dựng cho iOS và WebGL.
Tùy chỉnh Unity bằng cách mở rộng Trình chỉnh sửa
Với tư cách là một lập trình viên, bạn có rất nhiều sự linh hoạt trong Unity vì bạn có thể mở rộng trình chỉnh sửa bằng các cửa sổ tùy chỉnh của riêng mình, hoạt động giống như Inspector, Scene hoặc bất kỳ cửa sổ tích hợp nào khác trong trình chỉnh sửa tiêu chuẩn. Việc tích hợp các công cụ của riêng bạn vào Unity hỗ trợ quy trình làm việc và nhu cầu riêng của bạn và nhóm, từ đó nâng cao hiệu quả.


