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 bao gồm thông tin để giúp các nhà phát triển Unity có kinh nghiệm bắt đầu với Roblox: hướng cơ bản, một sự so sánh khái niệm, và sự khác biệt chính giữa hai nền tảng.

Hướng dẫn Get oriented

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

  • Cả hai 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 nguyê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 được định trước, trong khi cửa sổ Explorer có cấu trúc nghiêm ngặt.Nó có thể giúp nghĩ về cửa sổ Explorer như một kết hợp của Unity's Hierarchy và Project windows, với thư mục Workspace là thành phần dễ nhận biết nhất.

Tương tự, Roblox Studio Quản lý tài sảnHộp công cụ trùng lẫn với cửa sổ dự án Unity.Quản lý tài sản cho phép bạn quản lý tất cả các tài sản trong trải nghiệm của mình, trong khi Hộp công cụ cho phép bạn truy cập bất kỳ tài sản nào bạn đã xuất bản.Hộp công cụ cũng cho phép bạn tìm kiếm Cửa hàng Nhà sáng tạo để tìm tài nguyên từ Roblox hoặc cộng đồng, giống như Cửa hàng Tài nguyên Unity.

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

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

  • Biểu 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ạt nhựa, thay vì đại diện cho địa hình trừu tượng như các đối tượng cơ bản trong Unity.
  • Vật lý : Để thực hiện mô phỏng vật lý trong Unity, bạn gắn các thành phần như RigidbodyCollider vào một GameObject .Trong Roblox, vật lý được xây dựng vào loại dữ liệu Parts ; động cơ xử lý tương tác tự động.

Bạn có thể nhìn 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.The GameObject không có gì hơn là một vị trí, xoay và thước đo.Các Part có cùng thông tin - cộng với một vật liệu và màu sắc, giá trị cho phản xạ 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 cái gì đó giống với một cái rỗng hơn GameObject có nghĩa là loại bỏ rất nhiều tính năng được tích hợp.Ngược lại, bạn có thể tạo một GameObject có trông giống như một Part bằng cách thêm MeshFilter , MeshRenderer , ColliderRigidbody thành phần vào nó.

Từ quan điểm lập trình, GameObject có nhiều điểm tương đồng nhất với Roblox Instance , 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 , so sánh không phải là đặc biệt hữu ích.

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

Ví dụ, một Unity có thể có các thành phần cho , , , và một kịch bản.Trong cửa sổ Hierarchy, bạn thấy một đơn GameObject có tên là SpringyFireball .Cửa sổ Inspector hiển thị bộ sưu tập các thành phần và tính chất.

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


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

Triết lý vật lý mặc định của Roblox mở rộng sang quá trình xây dựng mô hình 3D.Trong Roblox, hàn nhiều bộ phận với nhau thành một lắp ráp là một cách tuyệt vời để xây dựng nhanh những thứ, bởi vì Roblox xử lý các bộ phận hàn như một cơ thâncứ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ị đo tiêu chuẩn cho chiều dài và khối lượng, Roblox sử dụng các đơn vị tưởng tượng gọi là khối và đơn vị khối lượng của Roblox (RMUs).Đối với chuyển đổi và khuyến nghị chỉ số khái niệm khoảng xung quanh việc sử dụng, xem Các đơn vị.

Vấn đề vị trí

Trải nghiệm Roblox mặc định là nhiều người chơi, 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ể.Ví dụ, một kịch bản có thể chạy khi bạn đặt nó vào ReplicatedStorage , nhưng không khi bạn đặt nó vào StarterPlayerScripts .Để biết thêm thông tin, xem Chạy thời gian máy khách-máy chủTổ chức đối tượng .

