ºÇ½ª¹¹¿·¡§
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
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- Áí¹ç




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