Đơn vị 7 / 11

Tạo mã và tích hợp công cụ: Unity (C#) và Unreal (Blueprint/C++)

Lợi nhuận:

  • Khả năng tạo mã trò chơi đáng tin cậy, có thể biên dịch được từ trí tuệ nhân tạo bằng cách cung cấp bối cảnh công cụ, phiên bản, ngôn ngữ và kiến trúc, đồng thời tích hợp nó bằng cách đọc và hiểu mã
  • Khả năng quản lý hiệu suất dành riêng cho mã trò chơi (phân bổ trên mỗi khung hình), vòng đời công cụ và rủi ro ảo giác thông qua quá trình biên dịch, thử nghiệm và lập hồ sơ
  • Khả năng áp dụng nguyên tắc quyền chủ trì trong trò chơi nhiều người chơi và chỉ sử dụng thông tin bảo mật một cách có trách nhiệm để bảo vệ và xác minh trò chơi của chính mình.

Trò chơi là phần mềm; Cho dù nó được thiết kế tốt đến đâu, nó vẫn được triển khai bằng mã. Công cụ trò chơi là cơ sở hạ tầng giúp trò chơi chạy: Unity (công cụ được sử dụng rộng rãi được viết bằng C#) và Unreal Engine (công cụ sử dụng C++ và ngôn ngữ kịch bản trực quan Blueprint) là hai công cụ phổ biến nhất. AI là một trong những công cụ hỗ trợ hoàn thiện nhất trong việc tạo mã: bộ điều khiển người chơi, hệ thống kiểm kê, máy trạng thái, lưu/tải, logic giao diện, gỡ lỗi và tái cấu trúc (tái cấu trúc mã mà không phá vỡ hành vi của nó). Nhưng mã trò chơi có những cạm bẫy riêng: hiệu suất (tốc độ khung hình), vòng đời công cụ, bảo mật nhiều người chơi. Trong phần này, bạn sẽ học cách sử dụng AI một cách an toàn và hiệu quả trong mã trò chơi.

Nguyên tắc quan trọng: bối cảnh công cụ và phiên bản

Nếu AI không biết nó đang viết cho công cụ và phiên bản nào, nó sẽ tạo ra một API nhầm lẫn, lỗi thời hoặc không tồn tại. Vì vậy, hãy cung cấp ngữ cảnh về công cụ, phiên bản, ngôn ngữ và kiến ​​trúc trong mỗi dấu nhắc mã. "Phong trào viết người chơi cho Unity" còn yếu; "Unity 2022.3, C#, Hệ thống đầu vào mới, chuyển động vật lý dựa trên Rigidbody" rất mạnh mẽ. Chỉ định xem bạn muốn Blueprint hay C++ trong Unreal và phiên bản bạn đang sử dụng.

Luồng mã an toàn từng bước:

  1. Đưa ra bối cảnh (động cơ, phiên bản, ngôn ngữ, kiến ​​trúc hiện tại, các ràng buộc).
  2. Muốn nó nhỏ và xác định (một thành phần, không phải toàn bộ hệ thống).
  3. Đọc và hiểu mã (hiểu chức năng của nó từng dòng một; đừng đặt mã mà bạn không hiểu).
  4. Xây dựng và thử nghiệm (chạy trên động cơ; hồ sơ - đo lường hiệu suất).
  5. Tái cấu trúc và tích hợp (phù hợp với tiêu chuẩn dự án).
Mẹo: Khi yêu cầu AI cung cấp mã, hãy nói "giải thích bằng nhận xét". Mục tiêu của bạn là hiểu mã; Đưa mã AI mà bạn không hiểu vào một dự án sẽ tích lũy những khoản nợ không thể giải quyết được. Đồng thời yêu cầu mã theo từng đoạn nhỏ, có thể kiểm tra được: Thay vì hệ thống 500 dòng, thành phần 30-50 dòng thực hiện một công việc được xác định duy nhất vừa dễ xác minh vừa dễ tích hợp.

Bẫy dành riêng cho mã trò chơi

Hiệu suất. Mã trò chơi chạy hơn 30-60 lần mỗi giây. AI có thể đưa các hoạt động tốn kém (cấp phát bộ nhớ, tra cứu, thao tác chuỗi) vào vòng Cập nhật chạy ở mỗi khung hình; điều này làm giảm tốc độ khung hình. Lập hồ sơ các mã quan trọng về hiệu suất và đưa ra các ràng buộc về AI như "chạy trên mọi khung hình, không phân bổ".

Vòng đời của động cơ. AI đôi khi nhầm lẫn khi gọi các phương thức đặc biệt, chẳng hạn như Awake/Start/Update trong Unity, BeginPlay/Tick trong Unreal. Bắt lỗi vòng đời bằng cách kiểm tra.

Bảo mật nhiều người chơi. Đây là vấn đề quan trọng nhất về CNTT/bảo mật. Không bao giờ tin tưởng ứng dụng khách trong nhiều người chơi: ứng dụng khách trên máy tính của người chơi có thể bị thao túng để gian lận. Xác minh trạng thái quan trọng như điểm, hư hỏng, tiền trên máy chủ (máy chủ có thẩm quyền). Kiểm soát mã mạng do AI tạo ra theo nguyên tắc này; Nếu AI đã tạo ra lỗ hổng tin cậy của khách hàng, hãy khắc phục nó. Chỉ sử dụng thông tin này để bảo vệ và xác minh lối chơi của chính bạn; Truy cập trái phép hoặc gian lận trên máy chủ của người khác là bất hợp pháp và phi đạo đức.

Thận trọng: Mã do AI tạo ra có thể chứa các lỗ hổng (thiếu xác thực đầu vào, độ tin cậy của ứng dụng khách, thao tác lưu tệp). Đừng mù quáng chấp nhận mã; Thực hiện đánh giá bảo mật, đặc biệt là mạng, tính kinh tế và mã lưu.

Nợ kiến ​​trúc và bảo trì

AI tạo ra các chức năng riêng lẻ một cách nhanh chóng; Nhưng kiến ​​trúc của một trò chơi—các hệ thống được phân chia như thế nào, chúng giao tiếp với nhau như thế nào, nơi lưu trữ dữ liệu—là một quyết định lâu dài và nó thuộc về con người. Nếu bạn yêu cầu AI "viết toàn bộ kho, chiến đấu và hệ thống lưu cùng nhau", bạn sẽ có được một cuộn sợi đang hoạt động nhưng được liên kết chặt chẽ, khó bảo trì và không thể mở rộng. Thay vào đó, bạn thiết kế kiến ​​trúc, sử dụng AI để đưa vào các thành phần nhỏ với giao diện xác định. Kiến trúc tốt tạo nên sự khác biệt khi trò chơi phát triển: những quyết định tồi sẽ quay trở lại một năm sau đó do nợ kỹ thuật làm trì hoãn mọi tính năng mới.

Một nguồn nợ bảo trì khác là mã được đưa vào dự án mà không được hiểu. Một hệ thống được viết bởi AI có thể hoạt động được ngày nay; Nhưng sáu tháng sau bạn phải thay nó và không ai nhớ họ đã làm gì, khoản nợ sẽ chuyển thành tiền lãi. Đó là lý do tại sao có hai nguyên tắc rất cần thiết: đọc và hiểu mã trong thời gian sản xuất và yêu cầu làm rõ các nhận xét từ AI. Theo nguyên tắc chung, đừng đưa bất kỳ mã AI nào vào dự án của bạn mà bạn không thể tự viết lại hoặc ít nhất là giải thích từng dòng một. AI mang lại tốc độ; Kỷ luật của bạn mang lại sự bền vững.

ba trường hợp nhỏ

Trường hợp 1 - Bối cảnh phát hành đã ngăn chặn lỗi. Một lập trình viên lần đầu tiên nói: "Viết khoảng không quảng cáo cho Unity"; mã đang sử dụng API cũ nên không biên dịch được. Sau đó, nó đưa ra bối cảnh "Unity 2022.3, C#, dựa trên ScriptableObject"; mã được biên dịch lần đầu tiên và phù hợp với dự án. Bối cảnh đã tiết kiệm được một giờ gỡ lỗi.

Trường hợp 2 - Bẫy hiệu suất. Trong một trò chơi, tốc độ khung hình thấp. Khi lập hồ sơ, người ta thấy rằng phương thức Cập nhật do AI tạo ra đã phân bổ một danh sách mới trong mỗi khung hình và tìm kiếm kẻ thù. Đã sửa mã có tham chiếu được lưu trong bộ nhớ đệm và cập nhật không phải bậc hai, tăng tốc độ khung hình từ 42 lên 60.

Trường hợp 3 - Đã phát hiện được lỗ hổng bảo mật. Trong trò chơi nhiều người chơi, mã do AI tạo ra đã tính toán thiệt hại trên máy khách và báo cáo cho máy chủ; điều này có thể dẫn đến gian lận (khách hàng có thể gây ra thiệt hại vô hạn). Mã đã được đặt ở chế độ độc tài của máy chủ (máy chủ tính toán thiệt hại). Cuộc kiểm toán đã ngăn chặn một vụ bê bối gian lận sau xuất bản.

Bốn mẫu có thể sao chép

1) Yêu cầu mã có ngữ cảnh:

Động cơ: Unity 2022.3. Ngôn ngữ: C#. Kiến trúc: [ví dụ: dựa trên thành phần].Ràng buộc: Phân bổ trong Cập nhật; có thể đọc và nhận xét.Task: [thành phần đơn, được xác định, ví dụ: "bộ điều khiển ký tự nhảy kép"]. Xác minh rằng mọi API bạn sử dụng đều có trong phiên bản này; Nếu bạn không chắc chắn, hãy cho tôi biết.

2) Giải thích/đánh giá mã:

