【Roblox】FusionのObserverモジュールを触ってみる Fusion編 #3

2024/08/25に公開

はじめに

今回はFusionのObserverモジュールを触ってみたので共有します。

Fusionの導入方法

https://zenn.dev/landel_tech/articles/b4d2df33bb7480

Valuesについて

https://zenn.dev/landel_tech/articles/40c5d8bc51d960

公式Reference

https://elttob.uk/Fusion/0.2/tutorials/fundamentals/observers/

Observerモジュールでできること

  • FusionValueオブジェクトの値の変更を監視するようにできる機能を付与すること
  • 監視機能の明示的終了

実装

Observerの実装について

local Fusion = require(ReplicatedStorage.Fusion)
local Value = Fusion.Value
local Observer = Fusion.Observer

local count = Value(10)
local countObserver = Observer(count)

FusionからObserverの参照をとってきてFusionValueをObserverの引数に入れるだけで完成です。

Observerとは

日本語に直訳すると観察者なのでそのままのイメージで常に特定の値を観察するというイメージです。
今回の場合は観察者(観察対象)みたいな感じになっています。

変更を検知して何かを実行する

local countDisconnect = countObserver:onChange(function()
	print("countが変更されました。: " .. tostring(count:get()))
end)

countDisconnect()

値が変更されるとObserver型が持つonChange関数のコールバックが起動します。

さらにこれらが機能しているインスタンスをDisconectすることで値の監視を止めることができます。

試しに動かしてみる実装

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Fusion = require(ReplicatedStorage.Fusion)
local Value = Fusion.Value
local Observer = Fusion.Observer


local count = Value(10)
local countObserver = Observer(count)

local countDisconnect = countObserver:onChange(function()
	print("countが変更されました。: " .. tostring(count:get()))
end)

local strings = Value("test")
local stringsObserver = Observer(strings)

local  stringsDisconnect = stringsObserver:onChange(function()
	print("Stringsが変更されました。 : " .. tostring(strings:get()))
end)

for  i = 1, 5 do
	count:set(i)
	task.wait(1)
end

for  i = 1, 5 do
	strings:set(tostring(i))
	task.wait(1)
end

print("値の監視を終了します。")

countDisconnect()
stringsDisconnect()

for  i = 1, 5 do
	count:set(i)
	strings:set(tostring(i))
	task.wait(1)
end

print("完全終了")

number型の変更とstring型の変更を検知してprint出力してくれるような実装になります。

実行

https://youtu.be/mTkzRbprR88

Landelテックブログ

Discussion