Hero image

Các phương pháp tốt nhất để tổ chức dự án Unity của bạn

Hãy trang bị cho nhóm của bạn khả năng phát triển game hiệu quả với những lời khuyên hữu ích về việc thiết lập tiêu chuẩn cho các dự án Unity của bạn.

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.

Những thực tiễn tốt nhất này đến từ cuốn sách điện tử miễn phí của chúng tôi, "Kiểm soát phiên bản và các thực tiễn tốt nhất về tổ chức dự án dành cho nhà phát triển trò chơi " , được tạo ra để giúp các nhóm có cả thành viên kỹ thuật và phi kỹ thuật đưa ra quyết định thông minh về cách thiết lập hệ thống kiểm soát phiên bản và lập kế hoạch hợp tác suôn sẻ.

Chế độ xem cửa sổ Dự án một cột và hai cột

CÁC HÌNH CHIẾU CỬA SỔ DỰ ÁN MỘT CỘT VÀ HAI CỘT

Cấu trúc thư mục

Mặc dù không có một phương pháp duy nhất nào để tổ chức một dự án Unity , nhưng dưới đây là một số khuyến nghị quan trọng:

  • Hãy ghi lại quy ước đặt tên và cấu trúc thư mục của bạn . Hướng dẫn về kiểu dáng và/hoặc mẫu dự án giúp việc tìm kiếm và sắp xếp tệp dễ dàng hơn. Hãy chọn phương án phù hợp với nhóm của bạn và đảm bảo rằng mọi người đều đồng thuận.
  • Hãy nhất quán trong cách đặt tên . Đừng đi chệch khỏi hướng dẫn phong cách hoặc mẫu đã chọn. Nếu bạn cần sửa đổi quy tắc đặt tên, hãy phân tích cú pháp và đổi tên tất cả các tài sản bị ảnh hưởng cùng một lúc. Nếu các thay đổi ảnh hưởng đến một số lượng lớn tệp tin, hãy cân nhắc tự động hóa quá trình cập nhật bằng cách sử dụng một tập lệnh.
  • Không sử dụng dấu cách trong tên tệp và thư mục . Các công cụ dòng lệnh của Unity gặp sự cố với các tên đường dẫn có chứa khoảng trắng. Hãy sử dụng kiểu viết CamelCase thay thế cho khoảng trắng.
  • Phân vùng thử nghiệm hoặc khu vực riêng biệt . Tạo một thư mục riêng cho các cảnh không dùng trong sản xuất và các cảnh thử nghiệm. Các thư mục con có tên người dùng có thể giúp bạn phân chia khu vực làm việc theo từng thành viên trong nhóm.
  • Tránh tạo thêm thư mục thừa ở cấp độ thư mục gốc . Nói chung, hãy lưu trữ các tệp nội dung của bạn trong thư mục Assets. Không nên tạo thêm thư mục ở cấp độ thư mục gốc của dự án trừ khi thực sự cần thiết.
  • Hãy tách biệt tài sản nội bộ của bạn khỏi tài sản của bên thứ ba . Nếu bạn đang sử dụng các tài nguyên từ Asset Store hoặc các plugin khác, rất có thể chúng có cấu trúc dự án riêng. Hãy tách biệt tài sản cá nhân của bạn.

Ghi chú : Nếu bạn cần chỉnh sửa tài nguyên hoặc plugin của bên thứ ba cho dự án của mình, thì hệ thống quản lý phiên bản có thể giúp bạn cập nhật plugin đó lên phiên bản mới nhất. Sau khi bản cập nhật được nhập, bạn có thể xem qua phần so sánh để xem những thay đổi của mình có thể đã bị ghi đè ở đâu và thực hiện lại chúng.

Mặc dù không có cấu trúc thư mục cố định, hai phần sau đây sẽ đưa ra ví dụ về cách bạn có thể thiết lập dự án Unity của mình. Cả hai cấu trúc này đều dựa trên việc chia dự án của bạn theo loại tài nguyên .

Trang hướng dẫn về Các loại tài sản mô tả chi tiết hơn về các loại tài sản phổ biến nhất. Bạn có thể sử dụng các mẫu hoặc dự án "Học hỏi" để có thêm cảm hứng khi sắp xếp cấu trúc thư mục của mình. Mặc dù bạn không bị giới hạn bởi những tên thư mục này, nhưng chúng có thể cung cấp cho bạn một điểm khởi đầu tốt.

Cấu trúc thư mục – ví dụ 1

Ví dụ thư mục 1

