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

*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 Unreal Engine 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

Unreal's Outliner và Roblox Studio's Explorer là các cửa sổ chính để tổ chức các yếu tố trong không gian 3D.Cả hai hiển thị một cấu trúc của các đối tượng và thư mục.Tuy nhiên, Outliner có cấu trúc phẳng hơn, ít được định nghĩa hơn và chỉ hiển thị Actors .Cửa sổ Explorer có một cấu trúc sâu bên trong và nghiêm ngặt và hiển thị tất cả các đối tượng như một phần của cấp bậc, ngay cả các đối tượng sẽ được coi là thành phần trong Unreal.

Trình quản lý tài sản Roblox Studio và Hộp công cụ trùng lẫn với Trình duyệt nội dung Unreal.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.Cửa hàng Nhà sáng tạo tương tự như Thị trường Unreal Engine, nhưng bạn có thể truy cập nó trực tiếp từ giao diện người dùng Studio.

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.Unreal Actors và Roblox Parts cả hai đều phục vụ như khối xây dựng cơ bản, nhưng trong thực tế, hai cái khác nhau rất nhiều:

  • Biểu diễn : Actors trong Unreal 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ấp, 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.
  • Vật lý : Để thực hiện mô phỏng vật lý trong Unreal, bạn bật vật lý trong một số thành phần nhất định (như StaticMeshComponent ) hoặc bằng cách thêm các thành phần vào Actors , chẳng hạn như các hạn chế vật lý.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 Actor và một Part .Các Actor có thêm ít hơn 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.Hai chỉ bắt đầu chia sẻ các tính chất tương tự khi bạn so sánh một StaticMeshActor ở Unreal ( ví dụ:một khối) đến một MeshPart trong Roblox.

An example Unreal actor in the Details panel.
Bảng chi tiết về Trình biên tập siêu thực
An example Roblox part in the Properties window.

Cửa sổ Thuộc tính Studio Roblox
>

Một sự so sánh hữu ích khác là Unreal Actor đối với Roblox Model .Các mô hình hoạt động như một container cho một bộ phận kết nối với nhau theo cùng một cách mà Actors trong Unreal là container cho các thành phần.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ụ, Unreal Actor có thể có một NiagraComponent sử dụng nhiều phát xạ để đạt được hiệu ứng hình ảnh mong muốn, một khối lưới cho hình dạng, một hạn chế vật lý để thêm độ bền và một kịch bản cho tương tác của người chơi.Trong Outliner, bạn thấy một đơn Actor có tên là SpringyFireball .

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 thực tế trong Unreal.

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.

Unreal 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, bạn viết thêm mã để đồng bộ trạng thái trò chơi giữa máy chủ và khách hàng.

Trong Unreal, nhiều chức năng của động cơ được cung cấp bằng cách mở rộng các lớp tích hợp sẵn như UObject , ACharacters , ULevelUWorld trong C++ hoặc Bản thiết kế.Unreal hỗ trợ các sự kiện tùy chỉnh, nhưng nhiều lớp bao gồm các sự kiện mà động cơ tự động kích hoạt làm phần của chu kỳ sống tự nhiên của cấp độ.

So với hệ thống "ticking" không thực, các kịch bản Roblox được dẫn sự kiện nhiều hơn nhiều.Bạn truy cập chức năng tương tự của động cơ bằng cách đăng ký các dịch vụ và lắng nghe các bản cập nhật.

C++ và Luau

Đối với lập trình, Unreal 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 Luau, C++ có lợi thế về hiệu suất tổng thể, có thể hoặc có thể không liên quan đến các loại trải nghiệm bạn muốn xây dựng.Luau được gõ dần dần và 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ư ngôn ngữ lập trình C++ tránh, vì vậy hãy xem xét bật kiểm tra loại nghiêm ngặt trong các kịch bản Roblox.

Unreal cũng bao gồm một hệ thống lập trình hình ảnh được gọi là Blueprints.Roblox có các plugin bên thứ ba cung cấp chức năng tương tự, nhưng không có hệ thống tương đương được xây dựng sẵn.

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 Unreal, vì vậy việc thực hiện sẽ rất khác nhau.

Tài sản

Unreal và Roblox cả hai đề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 Unreal, tài sản nhập vào thư mục Content của bạn, có thể nhìn thấy trong Trình duyệt nội dung.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 tương tự như tính năng Gửi đến Unreal của Công cụ Blender.

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 Unreal, bạn hợp tác với các hệ thống kiểm soát phiên bản như Perforce hoặc SVN, thông thường thông qua giao diện người dùng tích hợp của Unreal.Các hệ thống kiểm soát phiên bản này sử dụng mô hình "kiểm tra" tập trung mà khóa các tập tin trong khi một người làm việc với chúng.

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ư Unreal, 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

| Không thực | Roblox | Ghi chú | | :--- | :--- | :--- | | Cấp độ | Nơi | | | Diễn viên | Part hoặc Model | Xem Sự khác biệt triết học .| | Lớp Bản vẽ | Gói | | | Biến đổi | CFrame | CFrame không bao gồm thông tin thước đo.Xem Biến hóa.| | Outliner | Cửa sổ Explorer | | | Cửa sổ chi tiết | Cửa sổ tính năng | | | Cửa sổ xem trước | Cửa sổ xem trước | | | Cửa sổ trình duyệt nội dung | Quản lý tài sản hoặc Hộp công cụ | | | Chế độ xem cảnh | Trình biên tập địa hình | | | PlayerStart | SpawnLocation | | | Nhật ký xuất | Xuất | | | Cửa hàng thị trường | Creator Store | | | Thanh menu | Thanh menu | | | Plugin | Plugin | | | Thông báo bảo mật | Bảo mật | |