Roblox cho các nhà phát triển Unity

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

Trang này chứa thông tin để giúp các nhà phát triển Unity có kinh nghiệm bắt đầu với Roblox, bao gồm định hướng cơ bản, so sánh khái niệm và những khác biệt chính giữa hai nền tảng.

Định hướng

Giao diện người dùng Unity với đánh dấu để hiển thị các cửa sổ và bảng khác nhau. Giao diện người dùng Roblox Studio với đánh dấu để hiển thị các cửa sổ và bảng khác nhau.

Cửa sổ Hierarchy của Unity và Explorer của Roblox Studio là các cửa sổ chính để tổ chức các phần tử trong các cảnh 3D:

  • Cả hai đều cho phép bạn quản lý và tổ chức các đối tượng (ví dụ, nhân vật và tài sản môi trường).
  • Cả hai đều sử dụng cấu trúc cây cho các mối quan hệ cha-con giữa các đối tượng.

Tuy nhiên, cửa sổ Hierarchy không có cấu trúc định trước, trong khi cửa sổ Explorer có một cấu trúc nghiêm ngặt. Có thể giúp bạn nghĩ về cửa sổ Explorer như một sự kết hợp giữa cửa sổ Hierarchy và Project của Unity, với thư mục Workspace là phần tử dễ nhận biết nhất.

Tương tự, Asset Manager của Roblox Studio và Toolbox chồng chéo với cửa sổ Project của Unity. Asset Manager cho phép bạn quản lý tất cả tài sản trong trò chơi của bạn, trong khi Toolbox cho phép bạn truy cập bất kỳ tài sản nào bạn đã xuất bản. Toolbox cũng cho phép bạn tìm kiếm Creator Store để tìm tài sản từ Roblox hoặc cộng đồng, tương tự như Asset Store của Unity.

Sự khác biệt triết học

Roblox là một "động cơ mô phỏng" thay vì một động cơ trò chơi truyền thống. GameObjects của Unity và Parts của Roblox đều phục vụ như những khối xây dựng cơ bản để tạo ra các đối tượng trong một môi trường 3D, nhưng trên thực tế, hai cái này khá khác nhau:

  • Đại diện: GameObjects trong Unity là một khái niệm cấp cao hơn cho bất kỳ đối tượng nào trong một cảnh, trong khi Parts trong Roblox được thiết kế để đại diện cho các đối tượng vật lý như khối gỗ và hình cầu nhựa, thay vì hình học trừu tượng như các đối tượng nguyên thủy trong Unity.
  • Vật lý: Để thực hiện các mô phỏng vật lý trong Unity, bạn gán các thành phần như Rigidbody và Collider vào một GameObject. Trong Roblox, vật lý được tích hợp vào kiểu dữ liệu Parts; động cơ tự động xử lý các tương tác.

Bạn có thể thấy sự khác biệt ngay lập tức nếu bạn tạo một GameObject và một Part. GameObject chỉ có vị trí, xoay và tỷ lệ. Part có thông tin đó—cộng với một vật liệu và màu sắc, các giá trị cho độ phản chiếu và độ trong suốt, khối lượng và hình dạng, và nhiều hơn nữa. Biến một Part thành một thứ giống như một GameObject trống có nghĩa là loại bỏ nhiều thuộc tính tích hợp. Ngược lại, bạn có thể tạo một GameObject trông giống như một Part bằng cách thêm các thành phần MeshFilter, MeshRenderer, Collider, và Rigidbody vào nó.

Từ góc độ lập trình, GameObject tương tự nhất với Instance của Roblox, lớp cơ sở cho tất cả các lớp Roblox khác, nhưng vì bạn không (và không thể) tạo các đối tượng kiểu Instance, nên sự so sánh này không thực sự thực tiễn.

Một so sánh khác là GameObject của Unity với Model của Roblox. Các mô hình hoạt động như một container cho một tập hợp các phần liên kết với nhau theo cách mà bạn có thể thiết lập mối quan hệ cha-con giữa nhiều GameObjects trong Unity. Bạn chỉ định một trong các phần của mô hình là phần chính của nó để xác định điểm pivot. Các mô hình cũng chứa các kịch bản, hoạt ảnh, hiệu ứng âm thanh, lời nhắc, ràng buộc, bộ phát hạt, và nhiều hơn nữa.