Giải thích từng dòng mã sau và viết (1) chức năng của nó, (2) các vấn đề về hiệu suất có thể xảy ra (phân bổ trên mỗi khung, tìm kiếm tốn kém), (3) các lỗi có thể xảy ra, (4) đề xuất cải tiến. Mã: [dán]

3) Kiểm tra bảo mật nhiều người chơi:

Kiểm tra mã nhiều người chơi sau để đảm bảo an toàn. Cụ thể: những nơi mà máy khách được tin cậy, trạng thái quan trọng cần được xác minh trên máy chủ (thiệt hại, điểm, tiền), thiếu xác thực đầu vào. Đề xuất khắc phục để khiến máy chủ trở nên độc tài. Đây chỉ là để bảo vệ trò chơi của riêng tôi. Mã: [dán]

4) Công cụ tái cấu trúc tập trung vào hồ sơ hiệu suất:

Mã này chạy trên mọi khung hình và giảm tốc độ khung hình: [code].Tìm phân bổ, tra cứu tốn kém và các hoạt động theo từng khung hình không cần thiết; Tối ưu hóa mà không làm gián đoạn hành vi với bộ nhớ đệm và các bản cập nhật ít thường xuyên hơn. Giải thích những thay đổi.

Dấu nhắc yếu / Dấu nhắc mạnh

