RunService
*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.
RunService chứa các phương pháp và sự kiện quản lý thời gian cũng như quản lý ngữ cảnh mà một trải nghiệm hoặc kịch bản đang chạy.Các phương pháp như IsClient() , IsServer() và IsStudio() có thể giúp bạn xác định trong bối cảnh mã nào đang chạy.Các phương pháp này hữu ích cho ModuleScripts có thể được yêu cầu bởi cả kịch bản khách và máy chủ.Ngoài ra, IsStudio() có thể được sử dụng để thêm các hành vi đặc biệt cho kiểm tra trong Studio.
RunService cũng có các sự kiện cho phép mã của bạn tuân thủ vòng lặp khung bởi khung của Roblox, chẳng hạn như PreRender , PreAnimation , PreSimulation , PostSimulation , và Heartbeat .Chọn sự kiện thích hợp để sử dụng cho bất kỳ trường hợp nào là quan trọng, vì vậy bạn nên đọc Lịch trình nhiệm vụ để đưa ra quyết định có thông tin.
Kết quả thử nghiệm ngữ cảnh
<th><code>Class.RunService:IsStudio()|IsStudio Đã xóa</code></th><th><code>Class.RunService:IsClient()|IsClient Đã xóa</code></th><th><code>Class.RunService:IsServer()|IsServer|Là máy chủ</code></th><th><code>Class.RunService:IsEdit()|IsEdit</code></th><th><code>Class.RunService: Đang chạy()|Đang chạy</code></th><th><code>Class.RunService:IsRunMode()|IsRunMode Đã xóa</code></th></tr></thead><tbody><tr><td>Người chơi trực tiếp</td><td><code>sai</code> ></td><td><code>đúng</code> ></td><td><code>sai</code> ></td><td /><td /><td /></tr><tr><td>Máy chủ trực tiếp</td><td><code>sai</code> ></td><td><code>sai</code> ></td><td><code>đúng</code> ></td><td /><td /><td /></tr><tr><td>Chế độ chỉnh sửa</td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>giả mạo</code></td></tr><tr><td>Chỉnh sửa hợp tác</td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>giả mạo</code></td></tr><tr><td>Chế độ chạy</td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>đúng</code></td></tr><tr><td>Chế độ chơi (Client)</td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td></tr><tr><td>Chế độ chơi (Máy chủ)</td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>đúng</code></td></tr><tr><td>Kiểm tra đội (Người chơi)</td><td><code>đúng</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td></tr><tr><td>Thử nghiệm đội (Máy chủ)</td><td><code>giả mạo</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td><td><code>đúng</code></td><td><code>giả mạo</code></td></tr></tbody>
Môi trường |
---|
Tóm Tắt
Thuộc Tính
Phương Pháp
Khi được cung cấp tên chuỗi của một chức năng và ưu tiên, phương pháp này gắn chức năng vào RunService.PreRender .
Trả về xem môi trường hiện tại đang chạy trên máy khách.
Trả về xem môi trường hiện tại có ở chế độ Edit hay không.
Trả về xem liệu nút Chạy đã được nhấn để chạy mô phỏng trong Studio.
Trả về xem kinh nghiệm hiện đang chạy hay không.
Trả về xem môi trường hiện tại đang chạy trên máy chủ.
Trả về xem môi trường hiện tại đang chạy trong Studio.
Tạm dừng sự mô phỏng của trải nghiệm nếu nó đang chạy, tạm dừng vật lý và kịch bản.
Chạy mô phỏng trò chơi, chạy vật lý và kịch bản.
Ngừng mô phỏng trải nghiệm nếu nó đang chạy.
Bỏ một chức năng đã được gắn vào vòng lặp render bằng cách sử dụng RunService:BindToRenderStep() .
Sự Kiện
Bắt lửa mỗi khung, sau khi mô phỏng vật lý hoàn thành.
Bắt lửa mỗi khung, sau khi mô phỏng vật lý hoàn thành.
Bắt lửa mỗi khung, trước khi mô phỏng vật lý nhưng sau khi render.
Bắt lửa mỗi khung, trước khi khung được hiển thị.
Bắt lửa mỗi khung, trước khi mô phỏng vật lý.
Bắt lửa mỗi khung, trước khi khung được hiển thị.
Bắt lửa mỗi khung, trước khi mô phỏng vật lý.
Thuộc Tính
ClientGitHash
RunState
Phương Pháp
BindToRenderStep
Chức năng BindToRenderStep() bắt buộc một chức năng tùy chỉnh để được gọi vào một thời điểm cụ thể trong bước render.Có ba lập luận chính: name , priority , và những gì function để gọi.
Vì nó liên quan đến quá trình hiển thị của khách hàng, BindToRenderStep() chỉ có thể được gọi trên khách hàng.
Tên
Tham số name là một nhãn cho việc gắn kết và có thể được sử dụng với RunService:UnbindFromRenderStep() nếu việc gắn kết không còn cần thiết.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Gắn chức năng trên vào gắn có tên là "tempBinding"
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Bỏ gán chức năng cho "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Ưu tiên
The priority của binding là một số nguyên; nó xác định khi nào trong bước render để gọi chức năng tùy chỉnh.Con số thấp hơn này, càng sớm chức năng tùy chỉnh sẽ được gọi.Nếu hai giao diện có cùng ưu tiên, Roblox Engine sẽ ngẫu nhiên chọn một trong số chúng để chạy trước.Các kịch bản điều khiển mặc định của Roblox chạy với các ưu tiên cụ thể này:
- Nhập của người chơi: 100
- Điều khiển máy ảnh: 200 Vì tiện lợi; danh sách Enum.RenderPriority có thể được sử dụng để xác định giá trị số lẻ để đặt một giao diện.Ví dụ, để tạo một quyền gắn bó trước khi cập nhật camera mặc định, chỉ cần trừ 1 từ cấp ưu tiên máy ảnh.
Khi sử dụng Enum.RenderPriority, hãy nhớ sử dụng .Value ở cuối enum mong muốn. RunService:BindToRenderStep() sẽ không hoạt động nếu chỉ sử dụng enum riêng sở hữu.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Mã ở đây sẽ chạy trước kịch bản máy ảnh Roblox mặc định
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Chức năng tùy chỉnh và thời gian Delta
Các tham số cuối cùng ( function ) là chức năng tùy chỉnh để gọi.Chức năng này sẽ được truyền một tham số được gọi là deltaTime cho thấy bao nhiêu thời gian trôi qua giữa khởi đầu của bước render trước và khởi đầu của bước render hiện tại.
Tất cả các bản cập nhật render sẽ chờ cho đến khi mã trong bước render kết thúc.Hãy chắc chắn rằng bất kỳ mã nào được gọi bởi BindToRenderStep() chạy nhanh và hiệu quả; nếu mã mất quá nhiều thời gian, hình ảnh trải nghiệm sẽ bị xấu.
Tham Số
Nhãn cho việc gắn kết có thể được sử dụng với Unbind nếu việc gắn kết không còn cần thiết.
Ưu tiên của việc gắn kết như một số nguyên; nó xác định khi nào trong bước render để gọi chức năng tùy chỉnh.Con số thấp hơn này, càng sớm chức năng tùy chỉnh sẽ được gọi.Nếu hai giao diện có cùng ưu tiên, Roblox Engine sẽ ngẫu nhiên chọn một trong số chúng để chạy trước.
Chức năng tùy chỉnh được gắn kết.
Lợi Nhuận
Mẫu mã
This code sample moves a GuiObject in a circle within its parent object using RunService's BindToRenderStep. It defines a parametric equation in a function to help with positioning the GuiObject.
To try this code out, put a ScreenGui in the StarterGui. Inside the ScreenGui, insert a Frame with a LocalScript. Paste this code into the LocalScript, then play the game. Watch the Frame travel counterclockwise within.
local RunService = game:GetService("RunService")
-- How fast the frame ought to move
local SPEED = 2
local frame = script.Parent
frame.AnchorPoint = Vector2.new(0.5, 0.5)
-- A simple parametric equation of a circle
-- centered at (0.5, 0.5) with radius (0.5)
local function circle(t)
return 0.5 + math.cos(t) * 0.5, 0.5 + math.sin(t) * 0.5
end
-- Keep track of the current time
local currentTime = 0
local function onRenderStep(deltaTime)
-- Update the current time
currentTime = currentTime + deltaTime * SPEED
-- ...and the frame's position
local x, y = circle(currentTime)
frame.Position = UDim2.new(x, 0, y, 0)
end
-- This is just a visual effect, so use the "Last" priority
RunService:BindToRenderStep("FrameCircle", Enum.RenderPriority.Last.Value, onRenderStep)
--RunService.RenderStepped:Connect(onRenderStep) -- Also works, but not recommended
This example shows how to bind a simple function to the render step. All this function does is print how much time passed between the last render step and the current one. Note that this code will need to be in a LocalScript to run.
local RunService = game:GetService("RunService")
local function checkDelta(deltaTime)
print("Time since last render step:", deltaTime)
end
RunService:BindToRenderStep("Check delta", Enum.RenderPriority.First.Value, checkDelta)
This example uses the RunService to bind and unbind a function named printHello. First, we bind the function to the RenderStep so that fires every step. Then, after we wait 5 seconds (wait(5)), we unbind the function.
local RunService = game:GetService("RunService")
-- Step 1: Declare the function and a name
local NAME = "Print Hello"
local function printHello()
print("Hello")
end
-- Step 2: Bind the function
RunService:BindToRenderStep(NAME, Enum.RenderPriority.First.Value, printHello)
-- Step 3: Unbind the function
RunService:UnbindFromRenderStep(NAME)
IsClient
Nếu mã gọi phương pháp này đang chạy trong bối cảnh khách hàng (trong một LocalScript , trong một ModuleScript yêu cầu bởi một LocalScript , hoặc trong một Script với RunContext được đặt thành Enum.RunContext.Client ), phương pháp này sẽ trả về true .Trong tất cả các trường hợp khác, phương thức này sẽ trả về false .
Nếu phương pháp này trả về true , môi trường hiện tại có thể truy cập các tính năng chỉ dành cho khách hàng như RunService.PreRender hoặc Players.LocalPlayer .
Lợi Nhuận
Liệu môi trường hiện tại có đang chạy client hay không.
IsEdit
Phương pháp này trả về xem môi trường hiện tại đang ở chế độ "chỉnh sửa", ví dụ trong Studio khi trải nghiệm không đang chạy.
IsEdit() sẽ trả về ngược lại với IsRunning() , ngoại trừ khi mô phỏng đã bị tạm dừng, trong trường hợp đó cả hai phương pháp sẽ trả về false .
Lợi Nhuận
Xem liệu môi trường hiện tại có ở chế độ "chỉnh sửa" hay không.
IsRunMode
Phương pháp này trả về xem liệu nút Chạy đã được nhấn để chạy mô phỏng trong Studio.Nó sẽ tiếp tục trả về true nếu mô phỏng đã bị tạm dừng bằng nút Tạm dừng ; tuy nhiên, một khi nó đã bị ngừng bằng nút Dừng thì nó sẽ quay lại trả về false .
Lưu ý rằng Studio chỉ nhập chế độ "chạy" khi nút Chạy được nhấn, không phải nút Chơi .Cũng lưu ý rằng phương pháp này sẽ trả về false nếu phân tích được bắt đầu bằng cách sử dụng RunService:Run() thay vì nút Chạy .
Lợi Nhuận
Cho dù nút Chạy đã được nhấn để chạy mô phỏng trong Studio.
IsRunning
Trả về xem kinh nghiệm hiện đang chạy, có nghĩa là mô phỏng đã được thực hiện bằng cách sử dụng nút Chạy hoặc Chơi .
IsRunning() sẽ luôn luôn trả lại điều ngược lại với IsEdit() ngoại trừ khi mô phỏng đã bị tạm dừng, trong trường hợp đó cả hai phương pháp sẽ trả lại false .
Lợi Nhuận
Xem liệu trải nghiệm hiện đang chạy.
IsServer
Phương pháp này trả về xem môi trường hiện tại đang chạy trên máy chủ. Nếu mã gọi phương pháp này đang chạy trong bối cảnh máy chủ (trong một Script với RunContext được đặt thành Enum.RunContext.Server hoặc Enum.RunContext.Legacy , hoặc trong một ModuleScript yêu cầu bởi một Script ), phương pháp này sẽ trả về true .Trong tất cả các trường hợp khác, phương thức này sẽ trả về false .
Nếu chức năng này trả về true, thì môi trường hiện tại có thể truy cập các tính năng chỉ dành cho máy chủ như ServerStorage hoặc ServerScriptService .
Lợi Nhuận
Xem liệu môi trường hiện tại đang chạy trên máy chủ.
IsStudio
Phương pháp này trả về xem môi trường hiện tại đang chạy trong Studio. Nó có thể được sử dụng để bọc mã chỉ nên thực hiện khi kiểm tra trong Studio.
Lợi Nhuận
Xem liệu môi trường hiện tại đang chạy trong Studio.
Pause
Phương pháp này tạm dừng sự mô phỏng của trải nghiệm nếu nó đang chạy, tạm dừng vật lý và kịch bản.Simulation có thể được bắt đầu bằng cách sử dụng Run() hoặc nút Chạy trong Studio; khi simulation bị tạm dừng, IsRunning() sẽ trả về false .
Lợi Nhuận
Run
Phương pháp này thực hiện mô phỏng kinh nghiệm (vật lý và kịch bản).Khi mô phỏng đang chạy, IsRunning() sẽ trả về true .Tuy nhiên, IsRunMode() sẽ chỉ trả về true nếu phần mô phỏng được bắt đầu bằng nút Chạy trong Studio.
Lợi Nhuận
Stop
Phương pháp này ngăn chặn việc mô phỏng trải nghiệm nếu nó đang chạy.Khi mô phỏng bị dừng, IsRunning() sẽ trả về false và IsEdit() sẽ trả về true .
Trái ngược với nút Dừng trong Studio, gọi phương pháp này sẽ không khôi phục trải nghiệm về trạng thái nó đã ở trước khi tiến hành mô phỏng.Điều này có nghĩa là bất kỳ thay đổi nào được thực hiện cho trải nghiệm bởi mô phỏng vật lý và các kịch bản sẽ tồn tại sau khi mô phỏng kết thúc.
Lợi Nhuận
UnbindFromRenderStep
Khi được cung cấp tên của một chức năng được gửi đến BindToRenderStep(), phương pháp này sẽ bỏ gán chức năng khỏi việc gọi trong PreRender .Điều này được sử dụng để gỡ bỏ chức năng gắn kết một khi chúng không còn được cần đến, hoặc khi chúng không còn cần phải kích hoạt mỗi bước.
Nếu không có chức năng gắn bởi tên đã cho, phương pháp này không thực hiện bất kỳ hành động nào và tiếp tục mà không gây ra lỗi.
Tham Số
Tên của chức năng đang bị gỡ bỏ.
Lợi Nhuận
Sự Kiện
Heartbeat
Sự kiện Heartbeat xảy ra mỗi khung, sau khi mô phỏng vật lý hoàn thành.Argumen deltaTime cho thấy thời gian đã trôi qua kể từ khung trước.
Sự kiện này xảy ra khi hầu hết các kịch bản chạy.Nó xảy ra ở cuối mỗi khung và cũng là khi bất kỳ kịch bản chờ đợi nào được thực hiện, chẳng hạn như những kịch bản được lên lịch với thư viện task.Heartbeat được sử dụng phổ biến cho các nhiệm vụ hàng tuần, chẳng hạn như cập nhật các hệ thống trò chơi chính như hồi phục sức khỏe.
Sau bước này, động cơ gửi cập nhật tính năng và sự kiện cho máy chủ hoặc khách hàng mà sau đó được nhận như một phần của bước sao lưu nhận.
Tham Số
Thời gian (theo giây) đã trôi qua kể từ khung trước.
PostSimulation
Sự kiện PostSimulation xảy ra mỗi khung, sau khi mô phỏng vật lý hoàn thành.Argumen deltaTimeSim cho thấy thời gian mà khung hiện tại đã bước vào mô phỏng vật lý, không tính đến việc giảm tốc độ vật lý.
Sự kiện này hữu ích để thực hiện các điều chỉnh cuối cùng đối với kết quả của mô phỏng. Sau giai đoạn này, động cơ kích hoạt sự kiện Heartbeat.
Tham Số
Thời gian (theo giây) mà khung hiện tại đã bước vào mô phỏng vật lý, không tính đến việc giảm tốc vật lý.
PreAnimation
Sự kiện PreAnimation xảy ra mỗi khung, trước khi mô phỏng vật lý nhưng sau khi render.Argumen deltaTimeSim cho thấy thời gian mà khung hiện tại đã bước vào hoạt hình.
Sự kiện này hữu ích để thay đổi các đối tượng hoạt hình, chẳng hạn như điều chỉnh tốc độ hoặc ưu tiên của chúng.Khi sự kiện PreAnimation hoàn thành, động cơ tiến hành chạy các hoạt hình này, cập nhật các biến dạng chung sẽ được sử dụng sau này để cập nhật các đối tượng trong suốt quá trình mô phỏng vật lý.
Sau khi hoạt hình được bước, động cơ kích hoạt sự kiện PreSimulation.
Tham Số
Thời gian (theo giây) mà khung hiện tại có các hoạt hình bước.
PreRender
Sự kiện PreRender (thay thế cho RenderStepped) bắt lửa mỗi khung, trước khi khung được hiển thị.Argumen deltaTimeRender cho thấy thời gian đã trôi qua kể từ khung trước.
Sự kiện này cho phép bạn chạy mã và cập nhật thế giới trước khi nó được vẽ trên màn hình của người chơi.Điều này hữu ích cho các điều chỉnh cuối cùng như thay đổi vị trí đối tượng, cập nhật hoạt hình hoặc chuẩn bị hiệu ứng hình ảnh, nhưng nó nên được sử dụng tiết kiệm vì động cơ không thể bắt đầu render khung cho đến khi mã chạy trong sự kiện này đã hoàn thành thực thi.
Vì PreRender là bên khách, nó chỉ có thể được sử dụng trong LocalScript , trong ModuleScript được yêu cầu bởi một LocalScript , hoặc trong Script với RunContext được đặt thành Enum.RunContext.Client .
Sau giai đoạn PreRender, giai đoạn mô phỏng bắt đầu với sự kiện PreAnimation.
Tham Số
Thời gian (theo giây) đã trôi qua kể từ khung trước.
PreSimulation
Sự kiện PreSimulation (thay thế cho Stepped) bắt lửa mỗi khung, trước khi mô phỏng vật lý.Argumen deltaTimeSim cho thấy thời gian mà khung hiện tại sẽ thực hiện mô phỏng vật lý, không tính đến việc giảm tốc độ vật lý.
Sự kiện này hữu ích để điều chỉnh các thuộc tính như tốc độ hoặc lực ngay trước khi chúng được áp dụng làm phần của phương trình mô phỏng.Sau đó, mô phỏng sẽ chạy, có thể nhiều lần, khi các giải pháp vật lý chạy với tần suất cao hơn các hệ thống động cơ khác.Khi điều này hoàn thành, sự kiện PostSimulation được kích hoạt.
Tham Số
Thời gian (theo giây) mà khung hiện tại sẽ thực hiện mô phỏng vật lý, không tính đến việc giảm tốc độ vật lý.
RenderStepped
Bắt lửa mỗi khung, trước khi khung được hiển thị.
Ghi chú di dời
Sự kiện này đã bị thay thế bởi PreRender mà nên được sử dụng cho công việc mới.
Tham Số
Thời gian (theo giây) đã trôi qua kể từ khung trước.
Stepped
Bắt lửa mỗi khung, trước khi mô phỏng vật lý.
Ghi chú di dời
Sự kiện này đã bị thay thế bởi PreSimulation mà nên được sử dụng cho công việc mới.
Tham Số
Thời lượng (theo giây) mà RunService đã chạy trong.
Thời gian (theo giây) đã trôi qua kể từ khung trước.