RunService
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
RunService には、エクスペリエンスまたはスクリプトが実行されているコンテキストを管理するための時間管理メソッドとイベント、およびエクスペリエンスまたはスクリプトの実行を管理するメソッドとイベントが含まれています。IsClient()、IsServer()、およびIsStudio()のようなメソッドは、どのコンテキストコードが実行されているかを判断するのに役立ちます。これらのメソッドは、クライアントとサーバースクリプトの両方が必要とする可能性のある ModuleScripts に便利です。さらに、IsStudio() は、In‑Studio テストの特別な動作を追加するために使用できます。
RunService には、PreRender 、PreAnimation、PreSimulation、PostSimulation、およびHeartbeatなど、コードが Roblox(ロブロックス)oblox のフレームバイフレームループに従うことを可能にするイベントも含まれます。どのケースでも使用する適切なイベントを選択することは重要であるため、タスクスケジューラー を読んで情報に基づいた決定を下す必要があります。
コンテキストテスト結果
<th><code>クラス.RunService:IsStudio()|IsStudio</code></th><th><code>クラス.RunService:IsClient()|IsClient</code></th><th><code>クラス.RunService:IsServer()|IsServer</code></th><th><code>クラス.RunService:IsEdit()|IsEdit</code></th><th><code>Class.RunService: 実行中()|実行中</code></th><th><code>クラス .RunService:IsRunMode()|IsRunMode</code></th></tr></thead><tbody><tr><td>ライブプレイヤー</td> <td><code>false</code> ></td> <td><code>true</code> ></td> <td><code>false</code> ></td><td /><td /><td /></tr><tr><td>ライブサーバー</td> <td><code>false</code> ></td> <td><code>false</code> ></td> <td><code>true</code> ></td><td /><td /><td /></tr><tr><td>編集モード</td><td><code>真</code></td><td><code>真</code></td><td><code>真</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>偽</code></td></tr><tr><td>共同編集</td><td><code>真</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>偽</code></td></tr><tr><td>実行モード</td><td><code>真</code></td><td><code>真</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>真</code></td></tr><tr><td>プレイモード (クライアント)</td><td><code>真</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>偽</code></td></tr><tr><td>プレイモード (サーバー)</td><td><code>真</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>真</code></td></tr><tr><td>チームテスト (プレイヤー)</td><td><code>真</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>偽</code></td></tr><tr><td>チームテスト (サーバー)</td><td><code>偽</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>偽</code></td><td><code>真</code></td><td><code>偽</code></td></tr></tbody>
環境 |
---|
概要
方法
機能のストリング名と優先度が指定されると、このメソッドは機能を RunService.PreRender にバインドします。
現在の環境がクライアント上で実行しているかどうかを返します。
現在の環境が Edit モードかどうかを返します。
実行 ボタンが押されて Studio でシミュレーションを実行したかどうかを返します。
現在、エクスペリエンスが実行中かどうかを返します。
現在の環境がサーバー上で実行しているかどうかを返します。
現在の環境が Studio で実行されているかどうかを返します。
実行中の場合、エクスペリエンスのシミュレーションを一時停止し、物理とスクリプトを停止します。
ゲームのシミュレーションを実行し、物理とスクリプトを実行します。
実行中の場合、エクスペリエンスのシミュレーションを停止します。
RunService:BindToRenderStep() を使用してレンダリングループにバインドされた機能を解除します。
イベント
物理シミュレーションが完了した後、すべてのフレームを発射します。
物理シミュレーションが完了した後、すべてのフレームを発射します。
物理シミュレーションの前にすべてのフレームを発射し、レンダリング後です。
フレームがレンダリングされる前に、すべてのフレームを発射します。
物理シミュレーションの前に、すべてのフレームを発射します。
フレームがレンダリングされる前に、すべてのフレームを発射します。
物理シミュレーションの前に、すべてのフレームを発射します。
プロパティ
ClientGitHash
RunState
方法
BindToRenderStep
BindToRenderStep() 関数は、レンダリングステップ中に特定の時間に呼び出されるカスタム関数をバインドします。主な引数は 3つあります:name、priority、そして呼び出すものは functionです。
クライアントのレンダリングプロセスにリンクされているため、BindToRenderStep() はクライアントでのみ呼び出すことができます。
名前
name パラメータはバインディングのラベルであり、バインディングが不要になった場合は RunService:UnbindFromRenderStep() と一緒に使用できます。
local RunService = game:GetService("RunService")
local function functionToBind() end
-- 上の関数を「tempBinding」というバインドにバインドする
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- 「tempBinding」にバインドされた関数を解除する
RunService:UnbindFromRenderStep("tempBinding")
優先度
バインディングの priority は整数で、レンダリングステップ中にカスタム関数を呼び出すタイミングを決定します。この数が低いほど、カスタム関数が呼ばれるのは早くなります。2つのバインディングが同じ優先順位を持つ場合、Roblox エンジンは最初に実行するバインディングをランダムに選択します。デフォルトの Roblox コントロールスクリプトは、次の特定の優先順位で実行します:
- プレイヤーの入力: 100
- カメラコントロール: 200 便利のために; Enum.RenderPriority 枚数を使用して、バインディングを設定する整数値を決定できます。たとえば、デフォルトのカメラアップデートの直前にバインディングを行うには、カメラの優先度レベルから 1 を差し引くだけです。
Enum.RenderPriority を使用するときは、必要な枚数の最後に .Value を使用することを忘れないでください。RunService:BindToRenderStep() は、枚数自所有だけが使用される場合は機能しません。
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- ここのコードは、デフォルトの Roblox カメラスクリプトが実行される前に実行されます
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
カスタム関数とデルタ時間
最後の引数 ( function ) は呼び出すカスタム関数です。この機能は、deltaTime というパラメータを 1つ渡され、前のレンダリングステップの開始から現在のレンダリングステップの開始までの時間を示すことができます。
すべてのレンダリング更新は、レンダリングステップのコードが終了するまで待機します。 によって呼ばれるコードがすばやくかつ効率的に実行されるようにしてください;コードが長すぎると、エクスペリエンスビジュアルが不揃いになります。
パラメータ
バインディングの整数優先度;レンダリングステップ中にカスタム関数を呼び出すタイミングを決定します。この数が低いほど、カスタム関数が呼ばれるのは早くなります。2つのバインディングが同じ優先順位を持つ場合、Roblox エンジンは最初に実行するバインディングをランダムに選択します。
バインド中のカスタム関数。
戻り値
コードサンプル
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
このメソッドを呼び出したコードがクライアントコンテキストで実行されている場合 (LocalScript 、ModuleScript に必要な LocalScript 、または Script で RunContext に設定された Enum.RunContext.Client )、このメソッドは true を返します。その他のすべての場合、このメソッドは false を返します。
このメソッドが true を返す場合、現在の環境は RunService.PreRender または Players.LocalPlayer のようなクライアント専用機能にアクセスできます。
戻り値
現在の環境がクライアントを実行中かどうか。
IsEdit
このメソッドは、現在の環境が「編集」モードにあるかどうかを返します(例えば、エクスペリエンスが実行されていないときに Studio で)。
IsEdit() は、シミュレーションが一時停止した場合を除き、IsRunning() の逆を返しますが、両方のメソッドは false を返します。
戻り値
現在の環境が「編集」モードかどうか。
IsRunMode
このメソッドは、 実行 ボタンが押されて Studio でシミュレーションを実行したかどうかを返します。シミュレーションが ボタンを使用して一時停止した場合、 一時停止 ボタンを使用して停止した後、 停止 ボタンを使用して戻るようになりますが、一度 停止 ボタンを使用して停止した後、それは 戻る に戻ります。
注: Studio は、 実行 ボタンを押すときにのみ "実行" モードに入り、 プレイ ボタンではありません。また、このメソッドは、シミュレーションが false ボタンではなく RunService:Run() を使用して開始された場合、 実行 ボタンを返すことに注意してください。
戻り値
実行 ボタンが押されて Studio でシミュレーションを実行したかどうか
IsRunning
現在、エクスペリエンスが実行中かどうかを返し、つまりシミュレーションは 実行 または プレイ ボタンを使用して実行されました。
IsRunning() は、シミュレーションが一時停止したときを除き、常に IsEdit() の逆を返しますが、その場合は両方のメソッドが false を返します。
戻り値
現在、エクスペリエンスが実行中かどうか。
IsServer
このメソッドは、現在の環境がサーバー上で実行しているかどうかを返します。このメソッドを呼び出したコードがサーバーコンテキストで実行されている場合 ( で に設定され、または または で必要な場合、または で必要な場合)、このメソッドは を返します。その他のすべての場合、このメソッドは false を返します。
この機能が true を返す場合、現在の環境は ServerStorage または ServerScriptService のようなサーバー専用機能にアクセスできます。
戻り値
現在の環境がサーバー上で実行されているかどうか。
IsStudio
このメソッドは、現在の環境が Studio で実行されているかどうかを返します。Studio でテストする際にのみ実行するコードを包むのに使用できます。
戻り値
現在の環境が Studio で実行されているかどうか。
Pause
このメソッドは、実行中の場合はエクスペリエンスのシミュレーションを一時停止し、物理とスクリプトを停止します。シミュレーションは、Run() または Studio の 実行 ボタンを使用して開始できます;シミュレーションが一時停止すると、IsRunning() が false を返します。
戻り値
Run
このメソッドは、経験のシミュレーション (物理とスクリプト) を実行します。シミュレーションが実行されているとき、IsRunning() は true を返します。しかし、IsRunMode() は、シミュレーションが Studio の true ボタンを使用して開始された場合にのみ **** を返します。
戻り値
Stop
このメソッドは、実行中の場合はエクスペリエンスのシミュレーションを停止します。シミュレーションが停止すると、IsRunning() は false を返し、IsEdit() は true を返します。
Studio の 停止 ボタンとは異なり、このメソッドを呼び出すと、シミュレーションが実行される前の状態に戻すことはできません。これは、物理シミュレーションとスクリプトによってエクスペリエンスに行われた変更は、シミュレーションが終了した後も残ることを意味します。
戻り値
UnbindFromRenderStep
BindToRenderStep() に送信された関数の名前を指定すると、このメソッドは PreRender 中に関数が呼び出されるのを解除します。これは、必要がなくなったり、すべてのステップを発射する必要がなくなったときなど、バインドされた関数を解除するために使用されます。
指定された名前にバインドされた関数がない場合、このメソッドはアクションを起動しませんし、エラーを発生させずに続行します。
パラメータ
バインド解除中の関数の名前。
戻り値
イベント
Heartbeat
Heartbeat イベントは、物理シミュレーションが完了した後、すべてのフレームで発動します。deltaTime 引数は、前のフレームから経過した時間を示します。
このイベントは、ほとんどのスクリプトが実行するときです。それはフレームの最後に発生し、予定されたスクリプトの実行など、task ライブラリでスケジュールされたもののように、待機スクリプトが実行されるときでもあります。Heartbeat は、健康再生などのコアゲームシステムの定期タスクの更新によく使用されます。
このステップの後、エンジンはプロパティの更新とイベントを、後で レプリケーション受信ステップ の一部として受信するサーバーまたはクライアントに送信します。
パラメータ
前のフレームから経過した時間 (秒)。
PostSimulation
PostSimulation イベントは、物理シミュレーションが完了した後、すべてのフレームで発動します。deltaTimeSim 引数は、現在のフレームが物理シミュレーションをステップした時間を示し、物理制限を考慮しない。
このイベントは、シミュレーションの結果を最終調整するのに便利です。このフェーズの後、エンジンは Heartbeat イベントをトリガーします。
パラメータ
現在のフレームが物理シミュレーションをステップした時間(秒)、物理制限を考慮しない。
PreAnimation
PreAnimation イベントは、物理シミュレーションの前に毎フレーム発動し、レンダリング後です。deltaTimeSim 引数は、現在のフレームがステップアニメーションを持った時間を示します。
このイベントは、アニメーションオブジェクトの速度や優先度の調整などの修正に便利です。PreAnimation イベントが完了すると、エンジンはこれらのアニメーションを実行し、後で物理シミュレーション中にオブジェクトを更新するために使用される共同変換を更新します。
アニメーションがステップされた後、エンジンは PreSimulation イベントをトリガーします。
パラメータ
現在のフレームにステップアニメーションがある時間 (秒)。
PreRender
PreRender イベント (RenderStepped の置換) は、フレームがレンダリングされる前に、すべてのフレームを発射します。deltaTimeRender 引数は、前のフレームから経過した時間を示します。
このイベントでは、プレイヤーの画面に描画される前にコードを実行し、世界を更新できます。これは、オブジェクトの位置を変更したり、アニメーションを更新したり、ビジュアル効果を準備したりといった最後の瞬間の調整に便利ですが、エンジンがこのイベントで実行されているコードを処理するまでフレームをレンダリングできないため、これはあまり使用しないでください。
As PreRender はクライアント側なので、LocalScript 、ModuleScript に必要な LocalScript 、または Script で RunContext に設定された Enum.RunContext.Client でのみ使用できます。
PreRender フェーズの後、シミュレーションフェーズは PreAnimation イベントで始まります。
パラメータ
前のフレームから経過した時間 (秒)。
PreSimulation
PreSimulation イベント (Stepped の代替) は、物理シミュレーションの前に、すべてのフレームを発射します。deltaTimeSim 引数は、現在のフレームが物理シミュレーションをステップする時間を示し、物理制限を考慮しない。
このイベントは、シミュレーションの一部として適用される前に、速度や力などのプロパティを調整するのに便利です。シミュレーションは次に実行され、物理ソリューションが他のエンジンシステムより高い頻度で実行されるため、複数回実行される可能性があります。これが完了すると、PostSimulation イベントが発動します。
パラメータ
現在のフレームが物理シミュレーションをステップする時間(秒)、物理制限を考慮しない。
RenderStepped
フレームがレンダリングされる前に、すべてのフレームを発射します。
移行ノート
このイベントは、新しい作業に使用するべき PreRender に置き換えられました。
パラメータ
前のフレームから経過した時間 (秒)。
Stepped
物理シミュレーションの前に、すべてのフレームを発射します。
移行ノート
このイベントは、新しい作業に使用するべき PreSimulation に置き換えられました。
パラメータ
RunService が実行されている期間 (秒)。
前のフレームから経過した時間 (秒)。