Dấu nhắc yếu:

Viết hệ thống lưu trong Unity.

Không có phiên bản, định dạng, phạm vi dữ liệu, bảo mật; Kết quả là chung chung và rủi ro.

Lời nhắc mạnh mẽ:

Động cơ: Unity 2022.3, C#. Nhiệm vụ: Hệ thống lưu/tải dựa trên JSON. Cần lưu: vị trí người chơi, kho đồ, tiến trình. Ràng buộc: quản lý lỗi chống hỏng tập tin; Thêm kiểm tra tính toàn vẹn (băm) vào tệp lưu để ngăn chặn gian lận bằng cách người chơi dễ dàng thay đổi nó. Nhận xét mã và xác minh rằng mỗi API đều ở phiên bản này.

Phiên bản, phạm vi, xử lý lỗi và kiểm tra tính toàn vẹn sẽ làm cứng đầu ra.

Bảng ngữ cảnh công cụ/ngôn ngữ

động cơ

ngôn ngữ

Những gì bạn phải cung cấp cho AI

đặc biệt chú ý

đoàn kết

C#

Phiên bản, Hệ thống đầu vào/vật lý

Cập nhật phân bổ, vòng đời

không có thật

bản thiết kế

Phiên bản, bối cảnh nút

Giới hạn logic trực quan

không có thật

C++

Phiên bản, cấu trúc mô-đun

Bộ nhớ, GC, macro

nhiều người chơi

cả hai

mô hình mạng

Chủ nghĩa độc đoán của người thuyết trình

Những lỗi thường gặp

  • Không chỉ định công cụ/phiên bản. Nó xuất phát từ API lỗi thời hoặc bị lỗi thời.
  • Tin tưởng vào mã mà không hiểu nó. Nợ không thể duy trì được tích lũy.
  • Không đo lường hiệu suất. Việc phân bổ từng khung hình sẽ âm thầm giảm tốc độ khung hình.
  • Tin tưởng vào khách hàng. Có một lỗ hổng gian lận trong phần chơi mạng.
  • Muốn toàn bộ hệ thống cùng một lúc. Mảnh nhỏ, có thể kiểm tra được sẽ an toàn hơn.

Tóm lại

AI là một trợ thủ đắc lực trong mã trò chơi, nhưng nó đòi hỏi phải có công cụ, phiên bản và bối cảnh kiến trúc. Đừng đưa nó vào một dự án mà không đọc và hiểu mã, biên dịch và kiểm tra nó cũng như kiểm tra hiệu suất và bảo mật. Duy trì chủ nghĩa độc tài của máy chủ trong chế độ nhiều người chơi và chỉ sử dụng thông tin bảo mật cho mục đích phòng thủ và xác minh.

Nhiệm vụ ứng dụng

Chọn một thành phần nhỏ (ví dụ: nhảy kép hoặc kho đồ đơn giản). Tạo mã bằng cách cung cấp công cụ và phiên bản với mẫu "yêu cầu mã có ngữ cảnh". Sau đó, loại bỏ rủi ro về hiệu suất và lỗi bằng cách xem xét cùng một mã với mẫu "Mô tả/đánh giá mã". Biên dịch và kiểm tra mã trong động cơ.

danh sách kiểm tra

  • [ ] Tôi đã đưa ra bối cảnh về động cơ, phiên bản, ngôn ngữ và kiến ​​trúc.
  • [ ] Tôi đã đọc và hiểu mã; Tôi muốn nó có bình luận.
  • [ ] Tôi đã biên soạn và thử nghiệm nó trong động cơ và đo hiệu suất.
  • [ ] Tôi đã kiểm tra bảo mật trong mã mạng/nền kinh tế/lưu.
  • [ ] Tôi chỉ sử dụng thông tin bảo mật để bảo vệ trò chơi của riêng mình.