ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2024ǯ02·î04Æü(Æü) 17:48:38ÍúÎò
¤³¤Îµ¡Ç½¤ò±þÍѤ·¤Æ¡¢²¼µ¤Î¤è¤¦¤Ë¡¢²èÁü¤Î¥µ¥¤¥º¤Ë¹ç¤ï¤»¤¿¥·¥ë¥¨¥Ã¥È¤òºîÀ®¤¹¤ë¼ÂÁõÎã¤Ç¤¹¡£
¡¡¤Þ¤¿¥·¥ë¥¨¥Ã¥ÈÍѤβèÁü¤ÎÀßÄê¤Ë¤è¤ê¡¢¥·¥ë¥¨¥Ã¥È¤Î¿§¤òÊѲ½¤µ¤»¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡
¡¡º£²ó¤Ï Sprite ¤ËÂФ·¤Æ¤Î¥Þ¥¹¥¯½èÍý¤Î¤¿¤á SpriteMask ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¤¬¡¢
Image ¤Î¾ì¹ç¤Ë¤Ï Mask ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤òÍøÍѤ¹¤ë¤³¤È¤ÇÂбþ¤¬²Äǽ¤Ç¤¹¡£
¡¡¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤¤Ï²¼µ¤ÎÄ̤ê¤Ç¤¹¡£

¡¡EnemySet ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ï CreateEmpty ¤ÇºîÀ®¤·¤Æ¤¤¤ë¡¢¥Õ¥©¥ë¥ÀÌò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£
¤³¤ÎÃæ¤Ë SpriteRenderer ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò»ý¤Ä²èÁüɽ¼¨ÍѤΠBody ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬¤¢¤ê¡¢
¤µ¤é¤Ëº£²óºîÀ®¤¹¤ë ReverseSprite ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¢ SpriteMask ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬¤¢¤ê¤Þ¤¹¡£
¡¡Ä̾ï¤Î²èÁü¤ÎÀßÄêÍѤǤ¹¡£
¥·¥ë¥¨¥Ã¥È¤Ë¤·¤¿¤¤¸µ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£
¡¡SpriteRenderer ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¥¢¥¿¥Ã¥Á¤·¡¢²èÁü¤ÎÍ¥Àè½ç°Ì¤òÀßÄꤷ¤Þ¤¹¡£
¡¡²èÁü¤Î¥µ¥¤¥º¤Ï¡¢¿Æ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤Ï¤Ê¤¯¡¢»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë Body ¤ÇÄ´À°¤·¤Þ¤¹¡£
¡¡¤Þ¤¿ Mask Interaction ¤ÎÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£
Visible Outside Mask ¤ËÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£¤³¤ÎÀßÄê¤Ë¤¹¤ë¤³¤È¤Ç²èÁü¤òÀÚ¤êÈ´¤¡¢¥Þ¥¹¥¯¤¹¤ë¡Ê±£¤¹¡Ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡²¼µ¤Ï¥µ¥ó¥×¥ë²èÁü¤Ç¤¹¡£
Scene ¥Ó¥å¡¼²èÁü

¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü

¡¡Ä̾ï¥Þ¥¹¥¯½èÍý¤ò¤¹¤ë¤È²èÁü¤ò¤¯¤ê¤Ì¤¯·Á¤Ë¤Ê¤ë¤¿¤á¡¢¤½¤Î²èÁü¤Î¤¢¤Ã¤¿Çطʤˤϲ¿¤â±Ç¤ê¤Þ¤»¤ó¡£