Các thư mục con được phân chia theo loại tài nguyên.

Nếu bạn tải xuống một trong các dự án Mẫu hoặc Dự án Khởi đầu từ Unity Hub, bạn sẽ nhận thấy các thư mục con được phân chia theo loại tài nguyên . Tùy thuộc vào mẫu đã chọn, bạn sẽ thấy các thư mục con đại diện cho một số tài nguyên chung.

Việc xác định cấu trúc dự án rõ ràng ngay từ đầu có thể giúp bạn tránh được các vấn đề về kiểm soát phiên bản sau này. Nếu bạn di chuyển tài sản từ thư mục này sang thư mục khác, nhiều hệ thống quản lý phiên bản sẽ hiểu thao tác này chỉ là xóa một tệp và thêm một tệp khác, chứ không phải là tệp đã được di chuyển. Thao tác này sẽ làm mất lịch sử của tệp tin gốc.

Plastic SCM có thể xử lý việc di chuyển tập tin trong Unity và bảo toàn lịch sử của bất kỳ tập tin nào đã được di chuyển. Tuy nhiên, điều cần thiết là bạn phải di chuyển các tệp trong Trình chỉnh sửa để tệp .meta được di chuyển cùng với tệp tài nguyên .

Tạo cấu trúc thư mục giống nhau cho tất cả các dự án.

Sau khi đã quyết định cấu trúc thư mục cho các dự án của mình, hãy sử dụng tập lệnh Editor để tái sử dụng mẫu và tạo cấu trúc thư mục tương tự cho tất cả các dự án trong tương lai. Khi được đặt trong thư mục Editor, đoạn mã bên dưới sẽ tạo một thư mục gốc trong thư mục assets trùng với biến "PROJECT_NAME". Việc này giúp tách biệt công việc của bạn khỏi các gói phần mềm của bên thứ ba.

Thư mục trống

Các thư mục trống có nguy cơ gây ra sự cố trong việc quản lý phiên bản, vì vậy hãy cố gắng chỉ tạo thư mục cho những thứ bạn thực sự cần. Với Git và Perforce, các thư mục trống sẽ bị bỏ qua theo mặc định. Nếu các thư mục dự án như vậy được thiết lập và ai đó cố gắng lưu chúng, thì thao tác sẽ không thực sự thành công cho đến khi có nội dung được đặt vào thư mục đó.

Ghi chú : Một giải pháp thường dùng là đặt một tệp “.keep” vào bên trong một thư mục trống. Như vậy là đủ để thư mục được đưa vào kho lưu trữ.

Plastic SCM có thể xử lý các thư mục trống. Plastic SCM coi các thư mục là các thực thể, mỗi thư mục đều có lịch sử phiên bản riêng.

Đây là điểm cần lưu ý khi làm việc với Unity. Unity tạo một tệp .meta cho mọi tệp trong dự án, bao gồm cả các thư mục. Với Git và Perforce, người dùng có thể dễ dàng commit file .meta cho một thư mục trống, nhưng bản thân thư mục đó sẽ không được đưa vào hệ thống kiểm soát phiên bản. Khi người dùng khác nhận được các thay đổi mới nhất, sẽ có một tệp .meta cho một thư mục không tồn tại trên máy của họ, và Unity sẽ xóa tệp .meta đó. Plastic SCM hoàn toàn tránh được vấn đề này bằng cách bao gồm cả các thư mục trống trong hệ thống kiểm soát phiên bản.

Thay đổi đối với tệp .meta

NHỮNG THAY ĐỔI ĐỐI VỚI TỆP .META KHI CÀI ĐẶT NHẬP KHẨU ĐƯỢC ĐIỀU CHỈNH TRÊN TỆP TIN

Tệp .meta

Unity tạo ra một tệp .meta cho mỗi tệp khác trong dự án, và mặc dù thông thường không nên đưa các tệp được tạo tự động vào hệ thống kiểm soát phiên bản, tệp .meta lại có một chút khác biệt. Chế độ Hiển thị Tệp Siêu Dữ liệu (Visible Meta Files) cần được bật trong cửa sổ Version Control (trừ khi bạn đang sử dụng các chế độ Plastic SCM hoặc Perforce tích hợp sẵn).

Mặc dù tệp .meta được tạo tự động, nó chứa rất nhiều thông tin về tệp mà nó liên kết. Điều này thường xảy ra với các tài sản có thiết lập nhập khẩu, chẳng hạn như họa tiết, mô hình 3D, đoạn âm thanh, v.v. Khi bạn thay đổi cài đặt nhập khẩu trên các tệp đó, các thay đổi sẽ được ghi vào tệp .meta (thay vì tệp tài nguyên ). Đó là lý do tại sao bạn cần đưa các tệp .meta vào kho lưu trữ của mình – để mọi người đều sử dụng cùng một cài đặt tệp.

