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

DoTween¤òÍøÍѤ·¤Æ¥Æ¥­¥¹¥È¤ò1ʸ»ú¤º¤Äɽ¼¨¤µ¤»¤ë¡Ê̤¡Ë

¡¡DoTween¤ÎDoTextµ¡Ç½¤òÍøÍѤ·¤Æ¡¢Text¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥Æ¥­¥¹¥È¤Ëʸ»ú¤ò£±Ê¸»ú¤º¤Ä¡Êʸ»úÁ÷¤ê¡Ëɽ¼¨¤µ¤»¤ëÊýË¡¤Ç¤¹¡£

¡¡List¤Ëɽ¼¨¤µ¤»¤¿¤¤Ê¸»úÎó¤ò½çÈÖ¤ËÍÑ°Õ¤·¤Æ¤ª¤¤¤Æ¡¢¤½¤ì¤ò£±¥á¥Ã¥»¡¼¥¸¤º¤Äɽ¼¨¤µ¤»¤Þ¤¹¡£
°Ê²¼¤Îµ¡Ç½¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¡¦£±¥á¥Ã¥»¡¼¥¸Æâ¤Îʸ»ú¤ò£±Ê¸»ú¤º¤Äɽ¼¨¤¹¤ë¡Êʸ»úÁ÷¤ê¡Ë
¡¡¡¦Ê¸»ú¿ô¤Ë´Ø¤ï¤é¤º¡¢£±Ê¸»úÅö¤¿¤ê¡¢XÉäÇɽ¼¨¤¹¤ë
¡¡¡¦Ê¸»úÁ÷¤ê¤ÎÅÓÃæ¤Ç¥¯¥ê¥Ã¥¯¡Ê¥¿¥Ã¥×¡Ë¤·¤¿¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¥Æ¥­¥¹¥È¤ÎÁ´Ê¸¤òɽ¼¨¤¹¤ë(¥¹¥­¥Ã¥×µ¡Ç½)¡¡
¡¡¡¦Á´Ê¸É½¼¨»þ¡¢¤Þ¤À̤ɽ¼¨¤Î¥Æ¥­¥¹¥È¤¬»Ä¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¥¿¥Ã¥×¤òÂ¥¤¹¥¤¥á¡¼¥¸¤òɽ¼¨¤¹¤ë
¡¡¡¦¥¯¥ê¥Ã¥¯¡Ê¥¿¥Ã¥×¡Ë¤Ç¼¡¤Î¥Æ¥­¥¹¥È¤Îʸ»úÁ÷¤ê¤ò³«»Ï¤¹¤ë

