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

¡ß

£±¡¥³µÍ×


¡¡DOTween ¤Ë¤Ï Text ¥³¥ó¥Ý¡¼¥Í¥ó¥È¡¢¤¢¤ë¤¤¤Ï TextMeshPro ¥³¥ó¥Ý¡¼¥Í¥ó¥ÈÍÑ¤Ë DOCounter ¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤ª¤ê¡¢
¤³¤Á¤é¤òÍøÍѤ¹¤ë¤È¿ô»ú´Ö¤ÎÊä´Ö½èÍý¤Ë¤è¤Ã¤Æ¥¢¥Ë¥á¡¼¥·¥ç¥ó¤¬ºîÀ®¤Ç¤­¤Þ¤¹¡£


¡ã¿ô»ú¤Î¥¢¥Ë¥á¡ä



¡¡¤¿¤À¤·¡¢DOCounter ¥á¥½¥Ã¥É¤Ç¤Ï¥«¥ó¥Þ¶èÀÚ¤ê¤Î¿ô»ú¤Ë¤è¤ë¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ÏºîÀ®¤Ç¤­¤Þ¤»¤ó¡£
¤³¤Îµ­»ö¤Ç¤Ï¡¢¥«¥ó¥Þ¶èÀÚ¤ê¤Î¿ô»ú¤Ë¤è¤ë¥¢¥Ë¥á¡¼¥·¥ç¥ó¤òºîÀ®¤¹¤ëÊýË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£


<¥«¥ó¥Þ¶èÀÚ¤ê¤Î¿ô»ú¤Ë¤è¤ë¥¢¥Ë¥á>



£²¡¥´Ä¶­


¡¦Unity 6000.2.6f2
¡¦DOTween
¡¦R3(¤¢¤ë¤¤¤Ï UniRx)

¡¡³«È¯´Ä¶­¤Ë¤è¤ê¡¢²¼µ­¤¬É¬Íפˤʤê¤Þ¤¹¡£

¡¦DOTween Pro(TextMeshPro ÍøÍѤξì¹ç)


£³¡¥¼ÂÁõÎã


¡¡R3 + DOTween Pro ¤Ë¤è¤ë¼ÂÁõÎã¤Ç¤¹¡£Power(ÀïÎÏ)¤ÎÃͤò¥¢¥Ë¥á¤µ¤»¤ë¥µ¥ó¥×¥ë¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¥½¡¼¥¹¥³¡¼¥É¤Ï²ÄÆÉÀ­¤ò¹Íθ¤·¡¢¥á¥½¥Ã¥É¥Á¥§¡¼¥ó¤Î¥¿¥¤¥ß¥ó¥°¤´¤È¤Ë²þ¹Ô¤·¤Æ¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤Á¤é¤Ï1¹Ô¡¢2¹Ô¤Ë¤Þ¤È¤á¤Æ¤â½ñ¤¤¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¤Þ¤¿¡¢¥Ç¥Ð¥Ã¥°¤·¤ä¤¹¤¤¤è¤¦¤Ë SerializableReactiveProperty ¤òÀë¸À¤·¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤¹¤¬¡¢ReactiveProperty ¤Ç¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£

¡¡DOCounter ¤Ë¤è¤ë¥«¥ó¥Þ¶èÀÚ¤ê¤Ê¤·¤Î¥á¥½¥Ã¥É¤È¡¢¥«¥ó¥Þ¶èÀڤꤢ¤ê¤Î¥á¥½¥Ã¥É¤ÎξÊý¤òµ­ºÜ¤·¤Æ¤¢¤ê¤Þ¤¹¡£


using DG.Tweening;
using R3;
using TMPro;
using UnityEngine;

public class PowerViewSample : MonoBehaviour {
    [SerializeField] private TMP_Text txtPower;
    [SerializeField] private float duration = 0.5f;            // ¥¢¥Ë¥á¤¹¤ë»þ´Ö

    public SerializableReactiveProperty<int> Power = new(0);   // ¥¢¥Ë¥á¤µ¤»¤ë¿ôÃÍ


    void Start() {
        Setup();
    }

    /// <summary>
    /// ½é´üÀßÄê
    /// </summary>
    public void Setup() {

        // ÀïÎÏ¤Î¹ØÆÉ(DOCounter ÍѤË2²óʬ(Á°²óÃͤȿ·¤·¤¤ÃͤΥڥ¢¤ò)¥­¥ã¥Ã¥·¥å¤·¤Æ¤«¤éή¤¹)
        Power.Zip(Power.Skip(1), (prevValue, newValue) => (prevValue, newValue))
            .Subscribe(pair => DisplayUpdatePowerByComma(pair.prevValue, pair.newValue)).AddTo(this);

        // ÀïÎϤνé´üÃÍÀßÄê
        Power.OnNext(0);
    }

