Mô hình quy trình

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

ProceduralModels là một loại Model dựa trên tham số cho phép bạn xây dựng và tạo ra các đối tượng 3D bằng cách sử dụng mã. Thay vì chỉnh sửa nội dung của một mô hình một cách thủ công, bạn xác định cấu trúc của nó thông qua một module tạo và một tập hợp các thuộc tính. Khi các thuộc tính đó thay đổi, hoặc khi mô hình được thay đổi kích thước, bộ tạo tự động chạy để cập nhật mô hình.

Mô hình quy trình giúp dễ dàng hơn trong việc:

  • Điều chỉnh mô hình một cách không phá hủy bằng cách thay đổi các tham số thay vì xây dựng lại chúng. Ví dụ, thay đổi giá trị StepSize trên một cầu thang xoắn sẽ tự động tái tạo cầu thang với số bậc đã được cập nhật.
  • Tích hợp tự động với các hệ thống Studio hiện có như hoàn tác/lặp lại, Team Create, và các công cụ kéo bằng cách thực hiện một chức năng OnGenerate duy nhất.
  • Giữ cho hiệu suất cao, với các mô hình hoạt động như các đối tượng tiêu chuẩn cho đến khi các tham số của chúng thay đổi.
  • Tạo ra nội dung cả khi chỉnh sửa và khi chạy, sử dụng cùng một hệ thống trong Studio và trong trò chơi.
  • Chia sẻ các mô hình có tham số trên Creator Store, khiến tài sản trở nên linh hoạt và có thể tùy chỉnh hơn.
Ví dụ: Mô hình quy trình thêm nhiều ghế hơn khi độ rộng hoặc chiều dài của bàn tăng lên.

Chèn mô hình quy trình

Bạn có thể thêm mô hình quy trình vào trò chơi của mình theo các cách sau:

  • Chèn một đối tượng ProceduralModel vào Workspace một cách thủ công. Tùy chọn này bao gồm một nhà tạo mẫu ModuleScript để giúp bạn bắt đầu.

    Góc nhìn gần của cửa sổ Explorer. Một đối tượng Model được làm nổi bật với ba đối tượng con lồng nhau.
  • Tạo một mô hình quy trình bằng cách sử dụng Trợ lý hoặc máy chủ MCP Roblox Studio.

  • Chèn một mô hình quy trình từ Creator Store để sử dụng hoặc tùy chỉnh một mô hình có sẵn.

Để tùy chỉnh cách thức mô hình quy trình được tạo ra, bạn có thể xác định các module tạo riêng của mình.

Chức năng OnGenerate

Chức năng OnGenerate là trung tâm của mỗi ProceduralModel dưới hình thức OnGenerate(params, targetContainer).

Chức năng do nhà phát triển xác định này chịu trách nhiệm tạo ra nội dung của mô hình dựa trên các tham số được cung cấp và ghi kết quả vào container đã cho.

OnGenerate có hai trách nhiệm chính:

  • Xử lý các tham số đầu vào để xác định cấu trúc của mô hình
  • Ghi các kết quả đã tạo ra theo cấu trúc đó vào targetContainer được cung cấp

Các phần tiếp theo mô tả:

  • Khi nào và cách mà engine gọi OnGenerate
  • Cách mà engine xử lý các nội dung được ghi vào targetContainer

Các module tạo

Chức năng OnGenerate được xác định bên trong một ModuleScript được gọi là module tạo. ProceduralModel xác định module tạo nào sẽ sử dụng thông qua thuộc tính Generator của nó.

Các module tạo là các module Luau tiêu chuẩn, nhưng được engine yêu cầu trực tiếp như một phần của quá trình tạo. Chúng theo một cấu trúc được xác định và trả về một bảng với các trường tiêu chuẩn hóa.

Cấu trúc module tạo

local MyGenerator = {}
MyGenerator.Attributes = {
DoSomething = true,
AmountOfSomething = 137,
}
type Params = {
Size: Vector3,
Attributes: typeof(MyGenerator.Attributes),
Pause: (self: any) -> (),
}
function MyGenerator.OnGenerate(params: Params, targetContainer: GeneratedFolder)
end
return MyGenerator

