Các loại script và vị trí

*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.


Đối với nhiều nhà phát triển, thách thức cơ bản trong việc thích ứng với lập trình Roblox là tầm quan trọng của vị trí tệp và thuộc tính Script.RunContext. Tùy thuộc vào loại script, vị trí trong Explorer, và ngữ cảnh chạy, các script có thể hoạt động rất khác nhau. Một số lời gọi phương thức có thể thất bại, các đối tượng trong trò chơi của bạn có thể không thể truy cập, hoặc các script có thể không chạy chút nào.

Nguyên nhân của sự phức tạp này là các trò chơi Roblox mặc định là trò chơi nhiều người chơi. Các script cần có khả năng chỉ chạy trên máy chủ, chỉ chạy trên khách, hoặc được chia sẻ giữa cả hai. Sự phát triển của nền tảng Roblox theo thời gian đã làm tình hình càng phức tạp hơn.

Các loại script

Roblox có ba loại script:

  • Script - Mã chạy trên máy chủ hoặc trên khách, tùy thuộc vào vị trí của nó và thuộc tính Script.RunContext.
  • LocalScript - Mã chạy chỉ trên khách. Không có ngữ cảnh chạy.
  • ModuleScript - Mã mà bạn có thể tái sử dụng trong các script khác. Không có ngữ cảnh chạy.

Khi bạn tạo một Script, ngữ cảnh chạy mặc định của nó là Legacy, có nghĩa là nó a) là một script phía máy chủ và b) chỉ chạy nếu nó ở trong một container máy chủ, chẳng hạn như Workspace hoặc ServerScriptService.

  • Nếu bạn thay đổi ngữ cảnh chạy của script thành Server, nó giờ đây cũng có thể chạy trong ReplicatedStorage, nhưng điều đó không được khuyến nghị. Nội dung của vị trí đó được sao chép tới khách, vì vậy đó là một vị trí không tốt cho các script phía máy chủ.
  • Nếu bạn thay đổi ngữ cảnh chạy của script thành Client, nó có thể chạy trong ReplicatedStorage. Nó cũng có thể chạy trong StarterCharacterScriptsStarterPlayerScripts. Các container khởi động được sao chép tới khách, do đó, cả script gốc bản sao đều chạy, điều này không mong muốn.

Để thay đổi ngữ cảnh chạy của một script, hãy chọn nó trong Explorer và thay đổi giá trị trong cửa sổ Properties.

Thuộc tính RunContext được chỉ định cho một Script.

Các khuyến nghị

  • Đặt các script khách vào ReplicatedStorage với RunContextClient bên cạnh các ModuleScripts chỉ dành cho khách.

    Khi gỡ lỗi trong Studio, bạn có thể nhấp vào các dòng trong cửa sổ Output và đi đến ReplicatedStorage.YourScript (vị trí ổn định của script) thay vì Players.YourName.PlayerScripts.YourScript (vị trí tạm thời mà script đã được sao chép vào lúc chạy).

  • Đặt các script máy chủ vào ServerScriptService với RunContextServer bên cạnh các ModuleScripts chỉ dành cho máy chủ.

  • Để chia sẻ mã giữa các script máy chủ và khách, hãy sử dụng ModuleScripts trong ReplicatedStorage.

  • Nếu bạn đặt các script trong mô hìnhgói, hãy chỉ định một RunContext cho mỗi script để loại bỏ sự không rõ ràng trong cách nó chạy. Việc đặt thuộc tính này một cách rõ ràng làm cho các mô hình và gói có khả năng hoạt động đúng từ nhiều vị trí khác nhau.

  • Đặt số lượng tối thiểu các script khách (chẳng hạn như một script tải) vào ReplicatedFirst với RunContextClient. Để tìm hiểu thêm, xem Thứ tự sao chép.

  • Sử dụng LocalScripts trong StarterCharacterScripts, StarterPlayerScripts, StarterGui, và StarterPack.

Vị trí script

LocationDescription
WorkspaceĐại diện cho thế giới 3D của trò chơi. Vị trí này hoạt động tốt cho các script trên máy chủ gắn trực tiếp vào các đối tượng và điều khiển hành vi của chúng.
ReplicatedFirstChứa các đối tượng được sao chép đến client trước khi bất kỳ thứ gì khác. Vị trí này lý tưởng cho tập hợp tối thiểu các đối tượng và script client cần thiết để hiển thị màn hình tải.
ReplicatedStorageChứa các đối tượng được sao chép đến cả client và server. Vị trí này lý tưởng cho ModuleScripts mà bạn muốn sử dụng trên cả server và client. LocalScripts không chạy từ vị trí này, nhưng Scripts với RunContextClient thì có.
ServerScriptServiceChứa các script trên máy chủ. Vị trí này lý tưởng cho các script cần truy cập các chức năng hoặc đối tượng bên server, chẳng hạn như logic trò chơi và lưu trữ đám mây.
ServerStorageChứa các đối tượng bên máy chủ. Vị trí này lý tưởng cho các đối tượng lớn không cần phải được sao chép ngay cho client khi họ tham gia trò chơi. Các script không chạy từ vị trí này, nhưng bạn có thể lưu trữ các ModuleScripts bên máy chủ ở đây.
StarterPlayerStarterCharacterScriptsChứa các LocalScripts chạy khi nhân vật xuất hiện.
StarterPlayerStarterPlayerScriptsChứa các LocalScripts đa năng chạy khi người chơi tham gia trò chơi.
StarterGuiChứa các phần tử GUI mà client hiển thị khi tải trò chơi. LocalScripts có thể chạy từ vị trí này. Vị trí này lý tưởng cho các script sửa đổi giao diện người dùng của trò chơi, chẳng hạn như thêm nút, menu và thông báo.
StarterPackThường chỉ chứa Tools, nhưng cũng có thể bao gồm LocalScripts để thiết lập ba lô cho người chơi.

Hình ảnh này cho thấy các vị trí trong cửa sổ Explorer có thể chứa các script khách. Hãy nhớ rằng, ReplicatedFirstReplicatedStorage có thể chứa Scripts với RunContextClient, trong khi các container Starter[] nên sử dụng LocalScripts.

Sơ đồ cho thấy các vị trí script nào chạy trên khách.

Cấu trúc dự án mẫu

Dự án tham khảo Plant cho thấy cách bạn có thể tổ chức mã của mình trong một trò chơi lớn, phức tạp.

Điều đáng chú ý là cách nó lưu trữ phần lớn mã của mình dưới dạng các ModuleScripts có thể tái sử dụng trong ReplicatedStorageServerStorage.

©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.