Ví dụ, một GameObject trong Unity có thể có các thành phần cho ParticleSystem, Physics3D, SpringConstraint, và một kịch bản. Trong cửa sổ Hierarchy, bạn thấy một GameObject duy nhất có tên là SpringyFireball. Cửa sổ Inspector hiển thị tập hợp các thành phần và thuộc tính.

Trong Roblox, một mô hình SpringyFireball tương đương trong cửa sổ Explorer có thể trông như thế này:

Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

Triết lý vật lý theo mặc định của Roblox mở rộng đến quá trình xây dựng các mô hình 3D. Trong Roblox, hàn nhiều phần lại với nhau thành một cụm là một cách tuyệt vời để nhanh chóng xây dựng mọi thứ, vì Roblox coi các phần hàn là một cơ thể cứng duy nhất. Cách tiếp cận này không có sẵn trong Unity.

Thay vì sử dụng các đơn vị tiêu chuẩn cho chiều dài và khối lượng, Roblox sử dụng các đơn vị giả định gọi là studs và Roblox Mass Units (RMUs). Để biết các chuyển đổi và khuyến nghị gần đúng về đơn vị, xem Units.

Vị trí quan trọng

Các trò chơi Roblox là đa người chơi theo mặc định, vì vậy Roblox Studio bao gồm nhiều vị trí lưu trữ khác nhau với các hành vi cụ thể. Để biết thêm thông tin, xem client-server runtime và tổ chức đối tượng.

LocationDescription
WorkspaceĐại diện cho thế giới 3D của trò chơi. Có thể chạy các script 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 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 Scripts với RunContext là Client, ModuleScripts client, và 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.
ServerScriptServiceChứa các script máy chủ. Vị trí này lý tưởng cho các script cần truy cập vào chức năng hoặc đối tượng phía máy chủ, chẳng hạn như logic trò chơi và lưu trữ đám mây.
ServerStorageChứa các đối tượng phía máy chủ. Vị trí này lý tưởng cho các đối tượng lớn không cần được sao chép ngay lập tức đến 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 phía máy chủ ở đây.
StarterPlayer ⟩ StarterCharacterScriptsChứa các LocalScripts chạy khi nhân vật xuất hiện.
StarterPlayer ⟩ StarterPlayerScriptsChứa các LocalScripts 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.
StarterPackThông thườ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.

Lập trình

Roblox games support three different types of Luau scripts:

  • Client scripts

    Những script này chạy trên client, và server không có khả năng nhìn thấy hành vi của chúng. Vì lý do tương thích, những script này có thể dưới dạng LocalScripts hoặc Scripts với giá trị RunContext là Client. Client scripts thường nằm trong ReplicatedStorage, StarterPlayerScripts, hoặc StarterCharacterScripts.

  • Server scripts

    Những script này chạy trên server, và client không có khả năng nhìn thấy hành vi của chúng. Server scripts có giá trị RunContext là Server và thường nằm trong ServerScriptService, nội dung của nó không được sao chép đến client.

  • Module scripts

    Những script này là các đoạn mã có thể tái sử dụng và trả về chính xác một giá trị, thường là một hàm hoặc bảng dữ liệu (hoặc một bảng các hàm). Thay vì sao chép mã trong client và server scripts, hãy sử dụng module scripts để chia sẻ mã và dữ liệu giữa hai bên. Module scripts thường nằm trong ReplicatedStorage, nhưng có thể ở nơi khác nếu bạn muốn chia sẻ mã giữa các scripts ở cùng một bên biên giới client-server.

Unity không có khái niệm về các loại kịch bản khác nhau. Nếu bạn chọn tạo một trò chơi đa người chơi, Unity sử dụng các thư viện mạng của nó để chỉ ra khi nào một GameObject (và các kịch bản của nó) nên thuộc về máy chủ.

Trong Unity, nhiều chức năng của động cơ có sẵn thông qua các phương thức của MonoBehaviour. Ví dụ, để chạy mã trước vòng lặp render, bạn thêm mã vào phương thức Update(). Để xử lý các sự kiện va chạm vật lý, bạn thêm mã vào phương thức OnCollideEnter().

Các kịch bản Roblox có tính chất hướng sự kiện nhiều hơn. Bạn truy cập các chức năng tương tự bằng cách đăng ký với các dịch vụ và lắng nghe các cập nhật.

C# và Luau

Đối với lập trình, Unity sử dụng C#. Roblox sử dụng Luau, một ngôn ngữ lập trình được phát triển từ Lua 5.1.