¡¡²èÁü¤Ë¥·¥ë¥¨¥Ã¥È¤òºî¤Ã¤ÆµÕ¥Þ¥¹¥¯¤ò¤«¤±¤ë¤Ë¤Ï¡¢ÀìÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬É¬Íפˤʤê¤Þ¤¹¡£
¡¡¤³¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ï 2D ¢ª Square ¤Ç»Í³Ñ¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë¤«¡¢
¶õ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë SpriteRenderer ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¥¢¥¿¥Ã¥Á¤·¤ÆºîÀ®¤·¤Þ¤¹¡£
¡¡¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥µ¥¤¥º¤Ï¡¢¥Þ¥¹¥¯½èÍý¤¹¤ë²èÁü¤òʤ¤¦¤³¤È¤¬²Äǽ¤Ê¥µ¥¤¥º¤Ë¤·¤Þ¤¹¡£
¡¡²èÁü¤Ë¤ÏǤ°Õ¤Î£±¿§¤Î²èÁü¤òÀßÄꤷ¤Þ¤¹¡£
¤³¤Î¤È¤¤Î²èÁü¤Î¿§¤¬¥·¥ë¥¨¥Ã¥È¤Î¿§¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢ÀÖ¤¤²èÁü¤òÀßÄꤹ¤ì¤Ð¡¢ÀÖ¤¤¥·¥ë¥¨¥Ã¥È¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¹õ¤Î¥·¥ë¥¨¥Ã¥È¤Ë¤Ä¤¤¤Æ¤Ï¡¢À֤ʤɤθµ¤Î¿§¤ò¹õ¤¯¤¹¤ë¤³¤È¤ÇÂбþ²Äǽ¤Ç¤¢¤ë¤¿¤á¡¢
¤Ê¤ë¤Ù¤¯¹õ°Ê³°¤Î¿§¤Î²èÁü¤ÇÀßÄꤷ¤Æ¤ª¤¯¤È£²¿§¤ËÊѲ½²Äǽ¤Ç¤¹¡£
¡¡¤Þ¤¿²èÁü¤ò¥Þ¥¹¥¯¤·¤¿ºÝ¤Ëɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤·¤¿¤¤¤Î¤Ç¡¢¸µ¤Î²èÁü¤è¤ê¤âɽ¼¨¤ÎÍ¥Àè½ç°Ì¤òÄ㤯ÀßÄꤷ¤Æ¤ª¤¤Þ¤¹¡£
¡¡ºÇ¤â½ÅÍ×¤Ê¤Î¤Ï Mask Interaction ¤ÎÀßÄê¤Ç¤¹¡£
Visible Inside Mask ¤ËÀßÄꤷ¤Æ¤¯¤À¤µ¤¤¡£¤³¤ÎÀßÄê¤Ë¤¹¤ë¤³¤È¤Ç¥·¥ë¥¨¥Ã¥È¤ò¤Ä¤±¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡²¼µ¤Ï¥µ¥ó¥×¥ë²èÁü¤Ç¤¹¡£¤³¤³¤Ç¤ÏÀ֤βèÁü¤òÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
¡¡¿§¤ò¹õ¤¯¤¹¤ë¤È¡¢¹õ¤¤²èÁü¤Ë¤Ê¤ê¤Þ¤¹¡£


¡¡¸µ¤Î²èÁü¤è¤ê¤âÍ¥Àè½ç°Ì¤¬Ä㤯¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¡¢¸µ¤Î²èÁü¤è¤ê¤âÂ礤ʥµ¥¤¥º¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤ª¤¤Þ¤·¤ç¤¦¡£
¡¡¥Þ¥¹¥¯½èÍý¤ò¤«¤±¤ë¤¿¤á¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£
Create Empty ¤Ç¶õ¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢SpriteMask ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
¡¡¤Ê¤ª¡¢¥Þ¥¹¥¯½èÍý¤¹¤ë²èÁüÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£

¡¡¤³¤Î»þÅÀ¤Ç¡¢Àè¤ËºîÀ®¤·¤Æ¤¤¤ë£²¤Ä¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î SpriteRenderer Æâ¤Î Mask Interaction ¤ÎÀßÄ꤬Àµ¤·¤¤¾ì¹ç
¼«Æ°Åª¤Ë¥·¥ë¥¨¥Ã¥È¤¬¤«¤«¤ë·Á¤Ç¥Þ¥¹¥¯½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡¤¦¤Þ¤¯¤¤¤«¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢Á°¤Ëºî¤Ã¤¿£²¤Ä¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î SpriteRenderer ¤ÎÀßÄê¤ò¸«Ä¾¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡´ðËÜŪ¤Ë¤Ï¥²¡¼¥àÆâ¤ÇưŪ¤Ë¥·¥ë¥¨¥Ã¥È¤ò½Ð¤¹¥±¡¼¥¹¤¬Â¿¤¤¤È»×¤ï¤ì¤Þ¤¹¤Î¤Ç¡¢
ºÇ½é¤Ï SpriteMask ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î Enabled ¤ò false ¤ËÀßÄꤷ¤Æ¥Þ¥¹¥¯½èÍý¤òÄä»ß¤µ¤»¤Æ¤ª¤¯¤È¤è¤¤¤Ç¤·¤ç¤¦¡£
¡¡µÕ¤Ë¥·¥ë¥¨¥Ã¥È¾õÂÖ¤«¤éÍøÍѤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¤½¤Î¤Þ¤Þ Enebled ¤òÆþ¤ì¤Æ¤ª¤¤Þ¤·¤ç¤¦¡£

