RunService

Hiển Thị Bản Đã Lỗi Thời

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

Không Thể Tạo
Dịch Vụ
Không Sao Chép

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()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

  • BindToRenderStep(name : string,priority : number,function : function):()

    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 .

  • Ghi Song Song

    Trả về xem môi trường hiện tại đang chạy trên máy khách.

  • Bảo Mật Plugin
    Ghi Song Song

    Trả về xem môi trường hiện tại có ở chế độ Edit hay không.

  • Ghi Song Song

    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.

  • Ghi Song Song

    Trả về xem môi trường hiện tại đang chạy trên máy chủ.

  • Ghi Song Song

    Trả về xem môi trường hiện tại đang chạy trong Studio.

  • Pause():()
    Bảo Mật Plugin

    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.

  • Run():()
    Bảo Mật Plugin

    Chạy mô phỏng trò chơi, chạy vật lý và kịch bản.

  • Stop():()
    Bảo Mật Plugin

    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

Thuộc Tính

ClientGitHash

Chỉ Đọc
Không Sao Chép
Bảo Mật Kịch Bản Roblox
Đọc Song Song
Không Sao Chép
Bảo Mật Plugin
Đọc Song Song

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ố

name: string

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.

Giá Trị Mặc Định: ""
priority: number

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

Giá Trị Mặc Định: ""
function: function

Chức năng tùy chỉnh được gắn kết.

Giá Trị Mặc Định: ""

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.

Frame Moving in Circle

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.

RunService Custom Function

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.

Bind and Unbind a 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

Ghi Song Song

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

Bảo Mật Plugin
Ghi Song Song

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

Ghi Song Song

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

Ghi Song Song

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

Ghi Song Song

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

()
Bảo Mật Plugin

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

()
Bảo Mật Plugin

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

()
Bảo Mật Plugin

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ề falseIsEdit() 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ố

name: string

Tên của chức năng đang bị gỡ bỏ.

Giá Trị Mặc Định: ""

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ố

deltaTime: number

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ố

deltaTimeSim: number

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ố

deltaTimeSim: number

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.

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ố

deltaTimeRender: number

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ố

deltaTimeSim: number

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ố

deltaTime: number

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ố

time: number

Thời lượng (theo giây) mà RunService đã chạy trong.

deltaTime: number

Thời gian (theo giây) đã trôi qua kể từ khung trước.