ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2020ǯ07·î19Æü(Æü) 19:21:08ÍúÎò
¡¡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; // ¼¡¤Î½èÍý¤Ø } } }
̾Á°¤ò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
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- Áí¹ç
¥³¥á¥ó¥È¤ò¤«¤¯