ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2026ǯ03·î28Æü(ÅÚ) 13:26:46ÍúÎò
¡¡¤³¤Îµ»ö¤Ç¤Ï¡¢R3 ¤Î´ðËÜŪ¤ÊƳÆþ¤«¤é¡¢ReactiveProperty(¥ê¥¢¥¯¥Æ¥£¥Ö¥×¥í¥Ñ¥Æ¥£) ¤Î»È¤¤Êý¡¢¥·¥ê¥¢¥é¥¤¥ºÂбþ¡¢¤½¤·¤Æ¥²¡¼¥à¤Ç¤Î¼ÂÁ©Åª¤Ê³èÍÑÎã¤Þ¤Ç²òÀ⤷¤Þ¤¹¡£
ÆÃ¤Ë R3 ¤Ç¤Ï°·¤¨¤ëÆâÍÆ¤¬ËÉ٤Ǥ¹¤¬¡¢ºÇ½é¤Ï ReactiveProperty ¤«¤éÆþ¤Ã¤Æ¡¢¤½¤Î¸å¡¢Íý²ò¤ò¿¼¤á¤Ê¤¬¤é¾¤Îµ¡Ç½¤ò¼ÂÁõ¤·¤Æ¤¤¤¯¤È¤ï¤«¤ê¤ä¤¹¤¤¤Ç¤¹¡£
¡¡R3 ¤Ï NuGet ¥Ù¡¼¥¹¤Î¥é¥¤¥Ö¥é¥ê¤Ç¤¹¡£Unity ¤Ç¤Ï°Ê²¼¤ÎÊýË¡¤ÇƳÆþ¤Ç¤¤Þ¤¹¡£
¡¡¤³¤ÎÊÕ¤ê¤Î¼ê½ç¤Ë¤Ä¤¤¤Æ¤Ï¡¢²¼µ¤Îµ»ö¤ò»²¹Í¤Ë¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
»²¹Í¥µ¥¤¥È
Qiita @toRisouP ÍÍ
¡ÚUnity¥æ¡¼¥¶¡¼¸þ¤±¡Û R3ÆþÌç Æ³ÆþÊÔ
https://qiita.com/toRisouP/items/25ab6dbf5efbbc13e...
¥µ¥µ¥ß¥Æ¥Ã¥¯ ÍÍ
¡ÚUnity¡Û¸Ä¿ÍŪ¤Ë¤è¤¯»È¤¦¥Ñ¥Ã¥±¡¼¥¸¤ÎƳÆþÊýË¡¤Þ¤È¤á¡ÚR3/UniTask/VContainer/DOTween¡Û
https://www.sasami-tech.com/unity-package-installa...
¡¡ProjectSettings ¤Î PackageManager ¤«¤é NuGet for Unity ¤òƳÆþ¤·¡¢¡ÖR3¡×¤Ç¸¡º÷¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£
¡¡ReactiveProperty(¥ê¥¢¥¯¥Æ¥£¥Ö¥×¥í¥Ñ¥Æ¥£) ¤Ï¡¢¡ÖÃͤÎÊѹ¹¤ò´Æ»ë¤Ç¤¤ëÊÑ¿ô¡×¤Ç¤¹¡£
¡¡Ä̾ï¤ÎÊÑ¿ô¤È°ã¤¤¡¢¡ÖÃͤ¬ÊѤï¤Ã¤¿½Ö´Ö¡×¤Ë¥¤¥Ù¥ó¥È¤Î¤è¤¦¤ËÄÌÃΤò¼õ¤±¼è¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
using R3;
ReactiveProperty<int> hp = new ReactiveProperty<int>(100);
// ÃÍÊѹ¹¤Î´Æ»ë
hp.Subscribe(value =>
{
Debug.Log($"HP¤¬Êѹ¹¤µ¤ì¤Þ¤·¤¿: {value}");
});
// ÃÍÊѹ¹
hp.Value = 80;
¡¡¡¡¤³¤Î½èÍý¤Î¥Ý¥¤¥ó¥È¤Ï¡¢
¡¦Value ¤òÊѹ¹¤¹¤ë¤È¼«Æ°¤ÇÄÌÃΤµ¤ì¤ë
¡¦Subscribe ¤Î½èÍý¤òµ½Ò¤¹¤ë¤³¤È¤Ç¡¢¾åµ¤ÎÄÌÃΤÇÊѹ¹¤ò´Æ»ë¤Ç¤¤ë
¡¦ÆÃ¤Ë UI ¹¹¿·¤ä¾õÂÖ´ÉÍý¤ÈÁêÀ¤¬Îɤ¤
¡¡¤³¤ÎÎã¤Ç¤¢¤ì¤Ð¡¢Hp ÊÑ¿ô¤ÎÃͤ¬ÊѲ½¤¹¤ë¤¿¤Ó¤Ë¡¢Debug.Log ¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢
¤³¤ÎÉôʬ¤ò²èÌ̹¹¿·½èÍý¤ËÊѹ¹¤¹¤ì¤Ð¡¢Hp ¤ÎÃͤ¬ÊѤï¤ë¤È¼«Æ°Åª¤Ë UI ¤¬¹¹¿·¤µ¤ì¤ë»ÅÁȤߤòºîÀ®¤Ç¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢Ä̾ï¤Ç¤¢¤ì¤Ð¡¢¡Ö¡ÊÑ¿ôÊѹ¹ ¢ª ¢UI¹¹¿·¡×¤È¡¢£²¤Ä¤Î½èÍý¤ò½ñ¤¯É¬Íפ¬¤¢¤ë½ê¤ò
¡Ö¡ÊÑ¿ôÊѹ¹ ¢ª ¼«Æ°Åª¤Ë UI¹¹¿·¡×¤È¤Ê¤ê¡¢½èÍý¤¬£±¤Ä¤Ç¤è¤¤·Á¤Ë¤Ê¤ê¤Þ¤¹¡£
ReactiveProperty<int> hp = new ReactiveProperty<int>(100); hp.Subscribe(x => Debug.Log(x));
Ãͤ¬ÊѤï¤ë¤¿¤Ó¤Ë¸Æ¤Ð¤ì¤Þ¤¹¡£
¡¡R3 ¤Ë¤Ï UniRx ƱÍÍ¡¢¥ª¥Ú¥ì¡¼¥¿¤¬ÍѰդµ¤ì¤Æ¤ª¤ê¡¢¥á¥½¥Ã¥É¥Á¥§¡¼¥ó¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢LINQ ¤Î¤è¤¦¤Ê½ñ¤¿´ÃϤǽèÍý¤ò¼ÂÁõ¤Ç¤¤Þ¤¹¡£
hp
.Where(x => x <= 0) // hp ¤ÎÃͤ¬ 0 °Ê²¼¤Ë¤Ê¤Ã¤¿¤é
.Subscribe(_ => Debug.Log("»àË´"));¡¡// ¥í¥°¤ò½Ð¤¹
¡¡¤³¤ÎÎã¤Ç¤¢¤ì¤Ð¡¢Where ¥ª¥Ú¥ì¡¼¥¿¤Ë¤è¤ê¡¢¾ò·ïÉÕ¤¤Ç¥¤¥Ù¥ó¥È¤ò¼õ¤±¼è¤ì¤Þ¤¹¡£
¡¡CombineLatest ¥ª¥Ú¥ì¡¼¥¿¤ÏÊ£¿ô¤ÎIObservable¤ò¤Þ¤È¤á¤é¤ì¤ëµ¡Ç½¤ò»ý¤Á¤Þ¤¹¡£
¤³¤Á¤é¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢Ê£¿ô¤Î ReactiveProperty ¤ò¤Þ¤È¤á¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
ReactiveProperty<int> attack = new(10);
ReactiveProperty<int> buff = new(5);
var totalAttack = attack.CombineLatest(buff, (a, b) => a + b);
totalAttack.Subscribe(x => Debug.Log($"¹ç·×¹¶·âÎÏ: {x}"));
»²¹Í¥µ¥¤¥È
Qiita @toRisouP ÍÍ
R3 ¥ª¥Ú¥ì¡¼¥¿¡¼/¥Õ¥¡¥¯¥È¥ê¡¼¥á¥½¥Ã¥É ¤Þ¤È¤á
https://qiita.com/toRisouP/items/3d045aa248824571b...
¡¡R3 ¤Ç¤Ï¡¢ReactiveProperty ¤ò¤½¤Î¤Þ¤Þ»È¤¦¤È Inspector ¤Ëɽ¼¨¤µ¤ì¤Þ¤»¤ó¤¬¡¢
SerializableReactiveProperty ¤ò»È¤¦¤³¤È¤Ç´Êñ¤Ë¥·¥ê¥¢¥é¥¤¥ºÂбþ¤¬²Äǽ¤Ç¤¹¡£
using R3;
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]
public SerializableReactiveProperty<int> Hp = new(100);
}
¡¡¤³¤ì¤À¤±¤Ç¡ÖInspector ¤ÇÃͤòÊÔ½¸²Äǽ¡ÜÃÍÊѹ¹»þ¤Ë¼«Æ°ÄÌÃΡפ¬Î¾Î©¤Ç¤¤Þ¤¹¡£
// ¼èÆÀ int hp = player.Hp.Value; // Êѹ¹ player.Hp.Value = 50;
¡¡Ä̾ï¤Î ReactiveProperty ¤ÈƱ¤¸´¶³Ð¤Ç°·¤¨¤Þ¤¹¡£
player.Hp.Subscribe(x =>
{
Debug.Log($"HP: {x}");
});
¡¡¤³¤Á¤é¤âƱ¤¸¤Ç¤¹¡£
¡¡SerializableReactiveProperty ¤Ï¥¤¥ó¥¹¥¿¥ó¥¹¤È¤·¤ÆÊÝ»ý¤µ¤ì¤ë¤¿¤á¡¢
Hp.Subscribe(...)
¡¡¤½¤Î¤Þ¤Þ°ÂÁ´¤Ë¸Æ¤Ù¤Þ¤¹¡£
public SerializableReactiveProperty<int> Hp = new(100);
¡¡¤³¤ÎÃͤ¬ Inspector ¤Ë¤âÈ¿±Ç¤µ¤ì¤Þ¤¹¡£
[CreateAssetMenu]
public class PlayerData : ScriptableObject
{
public SerializableReactiveProperty<int> hp;
}
¡¡👉 ¥Ç¡¼¥¿¶îưÀ߷פȤâÁêÀ¤¬¤è¤¤¤Ç¤¹¡£
public class Player : MonoBehaviour
{
public ReactiveProperty<int> Hp = new(100);
}
public class HpView : MonoBehaviour
{
[SerializeField] private Player player;
[SerializeField] private Text hpText;
void Start()
{
player.Hp.Subscribe(x =>
{
hpText.text = $"HP: {x}";
});
}
}
¡¡HpView ¥¯¥é¥¹¤Ç Player ¥¯¥é¥¹¤Î ReactiveProperty ¤ò¹ØÆÉ¤·¡¢Hp ¤ÎÊѲ½¤Ë¹ç¤ï¤»¤Æ¼«Æ°Åª¤Ë UI ɽ¼¨¤ò¹¹¿·¤µ¤»¤ëÊýË¡¤Ç¤¹¡£
ºÇ¤â°ìÈÌŪ¤Ç¤¢¤ê¡¢¤«¤ÄÍøÍѲÁÃͤι⤤½èÍý¤Î£±¤Ä¤Ë¤Ê¤ê¤Þ¤¹¡£
public void Damage(int value)
{
Hp.Value -= value;
}
Player ¥¯¥é¥¹
Hp
.Where(x => x <= 0)
.Subscribe(_ =>
{
Debug.Log("¥×¥ì¥¤¥ä¡¼¤¬¤ä¤é¤ì¤¿");
});
¡¡¡¦Player¡§¾õÂÖ´ÉÍý
¡¡¡¦View¡§É½¼¨¹¹¿·
¡¡👉 MVC / MVVM ¤Ë¶á¤¤¹½Â¤¤Ë¤Ê¤ë
// ½¾Íè OnHpChanged?.Invoke(); // Reactive Hp.Value = 50;
¡¡👉 ¸Æ¤Ó˺¤ì¤¬¤Ê¤¯¤Ê¤ë
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°




¥³¥á¥ó¥È¤ò¤«¤¯