So với C#, Luau có kiểu dần dần và thường có cú pháp ít chi tiết hơn. Tuy nhiên, trong các dự án lớn, kiểu dần dần có thể giới thiệu các loại lỗi mà các ngôn ngữ kiểu mạnh như C# tránh được, vì vậy hãy xem xét việc bật kiểm tra kiểu nghiêm ngặt trong các kịch bản Roblox.

Để biết các khác biệt cú pháp cơ bản giữa các ngôn ngữ lập trình, xem So sánh Luau và C#.

Mẫu mã Luau

Mẫu mã Luau sau đây minh họa cách lắng nghe đầu vào của người dùng (trong trường hợp này là phím E) và gọi các hàm bổ sung sau khi một người chơi trang bị cần câu:

local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Lấy một script mô-đun từ ReplicatedStorage trả về một hàm duy nhất
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Giả định rằng script này là con của cần câu
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Kiểm tra xem phím có đang nhấn xuống không, sau đó gọi một hàm khác
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Chỉ kích hoạt hành động khi người chơi trang bị cần câu
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Vô hiệu hóa hành động khi người chơi bỏ trang bị cần câu
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)

Kịch bản Roblox có thể tương đối ngắn gọn vì Roblox có nhiều giả định tích hợp: một Player với một nhân vật Humanoid kết nối với máy chủ và có thể trang bị Tools. Những giả định này không tồn tại trong Unity, vì vậy việc triển khai sẽ rất khác.

Tài sản

Unity và Roblox đều hỗ trợ nhập các lưới và mô hình tùy chỉnh ở định dạng .fbx. Một số loại tài sản có thể yêu cầu cấu hình và cài đặt xuất cụ thể từ phần mềm mô hình hóa bên thứ ba của bạn. Để biết thêm thông tin, xem các trang sau:

Trong Unity, các đối tượng được nhập vào thư mục Assets của bạn, hiển thị trong cửa sổ Project. Trong Roblox, các tài sản được nhập vào Workspace và vào Toolbox hoặc Asset Manager.

Roblox cũng cung cấp một plugin Blender mã nguồn mở để đơn giản hóa quy trình nhập.

Biến đổi

Các phép biến đổi của Unity và CFrames của Roblox phục vụ các mục đích tương tự trong việc đại diện cho các phép biến đổi 3D của các đối tượng:

  • Cả phép biến đổi và CFrames đều đại diện cho vị trí và độ xoay của một đối tượng trong không gian 3D. Các phép biến đổi bao gồm tỷ lệ, trong khi Roblox sử dụng thuộc tính BasePart.Size không nằm trong CFrame.
  • Cả hai đều hỗ trợ phép nhân cho các phép biến đổi phức tạp và có các phương thức tích hợp cho các thao tác khác.

Hợp tác

Trong Unity, bạn hợp tác với các hệ thống kiểm soát phiên bản tiêu chuẩn hoặc các dịch vụ trả phí như Unity Version Control.

Các tệp Roblox sống trên đám mây (mặc dù bạn có thể xuất các bản sao), vì vậy Roblox Studio cung cấp các quy trình làm việc hợp tác tích hợp cho việc chỉnh sửa đồng thời, quản lý nhóm, quyền hạn, soạn thảo kịch bản, và nhiều hơn nữa. Xem Hợp tác.

Plugin

Tương tự như các công cụ của Unity, Roblox Studio hỗ trợ plugin, có thể đơn giản hóa hoặc cung cấp cho bạn thêm quyền kiểm soát đối với các khía cạnh khác nhau của quy trình phát triển. Các plugin có sẵn trong Creator Store, giống như các tài sản, nhiều cái miễn phí.

Từ điển

UnityRobloxGhi chú
CảnhPlace
GameObjectPart hoặc ModelXem Sự khác biệt triết học.
PrefabPackage
Biến đổiCFrameCFrame không bao gồm thông tin tỷ lệ. Xem Biến đổi.
HierarchyExplorer
InspectorProperties
Cảnh 3D3D viewport
Chế độ chơi3D viewportCửa sổ xem chuyển sang chế độ chơi khi bạn thử nghiệm trò chơi của mình.
Cửa sổ dự ánAsset Manager hoặc Toolbox
Terrain InspectorTerrain Editor
Điểm xuất hiệnSpawnLocation
Bảng điều khiểnOutput
Cửa hàng tài sảnCreator Store
Lớp phủToolbar
Công cụPlugin
©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.