    /// <summary>
    /// ÀïÎÏɽ¼¨¤Î¹¹¿·(¥«¥ó¥Þ¶èÀÚ¤ê¤Ê¤·)
    /// </summary>
    /// <param name="prevValue"></param>
    /// <param name="newValue"></param>
    private void DisplayUpdatePower(int prevValue, int newValue) {

        // ¿ô»ú¤Î¥¢¥Ë¥áɽ¼¨
        txtPower.DOCounter(prevValue, newValue, duration)
            .SetEase(Ease.Linear)
            .SetLink(gameObject);
    }

    /// <summary>
    /// ÀïÎÏɽ¼¨¤Î¹¹¿·(¥«¥ó¥Þ¶èÀڤꤢ¤ê)
    /// </summary>
    /// <param name="prevValue"></param>
    /// <param name="newValue"></param>
    private void DisplayUpdatePowerByComma(int prevValue, int newValue) {

        // ¥«¥ó¥Þ¶èÀڤꤢ¤ê¤Ç¡¢¿ô»ú¤Î¥¢¥Ë¥áɽ¼¨
        txtPower.DOCounter(prevValue, newValue, duration)
            .SetEase(Ease.Linear)
            .SetLink(gameObject)
            .OnUpdate(() => {
                int current = int.Parse(txtPower.text);
                txtPower.text = current.ToString("N0");
            });
    }
}

¡¡¤Ê¤ª¡¢¤³¤Á¤é¤Îµ­»ö¤Ç¤Ï R3(UniRx) ¤òÍøÍѤ·¤Æ¹ØÆÉ½èÍý¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¤¬¡¢Ä̾ï¤Î¥á¥½¥Ã¥É¼Â¹ÔÊýË¡¤Ç¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¿ô»ú¤ò¹¹¿·¤·¤¿¸å¤Î¥¿¥¤¥ß¥ó¥°¤Ç DisplayUpdatePowerByComma ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£