¡¡°Ê¾å¤Ç´°À®¤Ç¤¹¡£
¡¡²¼µ¤Ï¥µ¥ó¥×¥ë¥³¡¼¥É¤Ç¤¹¡£
¥Ü¥¿¥ó¤ò²¡¤¹¤¿¤Ó¤Ë SpriteMask ¤Î Enebled ¤¬ÀÚ¤êÂؤï¤ê¡¢¥·¥ë¥¨¥Ã¥È¤Î¥ª¥ó¥ª¥Õ¤ò³Îǧ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
SpriteMaskController.cs
using UnityEngine; public class SpriteMaskController : MonoBehaviour { [SerializeField] private SpriteMask maskComponent; private void Update() { // null ¥Á¥§¥Ã¥¯¤ò¹Ô¤¤¡¢maskComponent¤¬¥¢¥µ¥¤¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï½èÍý¤ò¹Ô¤ï¤Ê¤¤ if (maskComponent == null) { Debug.LogError("SpriteMask¥³¥ó¥Ý¡¼¥Í¥ó¥È¤¬¥¢¥µ¥¤¥ó¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£"); return; } // ¥¹¥Ú¡¼¥¹¥¡¼¤¬²¡¤µ¤ì¤¿¤é if (Input.GetKeyDown(KeyCode.Space)) { // SpriteMask¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Îenabled¥×¥í¥Ñ¥Æ¥£¤ò¥È¥°¥ë ToggleSpriteMask(); } } /// <summary> /// SpriteMask¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Îenabled¥×¥í¥Ñ¥Æ¥£¤ÎÀÚ¤êÂؤ¨ /// </summary> private void ToggleSpriteMask() { // SpriteMask¤Îenabled¥×¥í¥Ñ¥Æ¥£¤òȿž maskComponent.enabled = !maskComponent.enabled; } }
¡¡Àµ¾ï¤ËÆ°ºî¤¹¤ë¤³¤È¤ò³Îǧ¤Ç¤¤¿¤é¡¢¼ÂºÝ¤Ë¥²¡¼¥àÆâ¤Î½èÍý¤ò¥¤¥á¡¼¥¸¤·¤Æ¼ÂÁõÊýË¡¤ò¸¡Æ¤¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡¡²¼µ¤Ï¥µ¥ó¥×¥ë¥³¡¼¥É¤Ç¤¹¡£
¡¡¤³¤Î½èÍý¤Ç¤Ï»ØÄꤷ¤¿¥Ü¥¿¥ó¤ò²¡¤¹¤³¤È¤Ë¤è¤ê¡¢¥Þ¥¹¥¯¤ò¤«¤±¤Æ¥·¥ë¥¨¥Ã¥È¾õÂ֤ˤ·¤Þ¤¹¡£
¤½¤Î¸å¡¢¥·¥ë¥¨¥Ã¥È¾õÂ֤Τޤޡ¢¥·¥ë¥¨¥Ã¥È¤Î¿§¤ò°ìÄê»þ´Ö¤´¤È¤Ë¸µ¤Î¿§¤È¹õ¿§¤È¤Ç¸ò¸ß¤ËÆþ¤ìÂؤ¨¤ë¤³¤È¤ÇÅÀÌǾõÂÖ¤òºî¤ê¤Þ¤¹¡£
ÅÀÌǸ塢¥Þ¥¹¥¯¤ò²ò½ü¤·¤Æ¸µ¤Î²èÁü¤ËÌᤷ¤Þ¤¹¡£
¡¡Î㤨¤Ð¡¢¥À¥á¡¼¥¸¤ò¼õ¤±¤¿ºÝ¤Î½èÍý¤Ê¤É¤¬ÁÛÄꤵ¤ì¤ë¥±¡¼¥¹¤Ç¤¹¡£
SilhouetteEffectController.cs
using System.Collections; using UnityEngine; public class SilhouetteEffectController : MonoBehaviour { [SerializeField] private SpriteMask spriteMask; [SerializeField] private SpriteRenderer spriteRenderer; [SerializeField] private KeyCode activationKey = KeyCode.Space; [SerializeField] private float blinkInterval = 0.2f; // 1²ó¤¢¤¿¤ê¤ÎÅÀÌǤλþ´Ö [SerializeField] private int blinkCount = 2; // ÅÀÌDzó¿ô private bool isProcessing = false;¡¡// ÅÀÌÇÃ椫¤É¤¦¤«¤Î³Îǧ¥Õ¥é¥°¡£true ¤Ê¤éÅÀÌÇÃæ private void Update() { // ÅÀÌÇÃæ¤Ç¤Ê¤¤¾ì¹ç¤Ç¡¢¤«¤Ä»ØÄꤷ¤¿¥¡¼¤¬²¡¤µ¤ì¤¿¤é if (!isProcessing && Input.GetKeyDown(activationKey)) { // ¥·¥ë¥¨¥Ã¥È½èÍý¤ò³«»Ï StartCoroutine(ActivateSilhouette()); } } /// <summary> /// ¥·¥ë¥¨¥Ã¥È½èÍý /// </summary> /// <returns></returns> private IEnumerator ActivateSilhouette() { // ÅÀÌÇÃæ¤Î¥Õ¥é¥°¤ò¤¿¤Æ¤ë isProcessing = true; // ¥·¥ë¥¨¥Ã¥ÈÍѤΥޥ¹¥¯¤ò͸ú²½ spriteMask.enabled = true; // ÅÀÌǽèÍý¡£yield return ÉÕ¤¤Î StartCoroutine ¤È¤¹¤ë¤³¤È¤Ç¡¢ÅÀÌǽèÍý¤¬½ª¤ï¤ë¤Þ¤Ç¼¡¤Î½èÍý¤Ë°Ü¤é¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¤¤ë yield return StartCoroutine(BlinkEffect()); // ÅÀÌǽèÍý¤¬½ª¤ï¤Ã¤¿¤Î¤Ç¥·¥ë¥¨¥Ã¥ÈÍѤΥޥ¹¥¯¤ò̵¸ú²½ spriteMask.enabled = false; ¡¡¡¡¡¡¡¡// ÅÀÌǤ¬½ª¤ï¤Ã¤¿¤Î¤Ç¥Õ¥é¥°¤ò¤ª¤í¤¹ isProcessing = false; } /// <summary> /// ÅÀÌǽèÍý /// </summary> /// <returns></returns> private IEnumerator BlinkEffect() { for (int i = 0; i < blinkCount; i++) { // ¸µ¤Î¿§¤«¤é¹õ¿§¤ËÊѹ¹ spriteRenderer.color = Color.black; yield return new WaitForSeconds(blinkInterval); // ¹õ¿§¤«¤é¸µ¤Î¿§¤ËÊѹ¹ spriteRenderer.color = Color.white; yield return new WaitForSeconds(blinkInterval); } } ¡¡¡¡/// <summary> ¡¡¡¡/// ¥·¥ë¥¨¥Ã¥È¸ú²Ì¤ò³°Éô¤«¤é¼Â¹Ô²Äǽ¤Ê¥é¥Ã¥×Íѥ᥽¥Ã¥É ¡¡¡¡/// </summary> ¡¡¡¡public void StartSilhouetteEffect() ¡¡¡¡{ ¡¡¡¡if (!isProcessing) ¡¡¡¡{ ¡¡¡¡StartCoroutine(ActivateSilhouette()); ¡¡¡¡} ¡¡¡¡} }¡¡
¡¡³°Éô¥¯¥é¥¹¤«¤é¤ÏľÀÜ¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£
¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ï¡¢¼Â¹Ô¸µ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬¥²¡¼¥àÆâ¤Ë»Ä¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤¿¤á¡¢
Ëü¤¬°ì¡¢¼Â¹Ô¸å¤Ë¼Â¹Ô¸µ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤Æ¤·¤Þ¤¦¤È¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤¬Ää»ß¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¡¡¤è¤Ã¤Æ³°Éô¥¯¥é¥¹¤«¤é¤Ï¥é¥Ã¥×ÍѤΥ᥽¥Ã¥É¤ò¼Â¹Ô¤·¡¢¤½¤Î¥¯¥é¥¹Æâ¤Ç¼«Ê¬¤Ç¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò¼Â¹Ô¤µ¤»¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤ÊÀ߷פˤ·¤Æ¤ª¤¯¤³¤È¤Ç°ÂÁ´¤Ë¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¾åµ¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¡¤ò¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯¡¢
UniTask ¤È async / await ¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¤ËÃÖ¤´¹¤¨¤Æ¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤·¤¿¤â¤Î¤Ç¤¹¡£
SilhouetteEffectController.cs
using Cysharp.Threading.Tasks; using System.Threading; using UnityEngine; public class SilhouetteEffectController : MonoBehaviour { [SerializeField] private SpriteMask spriteMask; [SerializeField] private SpriteRenderer spriteRenderer; [SerializeField] private KeyCode activationKey = KeyCode.Space; [SerializeField] private float blinkInterval = 0.2f; // 1²ó¤¢¤¿¤ê¤ÎÅÀÌǤλþ´Ö [SerializeField] private int blinkCount = 2; // ÅÀÌDzó¿ô private CancellationTokenSource cts; private bool isProcessing = false;¡¡// ÅÀÌÇÃ椫¤É¤¦¤«¤Î³Îǧ¥Õ¥é¥°¡£true ¤Ê¤éÅÀÌÇÃæ private void Start() { cts = CancellationTokenSource.CreateLinkedTokenSource(this.GetCancellationTokenOnDestroy()); } private async void Update() { // ÅÀÌÇÃæ¤Ç¤Ê¤¤¾ì¹ç¤Ç¡¢¤«¤Ä»ØÄꤷ¤¿¥¡¼¤¬²¡¤µ¤ì¤¿¤é if (!isProcessing && Input.GetKeyDown(activationKey)) { // ¥·¥ë¥¨¥Ã¥È½èÍý¤ò³«»Ï await ActivateSilhouetteAsync(); } } /// <summary> /// ¥·¥ë¥¨¥Ã¥È½èÍý /// </summary> /// <returns></returns> public async UniTask ActivateSilhouetteAsync() { // ÅÀÌÇÃæ¤Î¥Õ¥é¥°¤ò¤¿¤Æ¤ë isProcessing = true; // ¥·¥ë¥¨¥Ã¥ÈÍѤΥޥ¹¥¯¤ò͸ú²½ spriteMask.enabled = true; // ÅÀÌǽèÍý await BlinkEffectAsync(); // ÅÀÌǽèÍý¤¬½ª¤ï¤Ã¤¿¤Î¤Ç¥·¥ë¥¨¥Ã¥ÈÍѤΥޥ¹¥¯¤ò̵¸ú²½ spriteMask.enabled = false; // ÅÀÌǤ¬½ª¤ï¤Ã¤¿¤Î¤Ç¥Õ¥é¥°¤ò¤ª¤í¤¹ isProcessing = false; } /// <summary> /// ÅÀÌǽèÍý /// </summary> /// <returns></returns> private async UniTask BlinkEffectAsync() { for (int i = 0; i < blinkCount; i++) { // ¸µ¤Î¿§¤«¤é¹õ¿§¤ËÊѹ¹ spriteRenderer.color = Color.black; await UniTask.Delay((int)(blinkInterval * 1000), cts.Token); // ¹õ¿§¤«¤é¸µ¤Î¿§¤ËÊѹ¹ spriteRenderer.color = Color.white; await UniTask.Delay((int)(blinkInterval * 1000), cts.Token); } } private void OnDestroy() { cts?.Cancel(); cts?.Dispose(); } }
¡¡UniTask ¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¤Ï³°Éô¥¯¥é¥¹¤«¤éľÀܼ¹Ԥ·¤Æ¤âÌäÂê¤Ê¤¤¤¿¤á¡¢¥é¥Ã¥×ÍѤΥ᥽¥Ã¥É¤¬ÉÔÍפˤʤäƤ¤¤Þ¤¹¡£
Âå¤ï¤ê¤Ë UniTask ¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸Â¸´ü´Ö¤Èɳ¤Å¤«¤Ê¤¤¤¿¤á¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥°¤Ç¤â½èÍý¤ÏÄä»ß¤·¤Þ¤»¤ó¡£
¡¡¤³¤Î¤è¤¦¤ÊÆÃÀ¤Ë¤è¤ê¡¢¼êÆ°¤Ç¥¥ã¥ó¥»¥ë½èÍý¤ËÂбþ¤¹¤ëɬÍפ¬¤¢¤ë¤¿¤á¡¢CancellationTokenSource ¤òÍøÍѤ·¤Æ¥¥ã¥ó¥»¥ëÍѤΥȡ¼¥¯¥ó¤òºîÀ®¤·¡¢
OnDestroy ¥á¥½¥Ã¥É¤Ë¤ÆÈóƱ´ü½èÍý¤òÄä»ß¤·¤Æ¤¤¤Þ¤¹¡£
¥Æ¥é¥·¥å¡¼¥ë¥Ö¥í¥° ÍÍ
¡ÚUnity¡ÛSpriteMask¤ÇSprite¤Ë¥Þ¥¹¥¯¤ò³Ý¤±¤ë±é½Ð¤¬¿§¡¹¤ÈÌÌÇò¤¤
https://tsubakit1.hateblo.jp/entry/2017/07/21/0127...
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