Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

¡ß
¡¡UniRx/R3 ¤ò³èÍѤ·¤¿¥Þ¥¦¥¹Ä¹²¡¤·µ¡Ç½¤Î¼ÂÁõÎã¤Ç¤¹¡£
¥Þ¥¦¥¹¤òĹ²¡¤·¤·¤Æ¤¤¤ë´Ö¤È¡¢¥Þ¥¦¥¹¤òÎ¥¤·¤¿¤È¤­¤Î½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£

³«È¯´Ä¶­
¡¦Unity 6000.3.10f1
¡¦R3 1.3.0

¡ã¼ÂÁõư²è¡ä



¡¡¤³¤Á¤é¤Î¥µ¥¤¥È¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£
Zenn ¤Í¤³¤ß¤ß¤À¤¤¤Þ¤ª¤¦ ÍÍ
UniRx¤ÇuGUI¤Î¥Ü¥¿¥óĹ²¡¤·¤ò¼è¤ë
https://zenn.dev/nekomimi_daimao/articles/932e1f20...



Àß·×


¡¡¤³¤Î¥µ¥ó¥×¥ë¤Ç¤Ï¡¢²èÌ̤˥ܥ¿¥ó¤òÇÛÃÖ¤·¡¢¤½¤Á¤é¤òĹ²¡¤·¤·¤Æ¤¤¤ë´Ö¤À¤±¡¢Ê¸»ú¤¬É½¼¨¤µ¤ì¤ë¤È¤¤¤¦µ¡Ç½¤Ç¤¹¡£

¡¡¥Ò¥¨¥é¥ë¥­¡¼¤ä¥ª¥Ö¥¸¥§¥¯¥È¤Î¥µ¥ó¥×¥ë¤òÄ󼨤·¤Æ¤ª¤­¤Þ¤¹¡£
°ìÈÌŪ¤Ê Canvas ¤ä Button ¤Îºî¤ê¤Ç¤¹¡£














¥µ¥ó¥×¥ë¥³¡¼¥É


¡¡¥Ü¥¿¥ó¤Î²¡²¼¤ÈÎ¥¤·¤¿»þ¤Î¹ØÆÉ½èÍý¤ò£±¤Ä¤Ë¤Þ¤È¤á¤ÆÊ¬´ô¤òºîÀ®¤·¤¿¥Ñ¥¿¡¼¥ó¤È
¥Ü¥¿¥ó¤Î¹ØÆÉ½èÍý¤ò¤½¤ì¤¾¤ì¤Ëʬ¤±¤¿µ­½Ò¤·¤¿¥Ñ¥¿¡¼¥ó¤ÎξÊý¤òÄ󼨤·¤Þ¤¹¡£

¡¡¤³¤Á¤é¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¢¤É¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¥µ¥ó¥×¥ë¤Ç¤Ï Button ¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¤¤¤Þ¤¹¤¬¡¢Î㤨¤Ð Canvas ¤Ç¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£


£±¡¥¥Ü¥¿¥ó¤Î¹ØÆÉ½èÍý¤ò£±¤Ä¤Ë¤Þ¤È¤á¤ÆÊ¬´ô¤òºîÀ®¤·¤¿¥Ñ¥¿¡¼¥ó


¡¡UniRx ¤Ç¤Ï¤Ê¤¯ R3 ¤òÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï using UniRx; ¤È using UniRx.Triggers; ¤òºï½ü¤·¡¢
Âå¤ï¤ê¤Ë using R3; ¤È using R3.Triggers; ¤ò½ñ¤­²Ã¤¨¤Æ¤¯¤À¤µ¤¤¡£


using System;
using UniRx;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡// using R3;
using UniRx.Triggers;¡¡¡¡¡¡ // using R3.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)¤Î2¤Ä¤Î¥ª¥Ú¥ì¡¼¥¿¤ò»È¤Ã¤Æ¡¢¤½¤ì¤¾¤ìTrue¤ÈFalse¤ËÊÑ´¹¤·¤Þ¤¹¡£

¡¡ÊÑ´¹¤·¤¿¥¹¥È¥ê¡¼¥à¤ò Throttle ¥ª¥Ú¥ì¡¼¥¿¤Ç0.5É䴤ȤËÀ©¸æ¤·¤Þ¤¹¡£
Throttle ¥ª¥Ú¥ì¡¼¥¿¤Ï°ìÄê»þ´Ö¥¤¥Ù¥ó¥È¤¬Íè¤Ê¤«¤Ã¤¿¤éºÇ¸å¤ÎÃͤòή¤¹¤È¤¤¤¦µ¡Ç½¤Ç¤¹¡£
ºÇ¸å¤ÎÆþÎϤ«¤é interval É÷вᤷ¤¿»þÅÀ¤Ç¡¢ºÇ¸å¤ÎÃͤò1²ó¤À¤±È¯¹Ô¤·¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¤³¤Î¼ÂÁõ¤Ç¤Ï