Các trường tiêu chuẩn hóa bao gồm:

  • Attributes: Một bản đồ định nghĩa tên tham số và giá trị mặc định của chúng.
  • OnGenerate: Chức năng nhận bảng params và một targetContainer.

Bảng params bên trong OnGenerate bao gồm:

  • Attributes: Một bảng chứa các thuộc tính được định nghĩa bởi module hoặc tất cả các thuộc tính của mô hình nếu không có thuộc tính nào được chỉ định.
  • Size: Một tham số phản ánh kích thước của mô hình ở quy mô một.
  • Pause: Một phương thức cho phép việc tạo ra tạm ngừng hiệu quả trong quá trình tạo phức tạp.

Chức năng OnGenerate nên tạo ra nội dung xung quanh gốc trong targetContainer. Nó không bao giờ được sửa đổi trực tiếp cấu trúc chính của DataModel.

Các tham số

Các tham số là các đầu vào kiểm soát việc tạo ra. Điều này bao gồm thuộc tính Size tích hợp sẵn của ProceduralModel, cũng như các thuộc tính tùy chỉnh được chỉ định trong module tạo. Những tham số rõ ràng này được truyền trực tiếp đến OnGenerate. Các tham số ngầm như mã nguồn của module hoặc trạng thái sandbox cũng kích hoạt tái tạo khi thay đổi nhưng không được truyền cho OnGenerate.

Tập hợp đầy đủ các tham số bao gồm:

  • Rõ ràng:
    • Size: Định nghĩa khu vực xung quanh gốc nơi nội dung được tạo ra.
    • Attributes: Một bản đồ chứa các giá trị thuộc tính đầu vào hiện tại.
  • Ngầm:
    • Generator: Module cung cấp logic tạo ra.
    • Mã nguồn: Các thay đổi đối với mã Luau của module tạo.
    • Sandboxing: Các thay đổi đối với trạng thái sandbox của module tạo.

Hành vi tái tạo

Để duy trì hiệu suất và đơn giản hóa tương tác API, OnGenerate không được gọi ngay lập tức khi các tham số thay đổi. Thay vào đó, ProceduralModel được đánh dấu là bẩn, chỉ ra rằng việc tái tạo đang chờ xử lý. Việc tái tạo đang chờ này thường xảy ra muộn hơn trong cùng một khung hình.

Nếu việc tái tạo không thành công, trạng thái bẩn sẽ được xóa cho đến khi một thay đổi tham số khác xảy ra. Nếu một địa điểm được lưu trong khi mô hình đang bẩn, trạng thái sẽ vẫn tồn tại và mô hình sẽ được thêm vào hàng đợi tạo ra vào lần tiếp theo trò chơi được tải.

Quy trình thực thi

Khi có thời gian xử lý, engine sẽ tái tạo các mô hình bẩn bằng cách thực hiện các bước sau:

  1. Yêu cầu module tạo, tạm dừng nếu cần.
  2. Bắt đầu một luồng mới cho quá trình tạo ra.
  3. Xây dựng bảng tham số, chuẩn hóa Size theo tỷ lệ hiện tại của mô hình.
  4. Áp dụng các giá trị thuộc tính mặc định cho bất kỳ thuộc tính nào còn thiếu.
  5. Khởi tạo một GeneratedFolder tạm thời làm targetContainer.
  6. Gọi OnGenerate.
  7. Sau khi OnGenerate trả về:
    • Nếu thành công, di chuyển kết quả trong targetContainer vào ProceduralModel.
    • Nếu việc tạo ra thất bại, sử dụng một phần tử thay thế thất bại.

Nếu các tham số thay đổi một lần nữa trong khi một luồng tạo ra đang bị tạm dừng, việc tạo ra hiện tại sẽ bị hủy bỏ và khởi động lại với các tham số đã cập nhật.

Kết quả tạo ra