Tiêu chuẩn đặt tên

Việc thống nhất các tiêu chuẩn không chỉ dừng lại ở cấu trúc thư mục dự án. Việc thiết lập một tiêu chuẩn đặt tên cụ thể cho tất cả các tài nguyên trò chơi của bạn có thể giúp nhóm của bạn dễ dàng hơn khi làm việc với các tệp của nhau.

Mặc dù không có quy chuẩn đặt tên chính thức nào cho GameObjects, hãy xem bảng trên.

Chia tài sản của bạn

Các cảnh Unity đơn lẻ, có dung lượng lớn không phù hợp cho việc cộng tác. Chia màn chơi của bạn thành nhiều cảnh nhỏ hơn để các họa sĩ và nhà thiết kế có thể cộng tác suôn sẻ trên cùng một màn chơi, đồng thời giảm thiểu nguy cơ xung đột.

Trong quá trình chạy, dự án của bạn có thể tải các cảnh theo kiểu bổ sung bằng cách sử dụng SceneManager với LoadSceneAsync, truyền tham số LoadSceneMode.Additive.

Tốt nhất nên chia nhỏ công việc thành các Prefab bất cứ khi nào có thể và tận dụng sức mạnh của các Nested Prefab. Nếu cần thực hiện thay đổi sau này, bạn có thể thay đổi Prefab thay vì toàn bộ cảnh chứa nó, để tránh xung đột với những người khác đang làm việc trên cảnh đó. Việc so sánh các thay đổi trong prefab thường dễ đọc hơn khi sử dụng hệ thống quản lý phiên bản.

Trong trường hợp xảy ra xung đột cảnh, Unity cũng có công cụ YAML (một ngôn ngữ tuần tự hóa dữ liệu dễ đọc) tích hợp sẵn được sử dụng để hợp nhất các cảnh và Prefab. Để biết thêm thông tin chi tiết, hãy xem phần "Smart merge" trong tài liệu Unity .

Cài đặt sẵn

Các thiết lập sẵn cho phép bạn tùy chỉnh trạng thái mặc định của hầu hết mọi thứ trong Inspector. Việc tạo các thiết lập sẵn cho phép bạn sao chép các thiết lập của các thành phần hoặc tài sản đã chọn, lưu chúng dưới dạng các tài sản riêng biệt, sau đó áp dụng các thiết lập đó cho các mục khác sau này.

Sử dụng các thiết lập sẵn để thực thi các tiêu chuẩn hoặc áp dụng các giá trị mặc định hợp lý cho các tài sản mới. Chúng có thể giúp đảm bảo các tiêu chuẩn nhất quán trong toàn bộ nhóm của bạn, nhờ đó các thiết lập thường bị bỏ qua sẽ không ảnh hưởng đến hiệu suất dự án.

Nhấp vào biểu tượng Cài đặt sẵn ở góc trên bên phải của thành phần. Để lưu thiết lập sẵn này dưới dạng tài nguyên, hãy nhấp vào "Lưu thiết lập hiện tại vào…" rồi chọn một trong các thiết lập sẵn có để tải một tập hợp các giá trị.

Dưới đây là một số cách sử dụng cài đặt sẵn tiện dụng khác:

  • Tạo một GameObject với các thuộc tính mặc định : Kéo và thả một tài nguyên Preset vào Hierarchy để tạo một GameObject mới với thành phần tương ứng bao gồm các giá trị Preset.
  • Liên kết một loại cụ thể với một thiết lập sẵn : Trong Trình quản lý thiết lập sẵn ( Cài đặt dự án > Trình quản lý thiết lập sẵn ), hãy chỉ định một hoặc nhiều thiết lập sẵn cho mỗi loại. Khi tạo một thành phần mới, hệ thống sẽ mặc định sử dụng các giá trị cài đặt sẵn đã được chỉ định.
  • Pro hay: Tạo nhiều thiết lập sẵn cho mỗi loại và dựa vào bộ lọc để liên kết thiết lập sẵn chính xác theo tên.
  • Lưu và tải cài đặt Trình quản lý : Sử dụng các thiết lập sẵn cho cửa sổ Quản lý để có thể tái sử dụng các thiết lập đó. Ví dụ, nếu bạn dự định áp dụng lại các thẻ, lớp hoặc cài đặt vật lý tương tự, các thiết lập sẵn có thể giúp giảm thời gian thiết lập cho dự án tiếp theo của bạn.