¡¡¤³¤Á¤é¤Îµ­»ö¤ò»²¹Í¤Ë¤µ¤»¤Æ夭¤Þ¤·¤¿¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£
¡¡
¤¤¤ê¤³ÍÍ
Unity C# ¤Ç¥¢¥É¥Ù¥ó¥Á¥ã¡¼É÷¥Æ¥­¥¹¥ÈºîÀ®
https://qiita.com/irico/items/3a1bb68257547e4a2908

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class TextMessageViewer : MonoBehaviour
{
    public List<string> messageList = new List<string>();¡¡¡¡// ɽ¼¨¤¹¤ë¥á¥Ã¥»¡¼¥¸¤Î¥ê¥¹¥È
    public float wordSpeed;                                  // 1ʸ»úÅö¤¿¤ê¤Îɽ¼¨Â®ÅÙ
    
    public Text txtMessage;                                  // ¥á¥Ã¥»¡¼¥¸É½¼¨ÍÑ
    public GameObject iconNextTap;             ¡¡            // ¥¿¥Ã¥×¤òÂ¥¤¹¥¤¥á¡¼¥¸É½¼¨

    private int messageListIndex = 0;                        // ɽ¼¨¤¹¤ë¥á¥Ã¥»¡¼¥¸¤ÎÇÛÎóÈÖ¹æ
    private int wordCount;                                   // £±¥á¥Ã¥»¡¼¥¸Åö¤¿¤ê¤Îʸ»ú¤ÎÁí¿ô
    private bool isTapped = false;                      ¡¡   // Á´Ê¸É½¼¨¸å¤Ë¥¿¥Ã¥×¤òÂԤĥե饰
    private bool isDisplayedAllMessage = false;              // Á´¥á¥Ã¥»¡¼¥¸É½¼¨´°Î»¤Î¥Õ¥é¥°

    private IEnumerator waitCoroutine;                       // Á´Ê¸É½¼¨¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö¥á¥½¥Ã¥ÉÂåÆþÍÑ¡£Stop¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤ª¤¯
    private Tween tween;                                     // DoTweenºÆÀ¸ÍÑ¡£Kill¤Ç¤­¤ë¤è¤¦¤ËÂåÆþ¤·¤Æ»ÈÍѤ¹¤ë

    void Start() {
        // £±Ê¸»ú¤º¤Äʸ»ú¤òɽ¼¨¤¹¤ë½èÍý¤ò¥¹¥¿¡¼¥È
        StartCoroutine(DisplayMessage());
    }
 
    void Update() {
        if (isDisplayedAllMessage) {
            // Á´¤Æ¤Î¥á¥Ã¥»¡¼¥¸É½¼¨¤¬½ªÎ»¤·¤Æ¤¤¤¿¤é½èÍý¤ò¹Ô¤ï¤Ê¤¤
            return;
        }

        if (Input.GetMouseButtonDown(0) && tween != null) {
            // ʸ»úÁ÷¤êÃæ¤Ë¥¿¥Ã¥×¤·¤¿¾ì¹ç¡¢Ê¸»úÁ÷¤ê¤òÄä»ß
            tween.Kill();
            tween = null;
            // ʸ»úÁ÷¤ê¤Î¤¿¤á¤ÎÂÔµ¡»þ´Ö¤âÄä»ß
            if (waitCoroutine != null) {
                StopCoroutine(waitCoroutine);
                waitCoroutine = null;
            }
            // Á´Ê¸¤ò¤Þ¤È¤á¤Æɽ¼¨
            txtMessage.text = messageList[messageListIndex];
            
            // ¥¿¥Ã¥×¤¹¤ë¤Þ¤ÇÁ´Ê¸¤òɽ¼¨¤·¤¿¤Þ¤ÞÂÔµ¡
            StartCoroutine(NextTouch());
        }

        if (Input.GetMouseButtonDown(0) && wordCount == messageList[messageListIndex].Length) {
            // Á´Ê¸É½¼¨Ãæ¤Ë¥¿¥Ã¥×¤·¤¿¤éÁ´Ê¸É½¼¨¤ò½ªÎ»
            isTapped = true;
        }
    }

    /// <summary>
    /// £±Ê¸»ú¤º¤Äʸ»ú¤òɽ¼¨
    /// </summary>
    /// <returns></returns>
    private IEnumerator DisplayMessage() {
        isTapped = false;
        
        // ɽ¼¨¥Æ¥­¥¹¥È¤ÈTween¤ò¥ê¥»¥Ã¥È
        txtMessage.text = "";
        tween = null;
        
        // ʸ»úÁ÷¤ê¤ÎÂÔµ¡»þ´Ö¤ò½é´ü²½
        if (waitCoroutine != null) {
            StopCoroutine(waitCoroutine);
            waitCoroutine = null;
        }

        // 1ʸ»ú¤º¤Ä¤Îʸ»úÁ÷¤êɽ¼¨¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¥ë¡¼¥×
        while (messageList[messageListIndex].Length > wordCount) {
            // wordSpeedÉ䴤Ȥˡ¢Ê¸»ú¤ò1ʸ»ú¤º¤Äɽ¼¨¡£SetEase(Ease.Linear)¤ò¥»¥Ã¥È¤¹¤ë¤³¤È¤Ç°ìÄê¤Îɽ¼¨´Ö³Ö¤Çɽ¼¨
            tween = txtMessage.DOText(messageList[messageListIndex], messageList[messageListIndex].Length * wordSpeed).
                SetEase(Ease.Linear).OnComplete(() => {
                    Debug.Log("Á´Ê¸É½¼¨ ´°Î»");
                    // (TODO) ¾¤Ë¤â½èÍý¤¬¤¢¤ì¤ÐÄɲ乤ë

                });
            // ʸ»úÁ÷¤êɽ¼¨¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö¤òÀßÄꤷ¤ÆÂÔµ¡¤ò¼Â¹Ô
            waitCoroutine = WaitTime();
            yield return StartCoroutine(waitCoroutine);
        }
        
        // ¥¿¥Ã¥×¤¹¤ë¤Þ¤ÇÁ´Ê¸¤òɽ¼¨¤·¤¿¤Þ¤ÞÂÔµ¡
        StartCoroutine(NextTouch());
    }

    /// <summary>
    /// Á´Ê¸É½¼¨¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö(ʸ»ú¿ô¡ß1ʸ»úÅö¤¿¤ê¤Îɽ¼¨»þ´Ö)
    /// ¥¿¥Ã¥×¤·¤ÆÁ´Ê¸¤ò¤Þ¤È¤á¤Æɽ¼¨¤·¤¿¾ì¹ç¤Ë¤Ï¤³¤ÎÂÔµ¡»þ´Ö¤òÄä»ß
    /// </summary>
    /// <returns></returns>
    private IEnumerator WaitTime() {
        yield return new WaitForSeconds(messageList[messageListIndex].Length * wordSpeed);
    }

    /// <summary>
    /// ¥¿¥Ã¥×¤¹¤ë¤Þ¤ÇÁ´Ê¸¤òɽ¼¨¤·¤¿¤Þ¤ÞÂÔµ¡
    /// </summary>
    /// <returns></returns>
    private IEnumerator NextTouch() {
        yield return null;
        // ɽ¼¨¤·¤¿Ê¸»ú¤ÎÁí¿ô¤ò¹¹¿·
        wordCount = messageList[messageListIndex].Length;

        // ¥¿¥Ã¥×¤òÂ¥¤¹¥¤¥á¡¼¥¸É½¼¨
        iconNextTap.SetActive(true);

        // ¥¿¥Ã¥×¤òÂÔ¤Ä
        yield return new WaitUntil(() => isTapped);

        iconNextTap.SetActive(false);

        // ¼¡¤Î¥á¥Ã¥»¡¼¥¸½àÈ÷
        messageListIndex++;
        wordCount = 0;

        // ¥ê¥¹¥È¤Ë̤ɽ¼¨¤Î¥á¥Ã¥»¡¼¥¸¤¬»Ä¤Ã¤Æ¤¤¤ë¾ì¹ç
        if (messageListIndex < messageList.Count) {
            // £±Ê¸»ú¤º¤Äʸ»ú¤òɽ¼¨¤¹¤ë½èÍý¤ò¥¹¥¿¡¼¥È
            StartCoroutine(DisplayMessage());
        } else {
            // Á´¥á¥Ã¥»¡¼¥¸É½¼¨½ªÎ»
            isDisplayedAllMessage = true;
                        
            // ¼¡¤Î½èÍý¤Ø
        }
    }
}

