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; } }
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()); ¡¡¡¡} ¡¡¡¡} }¡¡
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(); } }
¥Æ¥é¥·¥å¡¼¥ë¥Ö¥í¥° ÍÍ
¡ÚUnity¡ÛSpriteMask¤ÇSprite¤Ë¥Þ¥¹¥¯¤ò³Ý¤±¤ë±é½Ð¤¬¿§¡¹¤ÈÌÌÇò¤¤
https://tsubakit1.hateblo.jp/entry/2017/07/21/0127...