Vị trí | Mô tả :--- | :--- Không gian làm việc | Biểu hiện thế giới trò chơi.Vị trí này hoạt động tốt cho các kịch bản máy chủ gắn trực tiếp vào các đối tượng và kiểm soát hành vi của chúng.ReplicatedFirst | Bao gồm các đối tượng sao chép cho khách hàng trước khi bất cứ điều gì khác.Vị trí này thích hợp cho bộ tối thiểu tuyệt đối của các đối tượng và kịch bản khách hàng cần thiết để hiển thị màn hình tải.ReplicatedStorage | Chứa các đối tượng được sao lưu cho cả khách hàng và máy chủ.Vị trí này là lý tưởng cho Class.ModuleScript\|ModuleScripts bạn muốn sử dụng trên cả máy chủ và khách hàng.Class.LocalScript\|LocalScripts không chạy từ vị trí này, nhưng Class.Script\|Scripts với một bối cảnh chạy của Client làm.ServerScriptService | Bao gồm các kịch bản máy chủ.Vị trí này thích hợp cho các kịch bản cần truy cập chức năng hoặc đối tượng bên máy chủ, chẳng hạn như logic trò chơi và kho lưu trữ đám mây.ServerStorage | Bao gồm các đối tượng bên máy chủ.Vị trí này thích hợp cho các đối tượng lớn không cần phải được sao chép ngay lập tức cho khách hàng khi họ tham gia vào một trải nghiệm.Các tập lệnh không chạy từ vị trí này, nhưng bạn có thể lưu bên máy chủ Class.ModuleScript\|ModuleScripts ở đây.StarterPlayer.StarterCharacterScripts | Bao gồm Class.LocalScript\|LocalScripts chạy khi nhân vật xuất hiện.StarterPlayer.StarterPlayerScripts | Bao gồm các kịch bản chung dụng Class.LocalScript\|LocalScripts chạy khi người chơi tham gia vào trải nghiệm.StarterGui | Bao gồm các thành phần GUI mà khách hàng hiển thị khi nó tải game.Class.LocalScript\|LocalScripts có thể chạy từ vị trí này.Vị trí này thích hợp cho các kịch bản 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à pop-up.Gói khởi động | Chủ yếu chỉ chứa Class.Tool\|Tools , nhưng cũng có thể bao gồm Class.LocalScript\|LocalScripts để thiết lập ba lô người chơi.

Lập trình

Trải nghiệm Roblox hỗ trợ ba loại kịch bản Luau khác nhau:

  • Script của khách hàng

    Các kịch bản này chạy trên máy khách, và máy chủ không có tầm nhìn vào hành vi của chúng.Vì lý do kế thừa, các kịch bản này có thể có dạng LocalScripts hoặc Scripts với giá trị RunContext của Client .Các kịch bản khách thường sống trong ReplicatedStorage , StarterPlayerScripts hoặc StarterCharacterScripts .

  • Tập lệnh máy chủ

    Các kịch bản này chạy trên máy chủ, và khách hàng không có tầm nhìn vào hành vi của chúng.Các kịch bản máy chủ có giá trị RunContext của Server và thường sống trong ServerScriptService, nội dung của nó không được sao chép cho khách hàng trò chơi.

  • Tập lệnh module

    Các kịch bản này là các mảnh mã có thể tái sử dụng trả về chính xác một giá trị, thường là một chức năng hoặc bảng (hoặc một bảng các chức năng).Thay vì sao chép mã trong các kịch bản khách và máy chủ, sử dụng kịch bản mô-đun để chia sẻ mã và dữ liệu giữa hai bên.Các kịch bản module thường sống trong ReplicatedStorage, nhưng có thể sống ở nơi khác nếu bạn muốn chia sẻ mã giữa các kịch bản trên cùng một bờ 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 nhiều người chơi, Unity sử dụng thư viện mạng của mình để chỉ ra khi nào một GameObject (và các kịch bản của nó) nên độc quyền với máy chủ.

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

Các kịch bản Roblox được dẫn bởi sự kiện nhiều hơn. Bạn truy cập chức năng tương tự bằng cách đăng ký 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 xuất phát từ Lua 5.1 .

So với C#, Luau được gõ từ từ và thường có một cú pháp ngắn hơn.Tuy nhiên, trong các dự án lớn hơn, gõ từ từ có thể giới thiệu các danh mục lỗi mạnh mẽ như C# tránh, vì vậy hãy xem xét bật kiểm tra kiểu nghiêm ngặt trong các kịch bản Roblox.

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