»ÈÍÑÎã

¡¡CanvasÆâ¤Ë¿·¤·¤¯Text¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£¤³¤Á¤é¤¬¥Æ¥­¥¹¥È¤òɽ¼¨¤µ¤»¤ë¤¿¤á¤Î¥¨¥ê¥¢¤Ç¤¹¡£
̾Á°¤òtxtMessage¤ËÊѹ¹¤·¤Þ¤¹¡£¡Ê¥¢¥µ¥¤¥ó¾ðÊó¤ÈƱ¤¸Ì¾Á°¤Ë¤·¤Æ¤ª¤¯´ÉÍý¤¬³Ú¤Ç¤¹¡£¡Ë

¡¡CanvasÆâ¤Ë¶õ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢Ì¾Á°¤òTextMessageViewer¤ËÊѹ¹¤·¤Þ¤¹¡£
ºîÀ®¤·¤¿Æ±Ì¾¤ÎTextMessageViewer¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¤Æ¥¢¥¿¥Ã¥Á¤¬Ìµ»ö¤Ë¹Ô¤ï¤ì¤Æ¤¤¤ì¤Ð¡¢public¤Î¹àÌܤ¬¥¢¥µ¥¤¥ó¾ðÊó¤È¤·¤Æɽ¼¨¤µ¤ì¤Þ¤¹¤Î¤Ç¤³¤Á¤é¤òÀßÄꤷ¤Þ¤¹¡£
¡¡
¡¡messageList¤ÏList¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢Size¤ò0¤«¤éǤ°Õ¤Î¿ô¤ËÊѹ¹¤·¤Þ¤¹¡£Element¤¬ºîÀ®¤µ¤ì¤Þ¤¹¤Î¤Ç
¤³¤Á¤é¤Ë£±¤Ä¤Î¥á¥Ã¥»¡¼¥¸¤È¤·¤Æɽ¼¨¤·¤¿¤¤Ê¸»úÎó¤òÅÐÏ¿¤·¤Þ¤¹¡£
¡¡Element£±¤Ä¤¬£±¤Ä¤Î¥á¥Ã¥»¡¼¥¸¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤Î¥á¥Ã¥»¡¼¥¸¤Îɽ¼¨¤¬½ª¤ï¤ë¤È¡¢¼¡¤ÎElementÆâ¤Îʸ»úÎ󤬥á¥Ã¥»¡¼¥¸¤È¤·¤Æɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡wordSpeed¤Ï1ʸ»úÅö¤¿¤ê¤Îɽ¼¨Â®Å٤Ǥ¹¡£0.2f¡Á0.3fÁ°¸å¤Ë¤¹¤ë¤È¡¢Ê¸»úÁ÷¤ê¤¬¥¹¥à¡¼¥¹¤Ëή¤ì¤Æ¤¤¤¯´¶¤¸¤Ë¸«¤¨¤Þ¤¹¡£
Ŭµ¹Ä´À°¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£