¡¡¡¦¥Þ¥¦¥¹¤ò²¡¤·¤Æ interval Éøå¤Ë true ¤¬1²óȯ²Ð
¡¡¡¦¥Þ¥¦¥¹¤òÎ¥¤·¤Æ interval Éøå¤Ë false ¤¬1²óȯ²Ð

¡¡¤È¤¤¤¦µóư¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡ºÇ¸å¤Ë¡¢true ¤Î¤È¤­¤À¤±¤ò¥Õ¥£¥ë¥¿¥ê¥ó¥°¤·¤Æ¡¢AsUnitObservable()¤ÇUnit(ÄÌÃÎÍѤÎÃÍ)¤ËÊÑ´¹¤·¤Þ¤¹¡£

¡¡ºÇ½ªÅª¤Ë¡¢Ä¹²¡¤·»þ¤Ë¤Ï interval Éä´¤È¤Ë Unit(ÄÌÃÎ) ¤¬Î®¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¡¢¤½¤Î¥¤¥Ù¥ó¥È¤ò Subscribe(¹ØÆÉ)¤·¤Æ¼ÂÁõ¤·¤¿½èÍý¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
¤³¤Î½èÍý¤Ë¤è¤ê¡¢btnBuffDetail¤¬Ä¹²¡¤·¡Ê¤Þ¤¿¤Ï¥¿¥Ã¥×¡Ë¤µ¤ì¤¿¾õÂÖ¤ò¸¡ÃΤ·¡¢¤½¤ÎºÝ¤Ë¥¤¥Ù¥ó¥È½èÍý¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


¡ãAsUnitObservable() ¥ª¥Ú¥ì¡¼¥¿¡ä


¡¡AsUnitObservable() ¥ª¥Ú¥ì¡¼¥¿¤Ï¡¢Observable¤Î³ÆÍ×ÁǤËÂФ·¤ÆÃ±¤Ê¤ë true ¤Ç¤Ï¤Ê¤¯¡¢ Unit ¤òή¤¹¤è¤¦¤ËÊÑ´¹¤¹¤ë¤â¤Î¤Ç¤¹¡£
¤³¤ì¤Ï¡¢Observable¤¬ÆÃÄê¤ÎÃͤÎή¤ì¤Ç¤Ï¤Ê¤¯¡¢Ã±¤Ê¤ë¥¤¥Ù¥ó¥È¤ÎȯÀ¸¤òɽ¤¹¾ì¹ç¤Ë»È¤ï¤ì¤Þ¤¹¡£

¡¡Î㤨¤Ð¡¢ BtnVariable ¤¬Ä¹²¡¤·¡Ê¤Þ¤¿¤Ï¥¿¥Ã¥×¡Ë¤µ¤ì¤¿¤³¤È¤òÃΤꤿ¤¤¾ì¹ç¡¢¤½¤Î¾ðÊó¤À¤±¤ò»ý¤Ä true ¤òή¤¹¤Î¤Ç¤Ï¤Ê¤¯¡¢
Unit ¤òή¤¹¤³¤È¤Ç¡¢ÆÃ¤ËÃͤ˰ÕÌ£¤¬¤Ê¤¯¡¢Ã±¤Ë¥¤¥Ù¥ó¥È¤¬È¯À¸¤·¤¿¤³¤È¤òɽ¸½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡¼ÂºÝ¤Ë¤Ï¡¢¤³¤Î¾ì¹ç¡¢ AsUnitObservable() ¤ò¶´¤Þ¤Ê¤¯¤Æ¤âưºî¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¤·¤«¤·¡¢¥¤¥Ù¥ó¥È¤ÎȯÀ¸¤òɽ¤¹¾ìÌ̤Ǥϡ¢ Unit ¤¬»ÈÍѤµ¤ì¤ë¤³¤È¤¬°ìÈÌŪ¤Ç¤¢¤ê¡¢¥³¡¼¥É¤Î°Õ¿Þ¤òÌÀ¼¨Åª¤Ë¤¹¤ë¤¿¤á¤Ë»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥³¡¼¥É¤ò¸«¤ë¿Í¤¬Ã±¤Ê¤ë true ¤ÎÂå¤ï¤ê¤Ë Unit ¤ò»È¤Ã¤Æ¤¤¤ë¤³¤È¤òÍý²ò¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£

¡¡¤Þ¤¿¡¢ÆÃ¤ËÃͤ˰ÕÌ£¤¬¤Ê¤¤¾ì¹ç¤ä¡¢¤½¤ÎÃͤò̵»ë¤¹¤ë¾ì¹ç¤Ë¤â Unit ¤¬»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Î¤è¤¦¤Êʸ̮¤Ç .AsUnitObservable() ¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¥³¡¼¥É¤Î°Õ¿Þ¤¬ÌÀ³Î¤Ë¤Ê¤ê¡¢Â¾¤Î³«È¯¼Ô¤ä¼«Ê¬¼«¿È¤¬¸å¤ÇÍý²ò¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£


Ãí°ÕÅÀ

£±¡¥OnPointerExit ¤Î¹Íθ