Đưa các kết quả đã tạo ra vào mô hình bao gồm các bước sau:

  1. Kết thúc bất kỳ luồng con nào bị rò rỉ trong quá trình tạo.
  2. Đặt vị trí các kết quả bằng PivotTo.
  3. Nếu Scale của mô hình không phải là 1, sử dụng ScaleTo để hoàn tác việc chuẩn hóa kích thước.
  4. Cha đẻ các kết quả vào GeneratedFolder của mô hình.
  5. Nếu module tạo được sandboxed, đảm bảo rằng các ModuleScripts trong kết quả không vượt quá khả năng của module tạo.
  6. Điền bất kỳ thuộc tính nào còn thiếu trên mô hình với các giá trị mặc định của chúng.
  7. Xóa trạng thái bẩn của mô hình.

Chi tiết tạo ra

Ngoài quy trình tạo ra chính, các chi tiết sau mô tả các hành vi và cân nhắc ảnh hưởng đến cách mà việc tạo ra ProceduralModel hoạt động.

Kích thước

Do việc chuẩn hóa tỷ lệ áp dụng trong quá trình tạo, ProceduralModel hỗ trợ nhiều quy trình kích thước:

  • Thay đổi thuộc tính Size tạo ra mô hình với nội dung mới.
  • Thay đổi Scale sẽ đồng nhất tỷ lệ các kết quả hiện có bằng ScaleTo.

Thời gian chờ

Như một biện pháp bảo vệ, một module tạo thực hiện quá nhiều công việc mà không tạm dừng sẽ bị chấm dứt. Nếu việc tạo ra gây ra lỗi "Thời gian chờ Kịch bản", thêm các lệnh gọi bổ sung tới parameters:Pause() để cho phép engine trì hoãn công việc còn lại sang khung hình sau.

Gọi parameters:Pause() là rất rẻ và thường trả về ngay lập tức trong quá trình thực thi generator bình thường, vì vậy nó có thể được gọi tự do tại đầu các vòng lặp mà không ảnh hưởng đến hiệu suất.

Lịch sử hoàn tác

Các kết quả đã tạo ra được nhóm lại với thay đổi tham số đã kích hoạt chúng bằng cách sử dụng các điểm kiểm tra hoàn tác. Nếu nhiều thay đổi tham số xảy ra trong cùng một khung hình, các kết quả sẽ được liên kết với điểm kiểm tra gần nhất.

Sandboxing

ProceduralModel hỗ trợ sandboxing. Tất cả các mô hình quy trình bên thứ ba bạn chèn từ Creator Store đều được sandboxed mặc định để giúp ngăn ngừa các thay đổi không mong muốn trong trò chơi của bạn.

Mã tạo chạy trong ngữ cảnh của module tạo và sử dụng trạng thái sandbox của module đó. Những cài đặt này không hiển thị theo mặc định. Để xem hoặc thay đổi chúng, thiết lập Workspace.SandboxedInstanceMode = Experimental. Điều này sẽ làm lộ ra các thuộc tính SandboxedCapabilities trên ModuleScript.

Một module tạo bị sandboxed thường yêu cầu ít nhất các khả năng sau:

  • RunServerScript (để thực thi module)
  • CreateInstances
  • Basic

Sandboxing cho ProceduralModel và module tạo của nó là độc lập với nhau. Khi áp dụng cho module tạo, sandboxing không ảnh hưởng đến các kịch bản thời gian chạy bình thường trong ProceduralModel. Điều này cho phép bạn giữ chặt khâu tạo thời gian chỉnh sửa mà không ảnh hưởng đến hành vi trong trò chơi.

Lồng ghép

ProceduralModels có thể tạo ra các ProceduralModels khác. Khi điều này xảy ra, engine xử lý cấu trúc theo chiều từ trên xuống trong cùng một bước tạo ra khi có thể, với các mô hình lồng sâu hơn được tạo ra sau cùng.

Giới hạn

  • Việc tạo ra không được hỗ trợ trong các thể hiện Actor.
  • Các mô hình không thể được chuyển đổi thành gói.
  • Các khớp được tạo ra khi sử dụng các công cụ kéo với Bề mặt Khớp được bật sẽ không được bảo tồn qua các lần tái tạo ProceduralModel.
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.