iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0

今天的這項服務可以讓你更有效的控制遊戲~


1. 簡介

RunService這項服務所控制的是關於遊戲的各項資訊,譬如說他可以判斷這項腳本 / 函式執行的位置是否為客戶端 / 伺服器端,又或者可以在每一次物理成像前 / 後連接自訂函式,這對於可以放入伺服器端跟客戶端的ModuleScript非常好用。

舉例來說,我們可以先在ModuleScript裡面新增一項函式

local module = {}

function module:DoSomething()
    print("我在做事")
end

return module

然後我們可以透過RunService來檢查呼叫此函式的腳本是否為伺服器端

local module = {}
local RunService = game:GetService("RunService")

function module:DoSomething()
    if RunService.IsServer then --檢查是否為伺服器端
        print("我在做事")
    else
        error("欸幹你不要在客戶端呼叫我啦!")
    end
end

return module

阿對了,我們沒有講到其他的輸出指令,這邊來補一下 (不要怕,三個而已)
print: 單純的輸出字串
warn: 印出橘黃色的字串
error: 印出紅色的字串,並結束程式

2. 函式

這邊列出所有可以透過RunService呼叫的函式

BindToRenderStep: 給定三個參數,(函式名稱, 優先順序, 函式內容),可以將所給予的函式在遊戲的預先載入狀態時運行,依照所給予的順序
UnbindFromRenderStep: 取消透過BindToRenderStep綁定的函式
IsClient: 回傳一項布林值,其代表所呼叫的端是否為客戶端
IsServer: 回傳一項布林值,其代表所呼叫的端是否為伺服器端
IsStudio: 回傳一項布林值,其代表是否透過Roblox Studio開啟此地點
IsRunMode: 回傳一項布林值,其代表是否透過Roblox Studio運行此地點 (你有沒有按那個運行按鈕)
IsRunning: 回傳一項布林值,其代表此地點是否正在運行


3. 事件

這邊列出所有可以透過RunService觸發的事件

Stepped: 在物理模擬完成之前的每一幀觸發
PreAnimation 在物理模擬之前、渲染後的每一幀觸發
Heartbeat: 在物理模擬完成之後的每一幀觸發
PreRender: 在物理渲染之後的每一幀觸發
PostSimulation: 跟HeartBeat一樣
PreSimulation: 跟Stepped一樣
RenderStepped: 跟PreRender一樣

總之就是把他想成一個比較嚴謹的while迴圈就好了 :>


上一篇
Day 24: TweenService
系列文
透過Roblox Studio學習Lua語言與基本程式邏輯25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言