¡¡¥Þ¥¦¥¹¤ò²¡¤·¤¿¤Þ¤Þ¥Ü¥¿¥ó³°¤Ë¥«¡¼¥½¥ë¤ò½Ð¤¹¤È OnPointerUpAsObservable ¤¬Íè¤Ê¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
OnPointerUpAsObservable ¤¬È¯²Ð¤·¤Ê¤¤¥±¡¼¥¹¡Ê¥Ü¥¿¥ó³°¤ÇÎ¥¤·¤¿¾ì¹ç¡Ë¤ËÈ÷¤¨¤Æ¡¢OnPointerExitAsObservable ¤âÊ»ÍѤ¹¤ë¤³¤È¤ò¿ä¾©¤·¤Þ¤¹¡£

btnBuffDetail.OnPointerDownAsObservable().Select(_ => true)

    .Merge(btnBuffDetail.OnPointerUpAsObservable().Select(_ => false))

    // ¤³¤³¤ËÄɲÃ
    .Merge(btnBuffDetail.OnPointerExitAsObservable().Select(_ => false))

    .Throttle(TimeSpan.FromSeconds(interval))

    // °Ê²¼¤ÏƱ¤¸¤Ç¤¹


¡¡µóư¤Î¥¤¥á¡¼¥¸¤È¤·¤Æ¤Ï

[PointerDown] ¢ª true
[PointerUp]   ¢ª false
[PointerExit] ¢ª false  ¢« ÄɲÃ

¡¡¤³¤Î¤è¤¦¤Ê·Á¤Ç¤¹¡£

¡¡Á´Éô Merge ¤·¤Æ true / false ¤¬Î®¤ì¤ë¥¹¥È¥ê¡¼¥à¤ËÅý°ì¤¹¤ë¤Î¤¬¥Ý¥¤¥ó¥È¤Ç¤¹¡£


£²¡¥¡ÖĹ²¡¤·¤·Â³¤±¤Æ¤¤¤ë´Ö¤Î½èÍý¡×¤Ë¤ÏÉÔ¸þ¤­


¡¡¤³¤Î¼ÂÁõ¤Ï¡ÖĹ²¡¤·¤ò¸¡ÃΤ¹¤ë¡×ÍÑÅӤˤÏŬ¤·¤Æ¤¤¤Þ¤¹¤¬¡¢²¡¤·¤Æ¤¤¤ë´Ö¤º¤Ã¤È½èÍý¤ò¼Â¹Ô¤·Â³¤±¤ëÍÑÅӤˤϸþ¤¤¤Æ¤¤¤Þ¤»¤ó¡£
¤½¤Î¾ì¹ç¤Ï°Ê²¼¤Î¤è¤¦¤Ë Interval ¤ä Update ¤òÁȤ߹ç¤ï¤»¤ëÊýË¡¤ò¸¡Æ¤¤·¤Æ¤¯¤À¤µ¤¤¡£

¡Ö²¡¤·¤Ã¤Ñ¤Ê¤·Ãæ¤Î½èÍý¡×¤ò¤ä¤ë¾ì¹ç¤ÎÊ̥ѥ¿¡¼¥ó
btnBuffDetail.OnPointerDownAsObservable()
    .SelectMany(_ =>
        Observable.Interval(TimeSpan.FromSeconds(0.1f))
            .TakeUntil(btnBuffDetail.OnPointerUpAsObservable())
    )
    .Subscribe(_ =>
    {
        // ²¡¤·¤Æ¤¤¤ë´Ö¤º¤Ã¤È¸Æ¤Ð¤ì¤ë
    })
    .AddTo(this);

¡¡SelectMany ¥ª¥Ú¥ì¡¼¥¿¤òÍøÍѤ·¡¢¥Þ¥¦¥¹¤ò²¡¤·¤¿¤é¥¹¥È¥ê¡¼¥à¤ò³«»Ï¤¹¤ë¤è¤¦¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£

¡¡Observable.Interval ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢ºÇ½é¤ÎÃͤ¬È¯¹Ô¤µ¤ì¤ë¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£

¡¡TakeUntil ¥ª¥Ú¥ì¡¼¥¿¤Ë¤è¤ê¡¢¥Þ¥¦¥¹¤òÎ¥¤·¤¿¤éÄä»ß¤¹¤ë¤è¤¦¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£


£³¡¥R3 ÍøÍÑ»þ¤ÎÊä­


¡¡R3¤Ç¤Ï Observable ¤Î¥¹¥±¥¸¥å¡¼¥éµóư¤¬ UniRx ¤È°Û¤Ê¤ë¾ì¹ç¤¬¤¢¤ë¤¿¤á¡¢
»þ´Ö·Ï¥ª¥Ú¥ì¡¼¥¿¡ÊThrottle / Interval¡Ë¤ò»ÈÍѤ¹¤ëºÝ¤Ïµóư³Îǧ¤ò¿ä¾©¤·¤Þ¤¹¡£



¡¡°Ê¾å¤Ë¤Ê¤ê¤Þ¤¹¡£

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


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆâ¤«¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆâ¤«¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹

¹­¹ðÊç½¸Ãæ