Äɲ䵤줿¹Ô¤Ï¤³¤Î¿§¤Ç¤¹¡£
ºï½ü¤µ¤ì¤¿¹Ô¤Ï¤³¤Î¿§¤Ç¤¹¡£
¡¡UniRx ¤ÎÄ󶡤¹¤ë ReactiveProperty ¤ÏÂçÊѶ¯ÎϤÇÊØÍø¤Êµ¡Ç½¤Ç¤¹¤¬¡¢Ãí°Õ¤¹¤Ù¤ÅÀ¤â¤¤¤¯¤Ä¤«¤¢¤ê¤Þ¤¹¡£
¡¡ÆäËÈóƱ´ü½èÍý¤Ë¤Ê¤ì¤Ê¤¤¤¦¤Á¤Ï¡¢¥¨¥é¡¼¤Î¸¶°ø¤È¤·¤Æ ReactiveProperty ¤¬ºîÍѤ·¤Æ¤¤¤ëÉôʬ¤¬¸«¤¨¤Ë¤¯¤¯¡¢¥¨¥é¡¼²ò·è¤¬¤Ç¤¤Ë¤¯¤¤¤È¤¤¤¦Éôʬ¤â¤¢¤ê¤Þ¤¹¡£
Ê£¿ô¤Î¿Í¤¬·È¤ï¤ë¥×¥í¥¸¥§¥¯¥È¤È¤Ê¤ë¤È¡¢¤Ê¤ª¤µ¤éÈÑ»¨¤Ë¤Ê¤ê¤¬¤Á¤Ç¤¹¡£
¤Þ¤¿¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¤ÎÍý²ò¤¬¿¼¤Þ¤é¤Ê¤¤¤È¡¢¤É¤Î¥¯¥é¥¹¤Ç¹ØÆɤµ¤ì¤Æ¤¤¤Æ¡¢¤É¤Î¥¿¥¤¥ß¥ó¥°¤ÇÆ°¤¤¤Æ¤¤¤ë¤Î¤«¤Ê¤É¡¢Ä̾ï¤Î½èÍý¤ËÈæ¤Ù¤Æ¤ï¤«¤ê¤¯¤¤µóÆ°¤â¿¤¤¤Ç¤¹¡£
¡¡½èÍý¤ÎÆâÍƤò¤·¤Ã¤«¤ê¤ÈÍý²ò¤·¤¿¾å¤Ç¡¢Å¬ÀÚ¤ÊÍÑË¡¤ÇÍøÍѤ·¤Æ¤¤¤¯¤³¤È¤¬µá¤á¤é¤ì¤Þ¤¹¡£
----
*£±¡¥null ¥Á¥§¥Ã¥¯¤ÎÊýË¡
¡¡ReactiveProperty ¤Ï¡¢ÃÍ·¿¤Þ¤¿¤Ï»²¾È·¿¤Î¥Ç¡¼¥¿¤ò¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¶ñÂÎŪ¤Ë¤Ï¡¢¥¸¥§¥Í¥ê¥Ã¥¯¤ÊÀ¼Á¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¤É¤ó¤Ê·¿¤Ç¤â¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢int ¤ä float ¤Ê¤É¤ÎÃÍ·¿¤À¤±¤Ç¤Ê¤¯¡¢string ¤ä object¡¢ GameObject¡¢¼«ºî¥¯¥é¥¹¤Ê¤É¤Î»²¾È·¿¤â¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡Î㤨¤Ð¡¢ReactiveProperty<int>¤ÏÃÍ·¿¤Ç¤¢¤ë int ·¿¤ÎÃͤò¥é¥Ã¥×¤·¤Þ¤¹¤¬¡¢
ReactiveProperty<string>¤Ï»²¾È·¿¤Ç¤¢¤ë string ·¿¤ÎÃͤò¥é¥Ã¥×¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢¤½¤ì¤¾¤ì¤Î ReactiveProperty ¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¡¢¤½¤Î·¿¤Ë±þ¤¸¤¿Ãͤò»ý¤Á¤Þ¤¹¡£
----
¡¡ReactiveProperty¤¬ÃÍ·¿¤ò¥é¥Ã¥×¤¹¤ë¾ì¹ç¡¢¤½¤ÎÃͤÏnull¤Ë¤Ê¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
°ìÊý¡¢»²¾È·¿¤ò¥é¥Ã¥×¤¹¤ë¾ì¹ç¡¢¤½¤ÎÃͤÏnull¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¡¡C# ¤ÎÃÍ·¿¡Êint¡¢float¡¢bool¤Ê¤É¡Ë¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¡¢Ä̾ï¤Ï null ¥Á¥§¥Ã¥¯¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£
ÃÍ·¿¤Ï null ¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¤¿¤á¤Ç¤¹¡£(null µöÍÆ·¿¤Ç¤¢¤ë¾ì¹ç¤ò½ü¤¤Þ¤¹)
¡¡¤Ç¤¹¤¬¡¢»²¾È·¿¤Î¥×¥ê¥ß¥Æ¥£¥Ö·¿(string¡¢object ¤Ê¤É)¤Ç¤¢¤Ã¤¿¤ê¡¢GameObject ¤ä¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î·¿¡¢¼«ºî¥¯¥é¥¹¤Ê¤É¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¤Ë¤Ï¡¢null ¥Á¥§¥Ã¥¯¤¬É¬Íפˤʤê¤Þ¤¹¡£
»²¾È·¿¤ÎÊÑ¿ô¤Ï null ¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡Î㤨¤Ð¡¢ReactiveProperty<Rigidbody>¤Î¤è¤¦¤Ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î·¿¤Î¥¯¥é¥¹¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¡¢
Rigidbody ¤¬ null ¤Ç¤¢¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ReactiveProperty¤Ï»²¾È·¿¤Î¥Ç¡¼¥¿¤ò¥é¥Ã¥×¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼«ÂΤ¬ null ¤Ç¤¢¤ë¤³¤È¤â¤¢¤ë¤¿¤á¤Ç¤¹¡£
----
¡¡Ä̾ï¤ÎÊÑ¿ô¤È ReactiveProperty¤Î°ã¤¤¤Ï¡¢ReactiveProperty¤Ï''¥¯¥é¥¹''¤Ç¤¢¤ê¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ null ¤Ç¤¢¤ë²ÄǽÀ¤¬¤¢¤ëÅÀ¤Ç¤¹¡£
¤½¤Î¾ì¹ç¡¢ReactiveProperty¤Înull¥Á¥§¥Ã¥¯¤Ï¼¡¤Î¤è¤¦¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
=|PERL|
public class Test_A {
public int count;
}
public class Test_B {
public ReactiveProperty<Test_A> TestProperty = new();
void Start() {
if (TestProperty == null || TestProperty .Value == null) {
return;
}
}
}
||=
¡¡¤³¤Î¤è¤¦¤Ë¡¢TestProperty ¤¬ null ¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢
¤½¤Î¸å¤Ë TestProperty.Value ¤¬ null ¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢Àµ¤·¤¯ null ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
----
*£²¡¥CompositeDisposable ¤òÍøÍѤ·¤¿¾ì¹ç¤Î¹ØÆÉÄä»ß¤Î¥¿¥¤¥ß¥ó¥°
¡¡UniRx ¤Î½èÍý¤Ï AddTo ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¹ØÆÉÄä»ß¤ò¹Ô¤¦¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
¤¿¤À¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ê¤É¤òÊ»ÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢AddTo ¤Çɳ¤Å¤¤¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Ç˲õ¤µ¤ì¤Ê¤¤¤¿¤á¡¢¹ØÆÉÄä»ß¤¬¹Ô¤ï¤ì¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢ÊÌÅÓ¡¢Dispose ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¡¡¤½¤ÎºÝ¡¢CompositeDisposable ¤òÍøÍѤ·¤ÆÊ£¿ô¤Î UniRx ¤ä ReactiveProperty ¤ò´Æ»ë¤·¤Æ¤¤¤ë¾ì¹ç¡¢
CompositeDisposable ¤Ï°ìÅÙ Dispose ¤¹¤ë¤È''Ʊ¤¸¥¹¥È¥ê¡¼¥à¤Ç¤Ï¹ØÆɤ¬ºÆ³«¤µ¤ì¤Þ¤»¤ó''¡£
¡¡¹ØÆɽèÍý¤òºÆ³«¤µ¤»¤ëͽÄ꤬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢''Clear ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¹ØÆÉÄä»ß¤¹¤ë''¤«¡¢''ñÂΤÇÄä»ß¤Ç¤¤ë¤è¤¦¤Ë IDisposable ·¿¤òÍøÍÑ''¤·¤Þ¤·¤ç¤¦¡£
----
¡¡¥µ¥ó¥×¥ë¥³¡¼¥É¤Ç¤¹¡£
=|BOX|
using UniRx;
using UnityEngine;
/// <summary>
/// ¥é¥¤¥Õ´ÉÍýÍÑ´ðÄ쥯¥é¥¹
/// </summary>
public class LifeBase {
public class LifeBase : PoolBase, IDeathCharacter {
public ReactiveProperty<int> Hp = new();
protected int maxHp;
protected readonly CompositeDisposable disposables = new();
public CompositeDisposable Disposables { get => disposables; set => disposables.Add(value); }
protected void Dispose() {
// Dispose ¤Ç¤Ï¤Ê¤¯ Clear ¤Ç¹ØÆɤòÄä»ß¤¹¤ë
disposables.Clear();
}
protected void OnDestroy() {
Dispose();
}
}
||=
----
¡¡Hp ¤ò¹ØÆɤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢²¼µ¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
=|PERL|
private LifeBase myLife;
// Hp ¤Î¹ØÆÉ
myLife.Hp
.Subscribe(hp => Debug.Log($"hp : {hp}")
¡¡¡¡.AddTo(myLife.Disposables);
||=
¡¡AddTo ¤Î°ú¿ô¤ËÀè¤Û¤ÉºîÀ®¤·¤¿¥¯¥é¥¹Æâ¤Î CompositeDisposable ¤Î¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë¤³¤È¤Ç¹ØÆÉÄä»ß¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
----
*£³¡¥Mathf ¥¯¥é¥¹¤È¤ÎÊ»ÍÑ
¡¡Mathf ¥¯¥é¥¹¤È ReactiveProperty ¤ò°ì½ï¤ËÍøÍѤ¹¤ë¾ì¹ç¡¢¤½¤Î°ú¿ôÆâ¤Ë ReactiveProperty ¤òÍøÍѤ¹¤ë¤È''¹ØÆɽèÍý¤¬Ê£¿ô²ó''Æ°¤¤Þ¤¹¡£
¡¡Î㤨¤Ð Mathf.Clamp ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢ReactiveProperty ¤òÀ©¸ÂÃÍÆâ¤Ë¼ý¤á¤¿¤¤¾ì¹ç¡¢Clamp ¥á¥½¥Ã¥ÉÆâ¤ÇÂåÆþ½èÍý¤ò¶´¤ó¤Ç¤·¤Þ¤¦¤È
ReactiveProperty ¤Î·×»»½èÍý¤Î»þÅÀ¤Ç1²ó¹ØÆɤµ¤ì¡¢¤µ¤é¤Ë¤½¤ÎÃͤ¬ Clamp ¤ÎÀ©¸ÂÃͤòĶ¤¨¤¿¾ì¹ç¤Ë¤Ï¿ôÃͤ¬ºÆÅÙ¹¹¿·¤µ¤ì¤ë¤¿¤á¡¢
¤â¤¦1²ó¹ØÆɽèÍý¤¬Æ°¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢Í½´ü¤·¤Æ¤¤¤Ê¤¤ÃͤǤιØÆɽèÍý¤¬¹Ô¤ï¤ì¤ë²ÄǽÀ¤¬¹â¤¤¤¿¤á¡¢
¡°ìÅÙ¡¢¥í¡¼¥«¥ëÊÑ¿ô¤òºîÀ®¤·¡¢¤½¤ÎÃͤò Mathf ¥¯¥é¥¹¤ÇÀ©¸Â¤·¤Æ¤«¤é ReactiveProperty ¤ËÂåÆþ¤¹¤ë¤è¤¦¤Ë¤¹¤ë
¢¤¢¤ë¤¤¤Ï¡¢Clamp Æâ¤Ç¤Ï ReactiveProperty ¤ËÂåÆþ½èÍý¤·¤Ê¤¤(¡Ü¡á¤Ç½èÍý¤·¤Ê¤¤)¤³¤È¤Ç°ÂÁ´¤Ë±¿ÍѤǤ¤Þ¤¹¡£
=|BOX|
using UniRx;
using UnityEngine;
/// <summary>
/// ¥é¥¤¥Õ´ÉÍýÍÑ´ðÄ쥯¥é¥¹
/// </summary>
public class LifeBase : MonoBehaviour {
public ReactiveProperty<int> Hp = new();
protected int maxHp;
/// <summary>
/// ½é´üÀßÄê
/// </summary>
/// <param name="initHp"></param>
protected virtual void SetUpLife(int initHp) {
Hp.Value = initHp;
maxHp = initHp;
}
/// <summary>
/// Hp ·×»»½èÍý
/// À¸Â¸È½ÄêÉÕ
/// </summary>
/// <param name="amount"></param>
/// <returns></returns>
public virtual bool CalcLife(int amount, int effectIndex, string seType) {
¡¡¡¡¡¡¡¡// ¡¡Ý£±¡¡¥í¡¼¥«¥ëÊÑ¿ô¤Ë ReactiveProperty ¤òÂåÆþ¤·¡¢Ä¾ÀÜ·×»»¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë
int hp = Hp.Value;
// ¡¡Ý£²¡¡hp ¤Î·×»»¤ò Clamp ¤ÇÀ©¸Â¤¹¤ë¤³¤È¤Ç¡¢Value ¤Ø¤ÎÂåÆþ¤ò1²ó¤À¤±¤Ë¤¹¤ë
Hp.Value = Mathf.Clamp(hp += amount, 0, maxHp);
// ¢¤¢¤ë¤¤¤Ï¡¢¡Ü ¤Î¤ß¤Ç²Ã»»¤¹¤ë(ÂåÆþ½èÍý¤ò¶´¤Þ¤Ê¤¤)
Hp.Value = Mathf.Clamp(Hp.Value + amount, 0, maxHp);
return Hp.Value > 0;
}
}
||=
----
¡¡²¼µ¤Î¤è¤¦¤Ë½èÍý¤ò½ñ¤¯¤È¡¢Clamp ¥á¥½¥Ã¥ÉÆâ¤Ç ReactiveProperty ¤Î¹ØÆɽèÍý¤¬2²ó¤¬Æ°¤¯²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¡¡
=|PERL|
public virtual bool CalcLife(int amount, int effectIndex, string seType) {
¡¡¡¡¡¡¡¡// ReactiveProperty ¤Î·×»»¤òľÀÜ Clamp Æâ¤Ç¹Ô¤¦¤È¡¢Âè1°ú¿ô¤Î·×»»»þ¤Ë1²ó¡¢Clamp ¤ÎÀ©¸Â»þ¤Ë1²ó¡¢¹ØÆɽèÍý¤¬Æ°¤¯²ÄǽÀ¤¬¤¢¤ë
Hp.Value = Mathf.Clamp(Hp.Value += amount, 0, maxHp);
return Hp.Value > 0;
}
||=
¡¡¤³¤ì¤òÈò¤±¤ë¤è¤¦¤Ë¥³¡¼¥Ç¥£¥ó¥°¤·¤Þ¤·¤ç¤¦¡£
----
¡¡ÆäËÈóƱ´ü½èÍý¤Ë¤Ê¤ì¤Ê¤¤¤¦¤Á¤Ï¡¢¥¨¥é¡¼¤Î¸¶°ø¤È¤·¤Æ ReactiveProperty ¤¬ºîÍѤ·¤Æ¤¤¤ëÉôʬ¤¬¸«¤¨¤Ë¤¯¤¯¡¢¥¨¥é¡¼²ò·è¤¬¤Ç¤¤Ë¤¯¤¤¤È¤¤¤¦Éôʬ¤â¤¢¤ê¤Þ¤¹¡£
Ê£¿ô¤Î¿Í¤¬·È¤ï¤ë¥×¥í¥¸¥§¥¯¥È¤È¤Ê¤ë¤È¡¢¤Ê¤ª¤µ¤éÈÑ»¨¤Ë¤Ê¤ê¤¬¤Á¤Ç¤¹¡£
¤Þ¤¿¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¤ÎÍý²ò¤¬¿¼¤Þ¤é¤Ê¤¤¤È¡¢¤É¤Î¥¯¥é¥¹¤Ç¹ØÆɤµ¤ì¤Æ¤¤¤Æ¡¢¤É¤Î¥¿¥¤¥ß¥ó¥°¤ÇÆ°¤¤¤Æ¤¤¤ë¤Î¤«¤Ê¤É¡¢Ä̾ï¤Î½èÍý¤ËÈæ¤Ù¤Æ¤ï¤«¤ê¤¯¤¤µóÆ°¤â¿¤¤¤Ç¤¹¡£
¡¡½èÍý¤ÎÆâÍƤò¤·¤Ã¤«¤ê¤ÈÍý²ò¤·¤¿¾å¤Ç¡¢Å¬ÀÚ¤ÊÍÑË¡¤ÇÍøÍѤ·¤Æ¤¤¤¯¤³¤È¤¬µá¤á¤é¤ì¤Þ¤¹¡£
----
*£±¡¥null ¥Á¥§¥Ã¥¯¤ÎÊýË¡
¡¡ReactiveProperty ¤Ï¡¢ÃÍ·¿¤Þ¤¿¤Ï»²¾È·¿¤Î¥Ç¡¼¥¿¤ò¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¶ñÂÎŪ¤Ë¤Ï¡¢¥¸¥§¥Í¥ê¥Ã¥¯¤ÊÀ¼Á¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¤É¤ó¤Ê·¿¤Ç¤â¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢int ¤ä float ¤Ê¤É¤ÎÃÍ·¿¤À¤±¤Ç¤Ê¤¯¡¢string ¤ä object¡¢ GameObject¡¢¼«ºî¥¯¥é¥¹¤Ê¤É¤Î»²¾È·¿¤â¥é¥Ã¥×¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡Î㤨¤Ð¡¢ReactiveProperty<int>¤ÏÃÍ·¿¤Ç¤¢¤ë int ·¿¤ÎÃͤò¥é¥Ã¥×¤·¤Þ¤¹¤¬¡¢
ReactiveProperty<string>¤Ï»²¾È·¿¤Ç¤¢¤ë string ·¿¤ÎÃͤò¥é¥Ã¥×¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢¤½¤ì¤¾¤ì¤Î ReactiveProperty ¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¡¢¤½¤Î·¿¤Ë±þ¤¸¤¿Ãͤò»ý¤Á¤Þ¤¹¡£
----
¡¡ReactiveProperty¤¬ÃÍ·¿¤ò¥é¥Ã¥×¤¹¤ë¾ì¹ç¡¢¤½¤ÎÃͤÏnull¤Ë¤Ê¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
°ìÊý¡¢»²¾È·¿¤ò¥é¥Ã¥×¤¹¤ë¾ì¹ç¡¢¤½¤ÎÃͤÏnull¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¡¡C# ¤ÎÃÍ·¿¡Êint¡¢float¡¢bool¤Ê¤É¡Ë¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¡¢Ä̾ï¤Ï null ¥Á¥§¥Ã¥¯¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£
ÃÍ·¿¤Ï null ¤Ë¤Ê¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¤¿¤á¤Ç¤¹¡£(null µöÍÆ·¿¤Ç¤¢¤ë¾ì¹ç¤ò½ü¤¤Þ¤¹)
¡¡¤Ç¤¹¤¬¡¢»²¾È·¿¤Î¥×¥ê¥ß¥Æ¥£¥Ö·¿(string¡¢object ¤Ê¤É)¤Ç¤¢¤Ã¤¿¤ê¡¢GameObject ¤ä¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î·¿¡¢¼«ºî¥¯¥é¥¹¤Ê¤É¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¤Ë¤Ï¡¢null ¥Á¥§¥Ã¥¯¤¬É¬Íפˤʤê¤Þ¤¹¡£
»²¾È·¿¤ÎÊÑ¿ô¤Ï null ¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ë¤¿¤á¤Ç¤¹¡£
¡¡Î㤨¤Ð¡¢ReactiveProperty<Rigidbody>¤Î¤è¤¦¤Ë¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î·¿¤Î¥¯¥é¥¹¤òÀë¸À¤·¤¿ ReactiveProperty ¤Î¾ì¹ç¡¢
Rigidbody ¤¬ null ¤Ç¤¢¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ReactiveProperty¤Ï»²¾È·¿¤Î¥Ç¡¼¥¿¤ò¥é¥Ã¥×¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¼«ÂΤ¬ null ¤Ç¤¢¤ë¤³¤È¤â¤¢¤ë¤¿¤á¤Ç¤¹¡£
----
¡¡Ä̾ï¤ÎÊÑ¿ô¤È ReactiveProperty¤Î°ã¤¤¤Ï¡¢ReactiveProperty¤Ï''¥¯¥é¥¹''¤Ç¤¢¤ê¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ null ¤Ç¤¢¤ë²ÄǽÀ¤¬¤¢¤ëÅÀ¤Ç¤¹¡£
¤½¤Î¾ì¹ç¡¢ReactiveProperty¤Înull¥Á¥§¥Ã¥¯¤Ï¼¡¤Î¤è¤¦¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
=|PERL|
public class Test_A {
public int count;
}
public class Test_B {
public ReactiveProperty<Test_A> TestProperty = new();
void Start() {
if (TestProperty == null || TestProperty .Value == null) {
return;
}
}
}
||=
¡¡¤³¤Î¤è¤¦¤Ë¡¢TestProperty ¤¬ null ¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢
¤½¤Î¸å¤Ë TestProperty.Value ¤¬ null ¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢Àµ¤·¤¯ null ¥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
----
*£²¡¥CompositeDisposable ¤òÍøÍѤ·¤¿¾ì¹ç¤Î¹ØÆÉÄä»ß¤Î¥¿¥¤¥ß¥ó¥°
¡¡UniRx ¤Î½èÍý¤Ï AddTo ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¹ØÆÉÄä»ß¤ò¹Ô¤¦¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
¤¿¤À¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ê¤É¤òÊ»ÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢AddTo ¤Çɳ¤Å¤¤¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤¬Ç˲õ¤µ¤ì¤Ê¤¤¤¿¤á¡¢¹ØÆÉÄä»ß¤¬¹Ô¤ï¤ì¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢ÊÌÅÓ¡¢Dispose ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¡¡¤½¤ÎºÝ¡¢CompositeDisposable ¤òÍøÍѤ·¤ÆÊ£¿ô¤Î UniRx ¤ä ReactiveProperty ¤ò´Æ»ë¤·¤Æ¤¤¤ë¾ì¹ç¡¢
CompositeDisposable ¤Ï°ìÅÙ Dispose ¤¹¤ë¤È''Ʊ¤¸¥¹¥È¥ê¡¼¥à¤Ç¤Ï¹ØÆɤ¬ºÆ³«¤µ¤ì¤Þ¤»¤ó''¡£
¡¡¹ØÆɽèÍý¤òºÆ³«¤µ¤»¤ëͽÄ꤬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢''Clear ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¹ØÆÉÄä»ß¤¹¤ë''¤«¡¢''ñÂΤÇÄä»ß¤Ç¤¤ë¤è¤¦¤Ë IDisposable ·¿¤òÍøÍÑ''¤·¤Þ¤·¤ç¤¦¡£
----
¡¡¥µ¥ó¥×¥ë¥³¡¼¥É¤Ç¤¹¡£
=|BOX|
using UniRx;
using UnityEngine;
/// <summary>
/// ¥é¥¤¥Õ´ÉÍýÍÑ´ðÄ쥯¥é¥¹
/// </summary>
public class LifeBase {
public class LifeBase : PoolBase, IDeathCharacter {
public ReactiveProperty<int> Hp = new();
protected int maxHp;
protected readonly CompositeDisposable disposables = new();
public CompositeDisposable Disposables { get => disposables; set => disposables.Add(value); }
protected void Dispose() {
// Dispose ¤Ç¤Ï¤Ê¤¯ Clear ¤Ç¹ØÆɤòÄä»ß¤¹¤ë
disposables.Clear();
}
protected void OnDestroy() {
Dispose();
}
}
||=
----
¡¡Hp ¤ò¹ØÆɤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢²¼µ¤Î¤è¤¦¤Ë»ØÄꤷ¤Þ¤¹¡£
=|PERL|
private LifeBase myLife;
// Hp ¤Î¹ØÆÉ
myLife.Hp
.Subscribe(hp => Debug.Log($"hp : {hp}")
¡¡¡¡.AddTo(myLife.Disposables);
||=
¡¡AddTo ¤Î°ú¿ô¤ËÀè¤Û¤ÉºîÀ®¤·¤¿¥¯¥é¥¹Æâ¤Î CompositeDisposable ¤Î¥×¥í¥Ñ¥Æ¥£¤ò»ØÄꤹ¤ë¤³¤È¤Ç¹ØÆÉÄä»ß¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
----
*£³¡¥Mathf ¥¯¥é¥¹¤È¤ÎÊ»ÍÑ
¡¡Mathf ¥¯¥é¥¹¤È ReactiveProperty ¤ò°ì½ï¤ËÍøÍѤ¹¤ë¾ì¹ç¡¢¤½¤Î°ú¿ôÆâ¤Ë ReactiveProperty ¤òÍøÍѤ¹¤ë¤È''¹ØÆɽèÍý¤¬Ê£¿ô²ó''Æ°¤¤Þ¤¹¡£
¡¡Î㤨¤Ð Mathf.Clamp ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢ReactiveProperty ¤òÀ©¸ÂÃÍÆâ¤Ë¼ý¤á¤¿¤¤¾ì¹ç¡¢Clamp ¥á¥½¥Ã¥ÉÆâ¤ÇÂåÆþ½èÍý¤ò¶´¤ó¤Ç¤·¤Þ¤¦¤È
ReactiveProperty ¤Î·×»»½èÍý¤Î»þÅÀ¤Ç1²ó¹ØÆɤµ¤ì¡¢¤µ¤é¤Ë¤½¤ÎÃͤ¬ Clamp ¤ÎÀ©¸ÂÃͤòĶ¤¨¤¿¾ì¹ç¤Ë¤Ï¿ôÃͤ¬ºÆÅÙ¹¹¿·¤µ¤ì¤ë¤¿¤á¡¢
¤â¤¦1²ó¹ØÆɽèÍý¤¬Æ°¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢Í½´ü¤·¤Æ¤¤¤Ê¤¤ÃͤǤιØÆɽèÍý¤¬¹Ô¤ï¤ì¤ë²ÄǽÀ¤¬¹â¤¤¤¿¤á¡¢
¡°ìÅÙ¡¢¥í¡¼¥«¥ëÊÑ¿ô¤òºîÀ®¤·¡¢¤½¤ÎÃͤò Mathf ¥¯¥é¥¹¤ÇÀ©¸Â¤·¤Æ¤«¤é ReactiveProperty ¤ËÂåÆþ¤¹¤ë¤è¤¦¤Ë¤¹¤ë
¢¤¢¤ë¤¤¤Ï¡¢Clamp Æâ¤Ç¤Ï ReactiveProperty ¤ËÂåÆþ½èÍý¤·¤Ê¤¤(¡Ü¡á¤Ç½èÍý¤·¤Ê¤¤)¤³¤È¤Ç°ÂÁ´¤Ë±¿ÍѤǤ¤Þ¤¹¡£
=|BOX|
using UniRx;
using UnityEngine;
/// <summary>
/// ¥é¥¤¥Õ´ÉÍýÍÑ´ðÄ쥯¥é¥¹
/// </summary>
public class LifeBase : MonoBehaviour {
public ReactiveProperty<int> Hp = new();
protected int maxHp;
/// <summary>
/// ½é´üÀßÄê
/// </summary>
/// <param name="initHp"></param>
protected virtual void SetUpLife(int initHp) {
Hp.Value = initHp;
maxHp = initHp;
}
/// <summary>
/// Hp ·×»»½èÍý
/// À¸Â¸È½ÄêÉÕ
/// </summary>
/// <param name="amount"></param>
/// <returns></returns>
public virtual bool CalcLife(int amount, int effectIndex, string seType) {
¡¡¡¡¡¡¡¡// ¡¡Ý£±¡¡¥í¡¼¥«¥ëÊÑ¿ô¤Ë ReactiveProperty ¤òÂåÆþ¤·¡¢Ä¾ÀÜ·×»»¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë
int hp = Hp.Value;
// ¡¡Ý£²¡¡hp ¤Î·×»»¤ò Clamp ¤ÇÀ©¸Â¤¹¤ë¤³¤È¤Ç¡¢Value ¤Ø¤ÎÂåÆþ¤ò1²ó¤À¤±¤Ë¤¹¤ë
Hp.Value = Mathf.Clamp(hp += amount, 0, maxHp);
// ¢¤¢¤ë¤¤¤Ï¡¢¡Ü ¤Î¤ß¤Ç²Ã»»¤¹¤ë(ÂåÆþ½èÍý¤ò¶´¤Þ¤Ê¤¤)
Hp.Value = Mathf.Clamp(Hp.Value + amount, 0, maxHp);
return Hp.Value > 0;
}
}
||=
----
¡¡²¼µ¤Î¤è¤¦¤Ë½èÍý¤ò½ñ¤¯¤È¡¢Clamp ¥á¥½¥Ã¥ÉÆâ¤Ç ReactiveProperty ¤Î¹ØÆɽèÍý¤¬2²ó¤¬Æ°¤¯²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¡¡
=|PERL|
public virtual bool CalcLife(int amount, int effectIndex, string seType) {
¡¡¡¡¡¡¡¡// ReactiveProperty ¤Î·×»»¤òľÀÜ Clamp Æâ¤Ç¹Ô¤¦¤È¡¢Âè1°ú¿ô¤Î·×»»»þ¤Ë1²ó¡¢Clamp ¤ÎÀ©¸Â»þ¤Ë1²ó¡¢¹ØÆɽèÍý¤¬Æ°¤¯²ÄǽÀ¤¬¤¢¤ë
Hp.Value = Mathf.Clamp(Hp.Value += amount, 0, maxHp);
return Hp.Value > 0;
}
||=
¡¡¤³¤ì¤òÈò¤±¤ë¤è¤¦¤Ë¥³¡¼¥Ç¥£¥ó¥°¤·¤Þ¤·¤ç¤¦¡£
----