ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2024ǯ10·î23Æü(¿å) 13:20:36ÍúÎò
¥Þ¥¦¥¹¤òĹ²¡¤·¤·¤Æ¤¤¤ë´Ö¤È¡¢¥Þ¥¦¥¹¤òÎ¥¤·¤¿¤È¤¤Î½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
¡ã¼ÂÁõư²è¡ä

¡¡¤³¤Á¤é¤Î¥µ¥¤¥È¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£
Zenn ¤Í¤³¤ß¤ß¤À¤¤¤Þ¤ª¤¦ ÍÍ
UniRx¤ÇuGUI¤Î¥Ü¥¿¥óĹ²¡¤·¤ò¼è¤ë
https://zenn.dev/nekomimi_daimao/articles/932e1f20...
¡¡¥Ü¥¿¥ó¤Î²¡²¼¤ÈÎ¥¤·¤¿»þ¤Î¹ØÆÉ½èÍý¤ò£±¤Ä¤Ë¤Þ¤È¤á¤ÆÊ¬´ô¤òºîÀ®¤·¤¿¥Ñ¥¿¡¼¥ó¤È
¥Ü¥¿¥ó¤Î¹ØÆÉ½èÍý¤ò¤½¤ì¤¾¤ì¤Ëʬ¤±¤¿µ½Ò¤·¤¿¥Ñ¥¿¡¼¥ó¤ÎξÊý¤òÄ󼨤·¤Þ¤¹¡£
¡¡¤³¤Á¤é¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¢¤É¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¥µ¥ó¥×¥ë¤Ç¤Ï Button ¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¤¤¤Þ¤¹¤¬¡¢Î㤨¤Ð Canvas ¤Ç¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
using System;
using UniRx;
using UniRx.Triggers;
using UnityEngine;
using UnityEngine.UI;
public class LongTapSample : MonoBehaviour {
[SerializeField] private Button btnBuffDetail;
[SerializeField] private CanvasGroup cgLocalize;
private float interval = 0.2f;
void Start() {
Setup();
}
/// <summary>
/// ½é´üÀßÄê
/// </summary>
public void Setup() {
¡¡¡¡¡¡¡¡HideBuffDisp();
// ¥Ü¥¿¥ó¤Î¹ØÆÉ
// UniRx ¤òÍøÍѤ·¤¿¥Þ¥¦¥¹¤ÎĹ²¡¤·½èÍý
// Select ¤Ç OnPointerDown¤òtrue¤ËÊÑ´¹
btnBuffDetail.OnPointerDownAsObservable().Select(_ => true)
// OnPointerDown¤ÈOnPointerUp¤ò1¤Ä¤Î¥¹¥È¥ê¡¼¥à¤Ë¹çÀ®
// ¤³¤Î¸å¤Ë¤Ï²¡¤·¤¿»þ¤Ëtrue¤¬¡¢Î¥¤·¤¿»þ¤Ëfalse¤¬Î®¤ì¤ë¤è¤¦¤Ë¤Ê¤ë
¡¡¡¡// Select ¤Ç OnPointerUp¤òfalse¤ËÊÑ´¹
.Merge(btnBuffDetail.OnPointerUpAsObservable().Select(_ => false))
¡¡¡¡¡¡¡¡¡¡¡¡// interval Éôֿ·¤·¤¤Ãͤ¬Íè¤Ê¤«¤Ã¤¿¤éºÇ¸å¤ËÍ褿Ãͤòή¤¹
.Throttle(TimeSpan.FromSeconds(interval))
¡¡¡¡¡¡¡¡¡¡¡¡// ¥Ü¥¿¥ó¤ÎĹ²¡¤·¡¢¤¢¤ë¤¤¤ÏÎ¥¤·¤¿»þ¤Ë¹ØÆÉ¼Â¹Ô
.Subscribe(isButtonPressed => {
if (isButtonPressed) {
// ¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¾ì¹ç¤Î½èÍý
ShowBuffDisp();
Debug.Log("Show");
} else {
// ¥Ü¥¿¥ó¤¬Î¥¤µ¤ì¤¿¾ì¹ç¤Î½èÍý
HideBuffDisp();
Debug.Log("Hide");
}
}).AddTo(this);
/// <summary>
/// ¥Ü¥¿¥óĹ²¡¤·¤Ç¼Â¹Ô¤¹¤ë½èÍý
/// </summary>
private void ShowBuffDisp() {
cgLocalize.alpha = 1.0f;
}
/// <summary>
/// ¥Ü¥¿¥ó¤òÎ¥¤·¤¿»þ¤Ë¼Â¹Ô¤¹¤ë½èÍý
/// </summary>
private void HideBuffDisp() {
cgLocalize.alpha = 0f;
}
}
¡¡¥Ü¥¿¥ó¤ÎĹ²¡¤·¤È¡¢¥Ü¥¿¥ó¤òÎ¥¤·¤¿»þ¤Î¹ØÆÉ½èÍý¤òʬ¤±¤Æµ½Ò¤·¤¿¥Ñ¥¿¡¼¥ó¤Ç¤¹¡£
using System;
using UniRx;
using UniRx.Triggers;
using UnityEngine;
using UnityEngine.UI;
public class LongTapSample : MonoBehaviour {
[SerializeField] private Button btnBuffDetail;
[SerializeField] private CanvasGroup cgLocalize;
private float interval = 0.2f;
void Start() {
Setup();
}
/// <summary>
/// ½é´üÀßÄê
/// </summary>
public void Setup() {
HideBuffDisp();
// UniRx ¤òÍøÍѤ·¤¿¥Þ¥¦¥¹¤ÎĹ²¡¤·½èÍý
// OnPointerDown¤òtrue¤ËÊÑ´¹
btnBuffDetail.OnPointerDownAsObservable().Select(_ => true)
// OnPointerUp¤òfalse¤ËÊÑ´¹
// OnPointerDown¤ÈOnPointerUp¤ò1¤Ä¤Î¥¹¥È¥ê¡¼¥à¤Ë¹çÀ®
// ¤³¤Î¸å¤Ë¤Ï²¡¤·¤¿»þ¤Ëtrue¤¬¡¢Î¥¤·¤¿»þ¤Ëfalse¤¬Î®¤ì¤ë¤è¤¦¤Ë¤Ê¤ë
.Merge(btnBuffDetail.OnPointerUpAsObservable().Select(_ => false))
// 1Éôֿ·¤·¤¤Ãͤ¬Íè¤Ê¤«¤Ã¤¿¤éºÇ¸å¤ËÍ褿Ãͤòή¤¹
.Throttle(TimeSpan.FromSeconds(interval))
// ¥Ü¥¿¥ó¤Î²¡²¼¾õÂÖ¤òȽÄꤷ¤Æ¡¢ true ¤À¤±¤òή¤¹
.Where(isButtonPressed => isButtonPressed)
// bool ¤ÎÃÍ¡ÊisButtonPressed¡Ë¤ÏÉÔÍפʤΤǡ¢Unit¤ËÊÑ´¹¤·¤Æ¡Ú¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¡Û¤³¤È¤À¤±¤òÄÌÃΤ¹¤ë
// ÊÑ´¹Íýͳ¤ÏÄÌÃÎȯ¹Ô¤Î¤ß¤ò¹Ô¤Ã¤Æ¤¤¤ë¤³¤È¤òÌÀ³Î¤Ë¤¹¤ë¤¿¤á
.AsUnitObservable()
// ¾åµ¤Î½èÍý¤Ë¤è¤ê¡¢ºÇ½ªÅª¤Ë¥Þ¥¦¥¹¤ÎĹ²¡¤·¤ò¹ØÆÉ¤¹¤ë
.Subscribe(_ => {
// TODO Ĺ²¡¤·»þ¤Î½èÍý¤ò¼ÂÁõ
ShowBuffDisp();
})
.AddTo(this);
// OnPointerUp»þ¤ËHideBuffDisp¤ò¸Æ¤Ó½Ð¤¹
btnBuffDetail.OnPointerUpAsObservable()
.Subscribe(_ => {
// ¥¿¥Ã¥×¡ÊĹ²¡¤·¡Ë¤ò¤ä¤á¤¿ºÝ¤Î½èÍý¤ò¼Â¹Ô
HideBuffDisp();
})
.AddTo(this);
}
/// <summary>
/// ¥Ü¥¿¥óĹ²¡¤·¤Ç¼Â¹Ô¤¹¤ë½èÍý
/// </summary>
private void ShowBuffDisp() {
cgLocalize.alpha = 1.0f;
}
/// <summary>
/// ¥Ü¥¿¥ó¤òÎ¥¤·¤¿»þ¤Ë¼Â¹Ô¤¹¤ë½èÍý
/// </summary>
private void HideBuffDisp() {
cgLocalize.alpha = 0f;
}
}
¡¡btnVariable¤ÎOnPointerDown¤ÈOnPointerUp¤ò1¤Ä¤Î¥¹¥È¥ê¡¼¥à¤Ë¹çÀ®¤·¤Æ¡¢
¤½¤Î¸å¤ËTrue¤Î¤È¤¤À¤±¤ò¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¡¢ºÇ½ªÅª¤ËUnit¤ËÊÑ´¹¤·¤Æ¤«¤é¹ØÆÉ¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¡¡¡¡¡¡// UniRx ¤òÍøÍѤ·¤¿¥Þ¥¦¥¹¤ÎĹ²¡¤·½èÍý
¡¡¡¡¡¡¡¡// OnPointerDown¤òtrue¤ËÊÑ´¹
btnBuffDetail.OnPointerDownAsObservable().Select(_ => true)
¡¡¡¡// OnPointerUp¤òfalse¤ËÊÑ´¹
// OnPointerDown¤ÈOnPointerUp¤ò1¤Ä¤Î¥¹¥È¥ê¡¼¥à¤Ë¹çÀ®
// ¤³¤Î¸å¤Ë¤Ï²¡¤·¤¿»þ¤Ëtrue¤¬¡¢Î¥¤·¤¿»þ¤Ëfalse¤¬Î®¤ì¤ë¤è¤¦¤Ë¤Ê¤ë
¡¡¡¡.Merge(btnBuffDetail.OnPointerUpAsObservable().Select(_ => false))
// 1Éôֿ·¤·¤¤Ãͤ¬Íè¤Ê¤«¤Ã¤¿¤éºÇ¸å¤ËÍ褿Ãͤòή¤¹
.Throttle(TimeSpan.FromSeconds(interval))
// true¤À¤±¤òή¤¹
.Where(b => b)
// ¤³¤Îbool¤ÏÍøÍѤ·¤Ê¤¤ÃͤʤΤǡ¢ÄÌÃÎȯ¹Ô¤Î¤ß¤ò¹Ô¤Ã¤Æ¤¤¤ë¤³¤È¤òÌÀ³Î¤Ë¤¹¤ë¤¿¤á¡¢Unit¤ËÊÑ´¹¤¹¤ë
¡¡¡¡.AsUnitObservable()
¡¡¡¡ // ¾åµ¤Î½èÍý¤Ë¤è¤ê¡¢ºÇ½ªÅª¤Ë¥Þ¥¦¥¹¤ÎĹ²¡¤·¤ò¹ØÆÉ¤¹¤ë
¡¡¡¡ .Subscribe(_ =>
¡¡¡¡ {
¡¡¡¡ // TODO Ĺ²¡¤·»þ¤Î½èÍý¤ò¼ÂÁõ
¡¡¡¡})
¡¡¡¡.AddTo(this);
¡¡¶ñÂÎŪ¤Ê½èÍý¤Îή¤ì¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£
¡¡OnPointerDownAsObservable()¤ÈOnPointerUpAsObservable()¤òMerge¤·¤Æ1¤Ä¤Î¥¹¥È¥ê¡¼¥à¤Ë·ë¹ç¤·¤Þ¤¹¡£
¡¡¹çÀ®¤·¤¿¥¹¥È¥ê¡¼¥à¤Î³ÆÍ×ÁǤËÂФ·¤Æ¡¢Select(_ => true)¤ÈSelect(_ => false)¤ò»È¤Ã¤Æ¡¢¤½¤ì¤¾¤ìTrue¤ÈFalse¤ËÊÑ´¹¤·¤Þ¤¹¡£
¡¡ÊÑ´¹¤·¤¿¥¹¥È¥ê¡¼¥à¤òThrottle¤Ç0.5É䴤ȤËÀ©¸æ¤·¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢Ä¹²¡¤·Ãæ¤Ç¤â interval(0.5) É䴤ȤË1²ó¤À¤±¥¤¥Ù¥ó¥È¤¬Î®¤ì¤Þ¤¹¡£
¡¡ºÇ¸å¤Ë¡¢True¤Î¤È¤¤À¤±¤ò¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¤Æ¡¢AsUnitObservable()¤ÇUnit¤ËÊÑ´¹¤·¤Þ¤¹¡£
¡¡ºÇ½ªÅª¤Ë¡¢Ä¹²¡¤·»þ¤Ë¤Ï interval É䴤ȤËUnit¤¬Î®¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¡¢¤½¤Î¥¤¥Ù¥ó¥È¤òSubscribe¤·¤Æ¼ÂÁõ¤·¤¿½èÍý¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¤³¤Î½èÍý¤Ë¤è¤ê¡¢btnBuffDetail¤¬Ä¹²¡¤·¡Ê¤Þ¤¿¤Ï¥¿¥Ã¥×¡Ë¤µ¤ì¤¿¾õÂÖ¤ò¸¡ÃΤ·¡¢¤½¤ÎºÝ¤Ë¥¤¥Ù¥ó¥È½èÍý¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡AsUnitObservable() ¥ª¥Ú¥ì¡¼¥¿¤Ï¡¢Observable¤Î³ÆÍ×ÁǤËÂФ·¤ÆÃ±¤Ê¤ë true ¤Ç¤Ï¤Ê¤¯¡¢ Unit ¤òή¤¹¤è¤¦¤ËÊÑ´¹¤¹¤ë¤â¤Î¤Ç¤¹¡£
¤³¤ì¤Ï¡¢Observable¤¬ÆÃÄê¤ÎÃͤÎή¤ì¤Ç¤Ï¤Ê¤¯¡¢Ã±¤Ê¤ë¥¤¥Ù¥ó¥È¤ÎȯÀ¸¤òɽ¤¹¾ì¹ç¤Ë»È¤ï¤ì¤Þ¤¹¡£
¡¡Î㤨¤Ð¡¢ BtnVariable ¤¬Ä¹²¡¤·¡Ê¤Þ¤¿¤Ï¥¿¥Ã¥×¡Ë¤µ¤ì¤¿¤³¤È¤òÃΤꤿ¤¤¾ì¹ç¡¢¤½¤Î¾ðÊó¤À¤±¤ò»ý¤Ä true ¤òή¤¹¤Î¤Ç¤Ï¤Ê¤¯¡¢
Unit ¤òή¤¹¤³¤È¤Ç¡¢ÆÃ¤ËÃͤ˰ÕÌ£¤¬¤Ê¤¯¡¢Ã±¤Ë¥¤¥Ù¥ó¥È¤¬È¯À¸¤·¤¿¤³¤È¤òɽ¸½¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¼ÂºÝ¤Ë¤Ï¡¢¤³¤Î¾ì¹ç¡¢ AsUnitObservable() ¤ò¶´¤Þ¤Ê¤¯¤Æ¤âưºî¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¤·¤«¤·¡¢¥¤¥Ù¥ó¥È¤ÎȯÀ¸¤òɽ¤¹¾ìÌ̤Ǥϡ¢ Unit ¤¬»ÈÍѤµ¤ì¤ë¤³¤È¤¬°ìÈÌŪ¤Ç¤¢¤ê¡¢¥³¡¼¥É¤Î°Õ¿Þ¤òÌÀ¼¨Åª¤Ë¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥³¡¼¥É¤ò¸«¤ë¿Í¤¬Ã±¤Ê¤ë true ¤ÎÂå¤ï¤ê¤Ë Unit ¤ò»È¤Ã¤Æ¤¤¤ë¤³¤È¤òÍý²ò¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢ÆÃ¤ËÃͤ˰ÕÌ£¤¬¤Ê¤¤¾ì¹ç¤ä¡¢¤½¤ÎÃͤò̵»ë¤¹¤ë¾ì¹ç¤Ë¤â Unit ¤¬»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Î¤è¤¦¤Êʸ̮¤Ç .AsUnitObservable() ¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¥³¡¼¥É¤Î°Õ¿Þ¤¬ÌÀ³Î¤Ë¤Ê¤ê¡¢Â¾¤Î³«È¯¼Ô¤ä¼«Ê¬¼«¿È¤¬¸å¤ÇÍý²ò¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°








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