Kịch bản hành vi mới

Tiêu chuẩn mã

Tương tự, các tiêu chuẩn lập trình giúp duy trì tính nhất quán trong công việc của nhóm, giúp các nhà phát triển dễ dàng chuyển đổi giữa các khu vực khác nhau trong dự án. Một lần nữa, không có quy tắc nào là bất biến ở đây. Bạn cần phải quyết định điều gì là tốt nhất cho đội của mình – nhưng một khi đã quyết định, hãy chắc chắn rằng bạn sẽ kiên định với quyết định đó.

Ví dụ, namespace có thể giúp tổ chức mã của bạn một cách chính xác hơn. Chúng cho phép bạn tách biệt các mô-đun bên trong dự án của mình và tránh xung đột với các tài nguyên của bên thứ ba, nơi tên lớp có thể bị lặp lại.

Ghi chú : Khi sử dụng namespace trong mã nguồn, hãy chia cấu trúc thư mục theo namespace để dễ quản lý hơn.

Nên sử dụng tiêu đề chuẩn. Việc thêm một tiêu đề chuẩn vào mẫu mã giúp bạn ghi lại mục đích của một lớp, ngày tạo ra nó, và thậm chí cả người tạo ra nó; về cơ bản, tất cả thông tin có thể dễ dàng bị mất trong lịch sử dài của một dự án, ngay cả khi sử dụng hệ thống quản lý phiên bản.

Unity sử dụng một mẫu kịch bản để đọc mỗi khi bạn tạo một MonoBehaviour mới trong dự án. Mỗi khi bạn tạo một tập lệnh hoặc shader mới, Unity sẽ sử dụng một mẫu được lưu trữ trong %EDITOR_PATH%\Data\Resources\ScriptTemplates:

  • Windows: C:\Program Files\ Unity\Editor\Data\Resources\ScriptTemplates
  • Mac: /Applications/Hub/Editor/[version]/Unity/Unity.app/Contents/ Resources/ScriptTemplates

Mẫu MonoBehaviour mặc định là mẫu này: 81-C# Script-NewBehaviourScript.cs.txt

Ngoài ra còn có các mẫu cho shader, các script hành vi khác và các định nghĩa assembly.

Đối với các mẫu kịch bản dành riêng cho dự án , tạo thư mục Assets/ScriptTemplates và sao chép các mẫu kịch bản vào thư mục này để ghi đè lên các mẫu mặc định.

Bạn cũng có thể chỉnh sửa trực tiếp các mẫu kịch bản mặc định cho tất cả các dự án, nhưng hãy nhớ sao lưu các tệp gốc trước khi thực hiện bất kỳ thay đổi nào. Mỗi phiên bản Unity đều có thư mục mẫu riêng, vì vậy khi cập nhật lên phiên bản mới, bạn cần thay thế lại các mẫu đó. Đoạn mã ví dụ bên dưới cho thấy nội dung của tệp 81-C# Script-NewBehaviourScript.cs.txt gốc.

Trong ví dụ bên dưới, có hai từ khóa có thể hữu ích:

  • #SCRIPTNAME# biểu thị tên tệp đã nhập hoặc tên tệp mặc định (ví dụ: NewBehaviourScript).
  • #NOTRIM# đảm bảo rằng dấu ngoặc vuông chứa một dòng khoảng trắng.
Kịch bản biên tập

Các tiêu chuẩn mã tiếp tục

Bạn có thể sử dụng các từ khóa của riêng mình và thay thế chúng bằng một đoạn mã Editor để triển khai phương thức OnWillCreateAsset .

Hãy sử dụng phần tiêu đề trong ví dụ kịch bản sau đây bên trong mẫu kịch bản của bạn. Bằng cách này, bất kỳ tập lệnh mới nào cũng sẽ được tạo với phần tiêu đề hiển thị ngày tạo, người dùng đã tạo và dự án mà nó thuộc về ban đầu. Điều này rất hữu ích cho việc tái sử dụng mã nguồn trong các dự án tương lai.

Bạn muốn tìm hiểu thêm?

Nếu bạn thấy thông tin này hữu ích, hãy tham khảo thêm các nguồn tài liệu khác về phương pháp tốt nhất để tổ chức dự án của bạn hoặc sách điện tử miễn phí của chúng tôi về quản lý phiên bản.