Ví dụ mã Luau

Ví dụ Luau mã sau đây minh họa cách thực hiện, sau khi một người chơi trang bị một cây cần câu, lắng nghe đầu vào của người dùng (trong trường hợp này, chìa khóaE ) và gọi thêm các chức năng bổ sung:


-- Nhận các dịch vụ trò chơi cần thiết
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Nhận một kịch bản module từ ReplicatedStorage trả về một chức năng duy nhất
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Định rằng kịch bản này là con của cây cần câu
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Kiểm tra xem chìa khóa đã xuống, sau đó gọi chức năng khác
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Chỉ bật hành động khi người chơi trang bị câu lục
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ỏ thanh câu cá
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)

Tập lệnh Roblox có thể khá ngắn gọn vì Roblox có nhiều định đoạt mặc định: một Player với một Humanoid nhân vật kết nối với máy chủ và có thể trang bị Tools .Những định đoạt này không tồn tại trong Unity, vì vậy việc thực hiện sẽ rất khác nhau.

Tài sản

Cả Unity và Roblox đều hỗ trợ nhập khẩu lưới và mô hình tùy chỉnh trong đị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 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 nhập vào thư mục Assets của bạn, có thể nhìn thấy trong cửa sổ Dự án.Trong Roblox, tài sản được nhập vào Không gian làm việc của bạn và vào phần Hộp công cụ hoặc Túi đồ của Ứng dụng Quản lý tài sản.

Roblox cũng cung cấp một plugin Blender mã nguồn mở để tối ưu hóa quá trình nhập.

Biến hình

biến hình của props.engine và Roblox's CFrames phục vụ các mục đích tương tự trong việc biểu diễn sự biến đổi 3D của các đối tượng:

  • Cả hai biến dạng và CFrames đại diện cho vị trí và độ xoay của một đối tượng trong không gian 3D.Biến dạng bao gồm thước đo, trong khi Roblox sử dụng một thuộc tính BasePart.Size không thuộc phần CFrame .
  • Cả hai hỗ trợ nhân lên (tức là tổng hợp) cho các biến đổi phức tạp và có các phương pháp tích hợp sẵn 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ả tiền như Unity Version Control.

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

Các plugin

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

Từ điển

| Unity | Roblox | Ghi chú | | :--- | :--- | :--- | | Cảnh | Nơi | | | GameObject | Part hoặc Model | Xem Sự khác biệt triết học .| | Prefab | Gói | | | Biến đổi | CFrame | CFrame không bao gồm thông tin thước đo.Xem Biến hóa.| | Cửa sổ cấp bậc | Cửa sổ Explorer | | | Nhà kiểm tra | Cửa sổ tính năng | | Scene view | Viewport | | | Xem trò chơi | Viewport | Cổng chuyển đổi sẽ chuyển thành cảnh trò chơi khi bạn thử nghiệm trải nghiệm của mình.| | Cửa sổ dự án | Quản lý tài sản hoặc Hộp công cụ | | | Kiểm tra địa hình | Trình biên tập địa hình | | | Điểm xuất hiện | > | | | Kiểm tra địa hình | Biên tập viên địa hình | | | Spawn điểm | > | | | Bảng điều khiển | Bảng xuất | | | Cửa hàng tài sản | Cửa hàng sáng tạo | | | Thư viện công cụ | Trình biên tập công cụ | | | Thư viện công cụ | Cửa hàng công cụ của nhà sáng lập | | | Thư viện công cụ | Trình biên tập công cụ của nhà sáng lập | | | Thư viện công cụ | Cửa hàng công cụ của nhà sáng lập | | | Thư viện công cụ | Trình biên tập công cụ của nhà sáng lập | | | Thư viện công cụ | Trình biên tập công cụ của nhà sáng lập | | | Thư viện công cụ | Trình biên tập công cụ của nhà sáng lập công cụ | Trình biên tập công cụ công của nhà sáng lập công cửa hàng công cửa hàng công cửa công cửa công cửa công cửa công cửa công cửa công cửa công cửa công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công công