¡¡txtMessage¤Ï¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤ë¥¨¥ê¥¢¤Ç¤¹¡£Àè¤Û¤ÉºîÀ®¤·¤¿¡¢Text¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ëtxtMessage¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤Þ¤·¤ç¤¦¡£
ÊÑ¿ô̾¤È¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È̾¤òƱ¤¸Ì¾Á°¤Ë¤·¤Æ¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¾È¤é¤·¹ç¤ï¤»¤Æ¤ß¤¿¤È¤­¤Ë¡¢Æ±Ì¾°Ê³°¤Î¾ì¹ç¤Ï¥¢¥µ¥¤¥ó´Ö°ã¤¤¤Ç¤¢¤ë¤Èµ¤¤Å¤±¤ë¤È»×¤¤¤Þ¤¹¡£

¡¡iconNextTap¤Ë¤Ï¡¢¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤¿ºÝ¤Ë¥¿¥Ã¥×¤òÂ¥¤¹¥¤¥á¡¼¥¸¤òÅÐÏ¿¤·¤Æ¤ª¤­¤Þ¤¹¡£¤³¤Á¤é¤ÏǤ°Õ¤Î¥¤¥á¡¼¥¸¤ä¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Ê¤É¤òÍÑ°Õ¤·¤Æ¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£
º£²ó¤ÏImage¤òDoTween¤ò»È¤Ã¤ÆÅÀÌǤµ¤»¤Æ¤¤¤Þ¤¹¡£


Æ°ºî»þ¤ÎÎã¤Ç¤¹¡££±¤Ä¤Î¥á¥Ã¥»¡¼¥¸¤Ë´Þ¤Þ¤ì¤ëʸ»ú¤¬¤¹¤Ù¤Æɽ¼¨¤µ¤ì¤ë¤È¥¿¥Ã¥×¤òÂ¥¤¹¥¤¥á¡¼¥¸¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
https://gyazo.com/ec5afc5c0581ed84c71c5bc7863322e4

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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