£´¡¥¥ª¥Ú¥ì¡¼¥¿²òÀâ¡¡¡ÝSkip ¥ª¥Ú¥ì¡¼¥¿¡¢Zip ¥ª¥Ú¥ì¡¼¥¿(R3(UniRx)¡¼


¡¡¤É¤Á¤é¤â¡¢Subscribe ¤ÎÁ°¤ËÀßÄê¤Ç¤­¤ë¥ª¥Ú¥ì¡¼¥¿(Observable¤¬È¯¹Ô¤¹¤ë¥Ç¡¼¥¿¤òÊÑ´¹¡¦À©¸æ¤¹¤ë¤¿¤á¤Î¥á¥½¥Ã¥É·²)¤Ç¤¹¡£


£±¡¥Skip ¥ª¥Ú¥ì¡¼¥¿


¡¡Skip(n) ¤Ï¡¢¡ÖºÇ½é¤Î n ²ó¤Î¥¤¥Ù¥ó¥È¤ò̵»ë¤·¤Æ¡¢¤½¤Î¸å¤«¤éή¤¹¡×µ¡Ç½¤ò»ý¤Á¤Þ¤¹¡£

¡ãÎã¡ä
Power
    .Skip(1)
    .Subscribe(value => {
        Debug.Log($"ÊѲ½¤ò¸¡ÃÎ: {value}");
    });

¡¡¤³¤Î¾ì¹ç¡¢²¼µ­¤Î¤è¤¦¤Êư¤­¤Ë¤Ê¤ê¤Þ¤¹¡£
Power.Value¥¤¥Ù¥ó¥ÈSkip¸å¤Îưºî
0 ¢ª 101²óÌÜ̵»ë
10 ¢ª 202²óÌÜÄ̤¹¡Ê20¤¬½ÐÎÏ¡Ë
20 ¢ª 303²óÌÜÄ̤¹¡Ê30¤¬½ÐÎÏ¡Ë

¡¡Skip(1)¤Î¾ì¹ç¤À¤È¡¢¤³¤Î¤è¤¦¤ËºÇ½é¤ÎÃ͡ʽé´üÃ͡ˤÏ̵»ë¤·¤Æ¡¢2¤ÄÌܤÎÃͤÎÊѲ½¸å¤«¤éÈ¿±þ¤·¤¿¤¤(½èÍý¤òή¤·¤¿¤¤)¤È¤­¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


£²¡¥Zip ¥ª¥Ú¥ì¡¼¥¿


¡¡Zip ¤Ï¡¢¡Ö2¤Ä¤Î¥¹¥È¥ê¡¼¥à¤Î¥¤¥Ù¥ó¥È¤ò¥Ú¥¢¤Ë¤·¤ÆÅϤ¹¡×µ¡Ç½¤Ç¤¹¡£

¡ãÎã¡ä
¡¡Power
    .Zip(Power.Skip(1), (prev, next) => (prev, next))
    .Subscribe(pair => {
        Debug.Log($"Á°: {pair.prev}, ¸å: {pair.next}");
    });

¡¡¤³¤Î¾ì¹ç¤Î½èÍý¤Îư¤­¤Ç¤¹¡£
Power.ValueZip¤¬½Ð¤¹¥Ú¥¢
0 ¢ª 10(0, 10)
10 ¢ª 20(10, 20)
20 ¢ª 30(20, 30)

¡ÖÁ°¤ÎÃ͡פȡֿ·¤·¤¤Ã͡פòƱ»þ¤Ë°·¤¤¤¿¤¤¤È¤­¤Ë»È¤¤¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ë¤¹¤ë¤È¡¢¡ÖÁ°¤«¤é¤É¤ì¤À¤±Áý¤¨¤¿¤«¡×¤Ê¤É¤Îº¹Ê¬½èÍý¤¬´Êñ¤Ë¤Ê¤ê¤Þ¤¹¡£


£³¡¥Zip ¤È Skip ¤ÎÁȤ߹ç¤ï¤»¤Î°ÕÌ£


¡¡¾åµ­¤Î¤è¤¦¤Ë Zip ¤À¤±¤Ç¤Ïư¤«¤º¡¢Skip(1) ¤ÈÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ç¡ÖÁ°¸å¤ÎÃ͡פò¥Ú¥¢¤Ë¤Ç¤­¤Þ¤¹¡£

Power.Zip(Power.Skip(1), (prev, next) => (prev, next))

¡¡¤³¤ì¤ò3¤Ä¤Î¥Ñ¡¼¥È¤Ëʬ¤±¤Æ²òÀ⤷¤Þ¤¹¡£

­¡¥ì¥·¡¼¥Ð¡Êthis¡Ë¡§Power¡Êº¸Â¦¤Î¥¹¥È¥ê¡¼¥à¡Ë

­¢Âè1°ú¿ô¡ÊPower.Skip(1)¡Ë¡Ê±¦Â¦¤Î¥¹¥È¥ê¡¼¥à¡Ë

­£Âè2°ú¿ô¡Ê(prev, next) => (prev, next)¡Ë¡Ê·ë¹ç½èÍý¤ò¹Ô¤¦Æ¿Ì¾´Ø¿ô¡Ë


­¡¥ì¥·¡¼¥Ð¡Êthis¡Ë¡§Power¡Êº¸Â¦¤Î¥¹¥È¥ê¡¼¥à¡Ë

Power

¡¡¤³¤ì¤Ï¡ÖZip ¤Îº¸Â¦¤Ë¤Ê¤ë¥¹¥È¥ê¡¼¥à¡×¡ÊObservable¡Ë ¤Ç¤¹¡£
SerializableReactiveProperty<int> ¤Ï Power ¤ÎÃͤ¬ÊѤï¤ë¤¿¤Ó¤Ë¡Ö¥¤¥Ù¥ó¥È¡ÊÄÌÃΡˡפòή¤·¤Þ¤¹¡£
¤³¤Î Power ¤Î¥¤¥Ù¥ó¥È¤¬Î®¤ì¤ë¤¿¤Ó¤Ë¡¢¡Ö±¦Â¦¤Î¥¹¥È¥ê¡¼¥à¡×¤È1¤Ä¤º¤Ä¥Ú¥¢¤Ë¤µ¤ì¤Þ¤¹¡£

¡¡Î㤨¤Ð¼¡¤Î¤è¤¦¤ÊÊѲ½¤ò¹Í¤¨¤Þ¤·¤ç¤¦¡£

Power.Value = 10;
Power.Value = 20;
Power.Value = 30;

¡¡¤³¤Î¤È¤­ÆâÉôŪ¤Ë¤Ï¡¢¤³¤¦¤¤¤¦Î®¤ì¤¬½Ð¤Æ¤¤¤Þ¤¹¡£

Power: [10] ¢ª [20] ¢ª [30]

¡¡¤Ä¤Þ¤ê Zip ¤Îº¸Â¦¤Î¥¹¥È¥ê¡¼¥à¤Ï¡¢¡Ö¸½ºßÃͤÎÊѲ½¤ò¤½¤Î¤Þ¤Þή¤¹¤â¤Î¡×¤Ç¤¹¡£


­¢ Âè1°ú¿ô¡§Power.Skip(1)¡Ê±¦Â¦¤Î¥¹¥È¥ê¡¼¥à¡Ë

Power.Skip(1)

¡¡Skip(1) ¤Ï¡¢¡ÖºÇ½é¤Î1¤Ä¤ò¥¹¥­¥Ã¥×¤·¤Æ¡¢2²óÌܰʹߤ«¤éή¤¹¡×¥¹¥È¥ê¡¼¥à¤òºî¤ê¤Þ¤¹¡£

¡¡Àè¤Û¤É¤Î¤è¤¦¤Ë¡¢Power¤ÎÃͤ¬ [10] ¢ª [20] ¢ª [30] ¤Èή¤ì¤ë½èÍý¤¬¤¢¤ë¤È¤·¤¿¤é¡¢

Power.Skip(1): [20] ¢ª [30]
¡Ê¢¨ºÇ½é¤Î 10 ¤Ï¥¹¥­¥Ã¥×¤µ¤ì¤ë¡Ë

¡¡¤³¤Î¤è¤¦¤ÊÀ©¸æ¤ò¹Ô¤Ã¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£


­£Âè2°ú¿ô¡Ê(prev, next) => (prev, next)¡Ë¡Ê·ë¹ç½èÍý¤ò¹Ô¤¦Æ¿Ì¾´Ø¿ô¡Ë

¡¡¤³¤³¤¬°ìÈÖÂç»ö¤ÊÉôʬ¤Ç¤¹¡£
¤³¤ì¤Ï¡Ö·ë¹ç½èÍý¤ò¹Ô¤¦Æ¿Ì¾´Ø¿ô (resultSelector)¡×¤Ç¤¹¡£
º¸¡Ê¥ì¥·¡¼¥Ð¡Ë¤ÎÃͤȱ¦¡Ê°ú¿ô¡Ë¤ÎÃͤò¼õ¤±¼è¤ê¡¢¤½¤ì¤é¤ò¿·¤·¤¤½ÐÎϤËÊÑ´¹¤·¤Þ¤¹¡£

¡¡¤³¤Î¥é¥à¥À¤Ï¼¡¤Î¤è¤¦¤Ê¥·¥°¥Í¥Á¥ã¤Ç¤¹¡£

Func<int, int, (int prev, int next)>

¡¡¤³¤Îƿ̾´Ø¿ô¤Ï¡ÖPower¤ÎÃ͡ʺ¸¥¹¥È¥ê¡¼¥à¡Ë¤ÈÂè1°ú¿ô¡Ê±¦¥¹¥È¥ê¡¼¥à¡Ë¡×¤«¤éÍè¤ëÃͤò¼õ¤±¼è¤Ã¤Æ¡¢¤Ò¤È¤Ä¤Î½ÐÎϡʿ·¤·¤¤¥Ç¡¼¥¿¡Ë¤òºî¤ê¤Þ¤¹¡£
º¸ (Power)±¦ (Power.Skip(1))½ÐÎÏ (prev, next)
1020(10, 20)
2030(20, 30)

¡¡¤Ä¤Þ¤ê¡¢

º¸¡Êprev¡Ë ¡Ä Á°¤ÎÃÍ
±¦¡Ênext¡Ë ¡Ä ¿·¤·¤¤ÃÍ

(prev, next) ¡Ä ¤½¤ì¤ò¤Þ¤È¤á¤¿¥¿¥×¥ë¡ÊÃͤΥڥ¢¡Ë

¡¡¤³¤Î¤è¤¦¤Ê½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡¤Ê¤¼¡Öthis Power¡×¤¬Á°²óÃͰ·¤¤¤Ë¤Ê¤ë¤Î¤«¡©¡¡¤Ç¤¹¤¬¡¢Zip ¤Ï¡Öº¸¡¦±¦¤ò1ÂÐ1¤ÇƱ´üŪ¤Ë½Ð¤¹¡×µ¡Ç½¤Ê¤Î¤Ç¡¢

º¸¤Î¥¹¥È¥ê¡¼¥à¡§¸µ¤Î Power¡Ê¡á¸Å¤¤ÃÍ¡Ë
±¦¤Î¥¹¥È¥ê¡¼¥à¡§Skip(1) ¤Ç1¤Ä¤º¤é¤·¤¿ Power¡Ê¡á¿·¤·¤¤ÃÍ¡Ë

¡¡¤È¤¤¤¦Âбþ´Ø·¸¤¬¼«Á³¤ËÀ¸¤Þ¤ì¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢Zip ¤Î ¥ì¥·¡¼¥Ð¡Êthis Power¡Ë ¤¬ ¡ÈÁ°²óÃÍ¡É °·¤¤¤Ë¤Ê¤ê¤Þ¤¹¡£

Power:        [10] ¢ª [20] ¢ª [30]
Power.Skip(1):     [20] ¢ª [30]
--------------------------------
Zip·ë²Ì:      (10,20) (20,30)



¡¡ºÇ½ªÅª¤Ê½èÍý¤ò¤Þ¤È¤á¤Æ¤ß¤Þ¤¹¡£

¡¡Zip ¤Ï¡¢º¸¤È±¦¤¬Î¾Êý¤È¤âÃͤò½Ð¤·¤¿¤È¤­¤Ë1²ó¤À¤±¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤Ä¤Þ¤ê¡¢¡Ö2¤Ä¤Î¥¹¥È¥ê¡¼¥à¤ò1ÂÐ1¤ÇƱ´ü¤µ¤»¤ë¡×¤Î¤¬ Zip ¤ÎËܼÁ¤Ç¤¹¡£

Power
    // 1. Power ¤Îή¤ì¤òº¸Â¦¤Ë
    .Zip(
        // 2. 1¤Ä¤º¤é¤·¤¿Î®¤ì¤ò±¦Â¦¤Ë
        Power.Skip(1),
        // 3. ξÊý¤ò¼õ¤±¼è¤ê¡¢(prev, next) ¤È¤¤¤¦¥Ú¥¢¤òÀ¸À®
        (prev, next) => (prev, next)
    )
    .Subscribe(pair => {
        Debug.Log($"Á°:{pair.prev}, ¸å:{pair.next}");
    });

¡¡¤Ê¤¼¤³¤Î½ñ¤­Êý¤¬ÊØÍø¤Ê¤Î¤«¤È¤¤¤¦¤È¡¢Zip + Skip(1) ¤Ë¤è¤Ã¤Æ¡¢¡ÖÁ°¤ÎÃͤȿ·¤·¤¤ÃͤΥڥ¢¡×¤¬´Êñ¤Ë¼è¤ì¤ë¤¿¤á¤Ç¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¡Ö¤É¤Î¤¯¤é¤¤Áý¤¨¤¿¡©¡×¡Ö¸º¤Ã¤¿¡©¡×¡Ö¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Î³«»ÏÃͤȽªÎ»ÃͤòÃΤꤿ¤¤¡×¤È¤¤¤Ã¤¿½èÍý¤ò¼Â¸½¤Ç¤­¤Þ¤¹¡£

Power:  [0] ¢ª [10] ¢ª [20] ¢ª [30]
Skip(1):     [10] ¢ª [20] ¢ª [30]
Zip·ë²Ì: (0,10) (10,20) (20,30)

¡¡¤³¤Î¤è¤¦¤Ë¡ÖÁ°Ãͤȿ·Ãͤò¤Þ¤È¤á¤Æ¼èÆÀ¤¹¤ë¡×¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡DOCounter ¥á¥½¥Ã¥É¤Î°ú¿ô¤Ë¤Ï¡¢Á°²ó¤ÎÃͤȿ·¤·¤¤ÃͤÎ2¤Ä¤ÎÃͤλØÄ꤬ɬÍפˤʤê¤Þ¤¹¤¬¡¢
¤³¤Î Skip ¥ª¥Ú¥ì¡¼¥¿¤È Zip ¥ª¥Ú¥ì¡¼¥¿¤òÁȤ߹ç¤ï¤»¤ë¤³¤È¤Ë¤è¤ê¡¢Subscribe ¤·¤¿ºÝ¤ËξÊý¤ÎÃͤò¼èÆÀ¤·¤Æ DOCounter ¥á¥½¥Ã¥É¤Î°ú¿ô¤È¤·¤ÆÍøÍѤ·¤Æ¤¤¤ë½èÍý¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£



¡¡¤Þ¤È¤áɽ¤Ç¤¹¡£
Í×ÁÇÆâÍÆ°ÕÌ£
¥ì¥·¡¼¥ÐPowerÊѲ½Á°¡Êº¸¥¹¥È¥ê¡¼¥à¡Ë
Âè1°ú¿ôPower.Skip(1)ÊѲ½¸å¡Ê±¦¥¹¥È¥ê¡¼¥à¡Ë
Âè2°ú¿ô(prev, next) => (prev, next)¥Ú¥¢²½¤¹¤ë·ë¹çÍÑ¤ÎÆ¿Ì¾´Ø¿ô¡Ê½ÐÎϥǡ¼¥¿ÄêµÁ¡Ë
·ë²Ì(prev, next)¡ÖÁ°¤ÎÃ͡פȡֿ·¤·¤¤Ã͡פΥ¿¥×¥ë


£µ¡¥¤½¤Î¤Û¤«

£±¡¥¥¢¥Ë¥á¤Î½ªÎ»¸å¤Ë¤À¤±¡¢¥«¥ó¥Þ¶èÀÚ¤ê¤òÉÕ¤±¤¿¤¤¥±¡¼¥¹


¡¡OnUpdate ¥á¥½¥Ã¥É¤ÎÂå¤ï¤ê¤Ë OnComplete ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¤¯¤À¤µ¤¤¡£

txtPower.DOCounter(prevValue, newValue, duration)
    .SetEase(Ease.Linear)
    .SetLink(gameObject)
    .OnComplete(() => {
        txtPower.text = newValue.ToString("N0");
    });

¡¡¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¡¢¿ô»ú¤Î¥¢¥Ë¥á¤Ï¥«¥ó¥Þ¶èÀÚ¤ê¤Ê¤·¡¢¿ô»ú¤Î¥¢¥Ë¥á½ªÎ»¸å¤ÎºÇ½ªÃͤˤΤߥ«¥ó¥Þ¶èÀÚ¤ê¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


£²¡¥DOCounter ¥á¥½¥Ã¥É°Ê³°¤Ç¤Î¼ÂÁõ¥±¡¼¥¹


¡¡DOTween.TO ¥á¥½¥Ã¥É¤ÏÈÆÍÑŪ¤ËÍøÍѤǤ­¤Þ¤¹¡£¤½¤Î¤¿¤áº£²ó¤Î¤è¤¦¤Ê¥«¥ó¥Þ¶èÀÚ¤ê¿ô»ú¤Î¥¢¥Ë¥á¤Ë¤âÍøÍѲÄǽ¤Ç¤¹¡£

int currentValue = prevValue;

DOTween.To(() => currentValue, x => {
    currentValue = x;
    txtPower.text = currentValue.ToString("N0"); // ¢« ¥«¥ó¥Þ¶èÀÚ¤ê
}, newValue, duration)
.SetEase(Ease.Linear)
.SetLink(gameObject);

¡¡¤³¤Á¤é¤Î¼ÂÁõÊýË¡¤Ç¤â¡¢DisplayUpdatePowerByComma ¥á¥½¥Ã¥ÉÆâ¤ÇÍøÍѤ·¤Æ¤¤¤ë¡¢DOCounter ¥á¥½¥Ã¥É ¡Ü OnUpdate ¥á¥½¥Ã¥É¤ÈƱ¤¸½èÍý¤¬ºîÀ®¤Ç¤­¤Þ¤¹¡£


£¶¡¥»²¹Í¥µ¥¤¥È


¡¡DOTween ´ØÏ¢¤Î¥µ¥¤¥È¤Ç¤¹¡£

Demigiant ¸ø¼°¥É¥­¥å¥á¥ó¥È
DOTween - Documentation - DEMIGIANT
https://dotween.demigiant.com/documentation.php
¥¢¥Þ¥¬¥ß¥Ê¥Ö¥í¥° ÍÍ
DOTween¤Î»È¤¤Êý Tween¥¢¥Ë¥á¡¼¥·¥ç¥óÆþÌç¡ÚUnity¡Û
https://amagamina.jp/blog/how-to-dotween/
Qiita @BEATnonanka ÍÍ
DOTween´°Á´¤ËÍý²ò¤¹¤ë¤½¤Î6 ¥¤¥Ù¥ó¥ÈÊÔ
https://qiita.com/BEATnonanka/items/a8c63df029f45e...



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

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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

¹­¹ðÊç½¸Ãæ