【Roblox】 RunServiceについて
はじめに
今回はRobloxのRunServiceについて紹介します。
Robloxバージョン:0.625.0.6250509
1. RunServiceとは
RunServiceとは、HeartbeatやRenderSteppedなどイベントにConnectすることで毎フレーム呼ばれる処理を作成できるサービスです。
また、コードがどのようなコンテキストで実行されているかを判断するフラグなどもRunServiceにはあります。
非常に便利なのでよく使う機能の1つです。
2. ループ処理
RunServiceにはいくつかイベントが用意されており、Connectをすることでメソッドを毎フレーム呼ぶことができます。
下記はHeartbeatイベントを使用する例です。
引数stepは前のフレームからの経過時間が渡されます。
local RunService = game:GetService("RunService")
RunService.Heartbeart:Connect(function(step)
-- 処理
end)
下記はよく使用するイベントの実行タイミングの違いです。
- RenderStepped:フレームがレンダリングされる前に呼ばれる。完了しない場合はレンダリング以降の処理が遅延するので注意。
- Stepped:物理シミュレーションが行われる前に呼ばれる
- Heartbeart:物理シミュレーションが完了した後に呼ばれる
またRenderSteppedに限って、クライアント側でのみ起動するので注意が必要です。
それぞれ、イベントに登録した順にメソッドが呼ばれるという保証はないです。
実行順を指定したい場合は「RunService:BindToRenderStep」を使用できます。
主にカメラの制御を行う際に使われます。
Connectは戻り値でRBXScriptConnectionを返します。
これを変数として持つことで任意のタイミングで削除できます。
下記はhpが0以下になるとHeartBeatが停止するコードです。
コード
local RunService = game:GetService("RunService")
local hp = 100
local heartBeat
heartBeat = RunService.Heartbeat:Connect(function(step)
if hp < 0 then
heartBeat:Disconnect()
end
end)
また不要になった際にDisconnectする処理はメモリリーク予防にもつながるので
しっかりと覚えておくべきです。
3. コードの実行環境を取得する
フレーム毎の処理の他に、コードがどのコンテキストで実行されているかを確認することもできます。
Roblox Studioで起動時のみ処理をしたい場合のコード
if RunService:IsStudio() then
-- Roblox Studio限定での処理
end
ゲーム中で使用する可能性があるのは下記だと思います。
- IsClient:コードの実行環境がクライアント側かどうか
- IsServer:コードの実行環境がサーバー側かどうか
- IsStudio:コードの実行環境RobloxStudioかどうか
そのほかにも編集中かどうかやゲームが実行中かなどのフラグも存在します。
プラグインの作成やコマンドバーに入力するコマンドなどで使用できます。
4.まとめ
以上RunServiceについてでした。
- ループの処理がいくつか用意されており、実行タイミングで選べる
- コードの実行環境を返すフラグが用意されており、デバッグ用の機能などの追加に役立つ
RunServiceが輝くタイミングはたくさんあると思うので、ぜひ試してみてください!
当社ではRobloxを活用したゲームの開発、 また企業の商品やサービスの認知度拡大に寄与する3Dワールドの制作など、 Robloxにおける様々な活用支援を行っております。 Robloxのコンテンツ開発をご検討されている企業様は、お気軽にご相談ください。 landho.co.jp/
Discussion