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

¡¡£²£Ä¥È¥Ã¥×¥À¥¦¥ó(¥È¥Ã¥×¥Ó¥å¡¼)¥²¡¼¥à¤Ë¤ª¤±¤ë¡¢¥È¥ó¥Í¥ë¤Ê¤É¤Î²èÁü¤Î½Å¤Ê¤ê¤Îɽ¸½¤Ë¤Ä¤¤¤Æ¤Î¼ÂÁõÎã¤Ç¤¹¡£



Àß·×


¡¡¥³¥é¥¤¥À¡¼¤È OnTriggerStay2D ¤È Exit2D ¤ò³èÍѤ·¡¢¥³¥é¥¤¥À¡¼ÆâÉô¤Ë¤¤¤ë¾ì¹ç¡¢¥¢¥µ¥¤¥ó¤µ¤»¤Æ¤¤¤ë²èÁü¤Îɽ¼¨Í¥Àè½ç°Ì¤è¤ê¤â¥×¥ì¥¤¥ä¡¼¤ÎÍ¥Àè½ç°Ì¤ò²¼¤²¤ë¤³¤È¤Ç¡¢
¥È¥ó¥Í¥ëÆâ¤ä¡¢·úʪÆâÉô¤Ë¤¤¤ë¤«¤Î¤è¤¦¤Ë¥×¥ì¥¤¥ä¡¼¤ò¸«¤¨¤Ê¤¤¾õÂÖ¤ËÀÚ¤êÂؤ¨¡¢¥³¥é¥¤¥À¡¼³°¤Ë½Ð¤¿»þ¤Ë¸µ¤ÎÍ¥Àè½ç°Ì¤Ë¤â¤É¤¹¤è¤¦¤ËÀ©¸æ¤·¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤ÊÀ©¸æ¤ò²Ã¤¨¤ë¤³¤È¤Ç¡¢³Æ¥ª¥Ö¥¸¥§¥¯¥È¤´¤È¤Ë²èÁü¤ÎÍ¥Àè½ç°Ì¤ÎÀÚ¤êÂؤ¨¤¬²Äǽ¤Ë¤Ê¤ê¡¢£²£Ä¥²¡¼¥àÆâ¤Ç¤Î¥È¥ó¥Í¥ë¤Ê¤É¤Îɽ¸½¤¬¼Â¸½¤Ç¤­¤Þ¤¹¡£


ÉÁ²è´Ø·¸


¡¡ÉÁ²è¤Ë¤Ä¤¤¤Æ¤È¡¢°ÜÆ°ÈϰϤÎÀ©¸æ¤Ë¤Ä¤¤¤Æ¤ÏÊÌ¡¹¤Î½èÍý¤È¤·¤Æ¹Í¤¨¤Þ¤¹¡£

¡¡ÉÁ²èÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤È¡¢¤½¤ÎÀÚ¤êÂؤ¨¤ò¹Ô¤¦¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤È¤ÏÊÌ¡¹¤ËÍÑ°Õ¤¹¤ëÊý¼°¤Ç¤¹¡£
¤³¤Î¤è¤¦¤ËʬΥ¤·¤Æ´ÉÍý¤¹¤ë¤³¤È¤Ç¡¢ÀÚ¤êÂؤ¨ÂоݤβèÁü¤ò¥¢¥µ¥¤¥óÊѹ¹¤¹¤ë¤À¤±¤ÇÊѹ¹²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£


¡ã¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¡ÇÛÃÖÎã¡ä



¡ã¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼Îã¡ä



¡¡¤³¤Î¾ì¹ç¤Ë¤Ï¡¢¥È¥ó¥Í¥ëÉôʬ¤Ë¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÇÛÃÖ¤·¡¢
¤³¤ÎÉôʬ¤Ë¿¯Æþ¤·¤¿ºÝ¤Ë²èÁü¤Îɽ¼¨Í¥Àè½ç°Ì¤òÀÚ¤êÂؤ¨¤Æ¡¢¥È¥ó¥Í¥ëÉôʬ¤¬ºÇÁ°Ì̤ˤ¯¤ë¤è¤¦¤ËÀ©¸æ¤·¤Þ¤¹¡£
¤½¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¥­¥ã¥é¤¬±£¤ì¡¢¤¢¤¿¤«¤â¥È¥ó¥Í¥ëÆâ¤Ë¤¤¤ë¤«¤Î¤è¤¦¤Ë±é½Ð¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£


Tunnel ¥¹¥¯¥ê¥×¥È¤ÎºîÀ®


¡¡ÉÁ²è¤ÎÍ¥Àè½ç°ÌÊѹ¹¥È¥ê¥¬¡¼ÍѤΥª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤¹¤ë¥¹¥¯¥ê¥×¥È¤Ç¤¹¡£
Àè¤Û¤É¤â¤ªÅÁ¤¨¤·¤¿Ä̤ꡢ¥È¥ê¥¬¡¼ÍѤΥª¥Ö¥¸¥§¥¯¥È¤È²èÁü¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÏÊÌ¡¹¤Ç¹Í¤¨¤Æ¤¯¤À¤µ¤¤¡£

¡¡tunnelSprite ÊÑ¿ô¤Ë¥¢¥µ¥¤¥ó¤µ¤ì¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î SpriteRenderer ¤òÀ©¸æ¤¹¤ë¤³¤È¤Ç¡¢²èÌ̤Îɽ¼¨Í¥Àè½ç°Ì¤òÀÚ¤êÂؤ¨¤ë»ÅÁȤߤǤ¹¡£


using UnityEngine;

/// <summary>
/// ÉÁ²è¤ÎÍ¥Àè½ç°ÌÊѹ¹¥È¥ê¥¬¡¼ÍѤΥª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤¹¤ë¥¹¥¯¥ê¥×¥È
/// ¥È¥ê¥¬¡¼ÍѤΥª¥Ö¥¸¥§¥¯¥È¤È²èÁü¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÏÊÌ¡¹¤Ç¹Í¤¨¤ë
/// </summary>
public class Tunnel : MonoBehaviour
{
    [SerializeField] private Renderer tunnelSprite;  //¥­¥ã¥é¤äŨ¤è¤ê¤âÉÁ²è¤ÎÍ¥Àè½ç°Ì¤Î¹â¤¤²èÁü¡£º£²ó¤Ï¥È¥ó¥Í¥ëÍѤβèÁü¤À¤¬¡¢¤É¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎRenderer¤Ç¤â¤¤¤¤¡£

    public int TunnelSpriteOrderNum => tunnelSprite.sortingOrder;  //¥È¥ó¥Í¥ëÍѤβèÁü¤ÎOrder in Layer¤ÎÃͤΥץí¥Ñ¥Æ¥£
}


SpriteOrderSwitcher ¥¹¥¯¥ê¥×¥È¤ÎºîÀ®


¡¡¥×¥ì¥¤¥ä¡¼¤äŨ¤Ê¤É¤Î°ÜÆ°¤¹¤ë¥­¥ã¥é¤Ë¥¢¥¿¥Ã¥Á¤·¡¢É½¼¨¤ÎÍ¥Àè½ç°Ì¤òÊѹ¹¤¹¤ë¥¹¥¯¥ê¥×¥È¤Ç¤¹¡£
¥×¥ì¥¤¥ä¡¼¤Îɽ¼¨Í¥Àè½ç°Ì¤ò¤¹¤Ù¤Æ¤Î°ÜÆ°¥­¥ã¥é¤ËŬÍѤ·¤Æ¤·¤Þ¤¦¤È¡¢Å¨Â¦¤Îɽ¼¨¤¬Àµ¤·¤¤Í¥Àè½ç°Ì¤Çɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£
(Î㤨¤Ð¡¢¥×¥ì¥¤¥ä¡¼¤Ï¥È¥ó¥Í¥ëÆâ¤Ç¤¢¤Ã¤¿¤È¤·¤Æ¤â¡¢¤¹¤Ù¤Æ¤ÎŨ¤¬¥È¥ó¥Í¥ëÆâ¤Ë¤¤¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£)

¡¡¤è¤Ã¤Æ¡¢¤³¤Î¥¹¥¯¥ê¥×¥È¤Ï¡¢°ÜÆ°¤¹¤ë¥­¥ã¥é¤´¤È¤Ë¸ÄÊ̤˥¢¥¿¥Ã¥Á¤·¡¢¤½¤ì¤¾¤ì¤¬¼«Ê¬¼«¿È¤Î°ÌÃ֤ˤè¤Ã¤Æɽ¼¨Í¥Àè½ç°Ì¤ò·èÄꤹ¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
¤½¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç²èÌ̤ÎÀ°¹çÀ­¤¬Êݤ¿¤ì¤ë¤è¤¦¤ËÀ©¸æ¤Ç¤­¤Þ¤¹¡£


using UnityEngine;

/// <summary>
/// ¥×¥ì¥¤¥ä¡¼¤äŨ¤Ê¤É¤Î¥­¥ã¥é¤Ë¥¢¥¿¥Ã¥Á¤·¡¢É½¼¨¤ÎÍ¥Àè½ç°Ì¤òÊѹ¹¤¹¤ë¥¹¥¯¥ê¥×¥È
/// </summary>
public class SpriteOrderSwitcher : MonoBehaviour
{
    private SpriteRenderer sr;     // ¥¢¥¿¥Ã¥Á¤·¤¿¥­¥ã¥é¤Î SpriteRenderer
    private int defaultOrderNum;   // SpriteRenderer ¤Î½é´üÃÍ¡£Í¥Àè½ç°Ì¤ò¸µ¤Î¾õÂÖ¤ËÌ᤹¤Ë¤È¤­¤Ë»È¤¦

    private void Reset() {
        if(transform.GetChild(0).TryGetComponent(out sr)) {
            Debug.Log($"SpriteRenderer ¼èÆÀ¤·¤Þ¤·¤¿ : {sr}");
        } else {
            Debug.Log($"SpriteRenderer ¼èÆÀ¤Ç¤­¤Þ¤»¤ó : {sr}");
        }

        // ½é´üÃÍÀßÄê
        defaultOrderNum = sr.sortingOrder;
    }

    private void Start() {
        Reset();
    }
    
    private void OnTriggerStay2D(Collider2D other) {
        
        // º£²ó¤Î¾ì¹ç¡¢¥­¥ã¥é(¥×¥ì¥¤¥ä¡¼¤äŨ)¤¬¥È¥ó¥Í¥ë¤Ë¿¯Æþ¤·¤Æ¤¤¤ë´Ö
        if (other.TryGetComponent(out Tunnel tunnel)) {
            
            // ¤³¤Î¥­¥ã¥é¤Îɽ¼¨Í¥Àè½ç°Ì¤ò¥È¥ó¥Í¥ë¤è¤ê¤âÄ㤤ÃͤËÀßÄꤹ¤ë
            // ¸ÇÄêÃͤÇÃͤò¥»¥Ã¥È¤»¤ºÊÑ¿ô¤Ç»ØÄꤹ¤ë¤³¤È¤Ç¡¢¥È¥ó¥Í¥ë¤Ë¥¢¥µ¥¤¥ó¤µ¤ì¤Æ¤¤¤ë²èÁü¤ËÂбþ¤Ç¤­¤ë
            sr.sortingOrder = tunnel.TunnelSpriteOrderNum - 1;
        }
    }

    private void OnTriggerExit2D(Collider2D other) {
        
        // º£²ó¤Î¾ì¹ç¡¢¥­¥ã¥é(¥×¥ì¥¤¥ä¡¼¤äŨ)¤¬¥È¥ó¥Í¥ë¤«¤é½Ð¤¿¤È¤­
        // out ¥­¡¼¥ï¡¼¥É»þ¤ÎÊÑ¿ô¤ò _ ¤Ë¤¹¤ë¤È¡¢Tunnnel ¥¯¥é¥¹¤ò¼èÆÀ¤Ï¤¹¤ë(ȽÄê¤Ï¤¹¤ë)¤¬¡¢¼èÆÀ¤·¤¿¾ðÊó¤Ï if ʸÆâ¤Ç»È¤ï¤Ê¤¤¤³¤È¤òÌÀ¼¨Åª¤Ë¼¨¤»¤ë
        if (other.TryGetComponent(out Tunnel _)) {
            
            // ¤³¤Î¥­¥ã¥é¤Îɽ¼¨Í¥Àè½ç°Ì¤ò¸µ¤ÎÃͤËÌ᤹
            sr.sortingOrder = defaultOrderNum;
        }
    }
}


ºîÀ®¤·¤¿¥¹¥¯¥ê¥×¥È¤òɬÍפʥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤¹¤ë


¡¡¥­¥ã¥é¤Î¿¯ÆþȽÄêÍѤ諤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë Tunnel ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
TunnelSprite ÊÑ¿ô¤Ë¤Ï¡¢¥È¥ó¥Í¥ë¤Ê¤É¤Î¡¢¥­¥ã¥é¤è¤ê¤âɽ¼¨Í¥Àè½ç°Ì¤ò¾å¤ËÊѤ¨¤¿¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤ÆÍøÍѤ·¤Þ¤¹¡£

¡¡°ÜÆ°¤¹¤ë¥­¥ã¥é¤Ë¤Ï SpriteOrderSwitcher ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£



¥­¥ã¥é¤Î¿¯ÆþȽÄêÍѤ諤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È



°ÜÆ°¤¹¤ë¥­¥ã¥é



¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤¹¤ë


¡¡¥×¥ì¥¤¥ä¡¼ÍÑ¥­¥ã¥é¤ò°ÜÆ°¤µ¤»¤Æ¡¢¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¿¯Æþ¤·¤Æ¤¯¤À¤µ¤¤¡£
Ʊ»þ¤Ë²èÁü¤Îɽ¼¨Í¥Àè½ç°Ì¤¬ÀÚ¤êÂؤï¤ê¡¢¥×¥ì¥¤¥ä¡¼ÍÑ¥­¥ã¥é¤¬¸«¤¨¤Ê¤¯¤Ê¤ì¤ÐÀ©¸æÀ®¸ù¤Ç¤¹¡£

¡¡¤½¤Î¸å¡¢¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÈϰϤ«¤éÈ´¤±¤¿¤È¤­¡¢ºÆÅÙ¡¢¥×¥ì¥¤¥ä¡¼ÍÑ¥­¥ã¥é¤¬²èÌ̤Ëɽ¼¨¤µ¤ì¤ì¤Ð¡¢¤³¤Á¤é¤âÀ©¸æÀ®¸ù¤Ç¤¹¡£

¡¡¤É¤Î¤è¤¦¤Ê½èÍý¤¬¹Ô¤ï¤ì¡¢¤É¤Î¤è¤¦¤ÊµóÆ°¤Ë¤Ê¤ì¤ÐŬÀڤǤ¢¤ë¤«¤ò¼«Ê¬¤ÇȽÃǤǤ­¤ë¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£
¤½¤Î¤¿¤á¤Ë¤Ï¡¢¥Ç¥Ð¥Ã¥°Á°¤Ë½èÍý¤Î¸«Ä¾¤·¤ò¹Ô¤¤¡¢¤É¤Î¤è¤¦¤Ë¤Ê¤ëÁÛÄê¤Ê¤Î¤«¤ò¥¤¥á¡¼¥¸¤·¤¿¾å¤Ç¡¢¥Ç¥Ð¥Ã¥°¤ò¹Ô¤Ã¤Æ¤¤¤¯¤è¤¦¤Ë¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


Ê£¿ô³¬Áع½Â¤»þ¤Î¥³¥é¥¤¥À¡¼¤ÎÀÚ¤êÂؤ¨


¡¡¾åµ­¤Î½èÍý¤Ë²Ã¤¨¤Æ¡¢³¬Ãʤξ岼°ÜÆ°¤Ë¤è¤ëÊ£¿ô³¬Áع½Â¤»þ¤Î¥³¥é¥¤¥À¡¼¤ÎÀÚ¤êÂؤ¨µ¡Ç½¤Î¼ÂÁõÎã¤Ç¤¹¡£

¡¡Î㤨¤Ð¡¢¥­¥ã¥é¤¬£²³¬Éôʬ¤Ë¤¤¤ëºÝ¤Ë¤Ï¥È¥ó¥Í¥ëÉôʬ¤ÏÄ̹ÔÉԲĤˤ¹¤ëɬÍפ¬¤¢¤ê¡¢
µÕ¤Ë¥È¥ó¥Í¥ëÆâ¤Ë¤¤¤ë¾ì¹ç¤Ë¤Ï£²³¬Éôʬ¤òÄ̹ÔÉԲĤˤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡¡¤½¤ì¤é¤ÎÀÚ¤êÂؤ¨¤ò¿¯Æþ°ÌÃ֤ˤè¤êÀÚ¤êÂؤ¨¤ëÊýË¡¤Ç¤Î¥¢¥×¥í¡¼¥Á¤Ç¤¹¡£


MapManager ¥¹¥¯¥ê¥×¥È¤òºîÀ®¤¹¤ë


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

//³¬ÃʤòÅФ俤顢¥È¥ó¥Í¥ë½ÐÆþ¤êÍѤΥ³¥é¥¤¥À¡¼¤Î¥ª¥ó¡¢¥ª¥Õ¤òÀÚ¤êÂؤ¨¤ë
public class MapManager : MonoBehaviour
{
    public bool isClimbedStairs = false;  //³¬ÃʤòÅФ俤«¡¢ÅФäƤʤ¤¤«(·úʪ¤Î¾å¤Ë¤¤¤ë¤«¡¢²¼¤Ë¤¤¤ë¤«)

    //ÀÚ¤êÂؤ¨¤ë¥³¥é¥¤¥À¡¼
    [SerializeField] private Collider2D leftTunnelWall;
    [SerializeField] private Collider2D rightTunnelWall;
    [SerializeField] private Collider2D gateTopWall;
    [SerializeField] private TilemapCollider2D wall_switchTilemap;


    /// <summary>
    /// ³¬ÃʤòÅФ俤«¤É¤¦¤«(·úʪ¤Î¾å¤Ë¤¤¤ë¤«¤É¤¦¤«)¤òȽÄꤷ¡¢¤½¤ì¤Ë¹ç¤ï¤»¤Æ³ÆÃϤΥ³¥é¥¤¥À¡¼¤Î¥ª¥ó¥ª¥Õ¤òÀÚ¤êÂؤ¨¤ë
    /// (¤³¤ì¤òÀÚ¤êÂؤ¨¤Ê¤¤¤È¡¢°Õ¿Þ¤·¤Ê¤¤¾ì½ê¤Ç¥­¥ã¥é¤¬°ú¤Ã¤«¤«¤Ã¤ÆÄ̤ì¤Ê¤¤¾ì½ê¤¬È¯À¸¤·¤¿¤ê¤¹¤ë)
    /// </summary>
    /// <param name="isClimbedStairs">³¬ÃʤòÅФ俤«¡¢ÅФäƤʤ¤¤«(·úʪ¤Î¾å¤Ë¤¤¤ë¤«¡¢²¼¤Ë¤¤¤ë¤«)</param>
    public void JudgeClimbedStairs()
    {
        //³¬ÃʤòÅФä¿(·úʪ¤Î¾å¤Ë¤¤¤ë)ºÝ¤Î½èÍý
        if (isClimbedStairs)
        {
            leftTunnelWall.enabled = false;
            rightTunnelWall.enabled = false;
            gateTopWall.enabled = true;
            wall_switchTilemap.enabled = true;
        }

        //³¬Ãʤò¹ß¤ê¤¿(·úʪ¤Î²¼¤Ë¤¤¤ë)ºÝ¤Î½èÍý
        if (!isClimbedStairs)
        {
            leftTunnelWall.enabled = true;
            rightTunnelWall.enabled = true;
            gateTopWall.enabled = false;
            wall_switchTilemap.enabled = false;
        }

        Debug.Log("¥³¥é¥¤¥À¡¼¤Î¥ª¥ó¡¢¥ª¥Õ¤òÀÚ¤êÂؤ¨¤Þ¤·¤¿");
    }
}


MapManager ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢MapManager ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤ÆÀßÄê¤ò¹Ô¤¦


¡¡¥Ò¥¨¥é¥ë¥­¡¼¤Î¶õ¤¤¤Æ¤¤¤ëÉôʬ¤Ç±¦¥¯¥ê¥Ã¥¯¤ò¹Ô¤¤¥á¥Ë¥å¡¼¤ò³«¤­¡¢Create Empty ¤òÁªÂò¤·¤Þ¤¹¡£
MapManager ¤Ë̾Á°¤òÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡Â³¤¤¤Æ¡¢Àè¤Û¤ÉºîÀ®¤·¤¿ MapManager ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£

¡¡Ê£¿ô¤Î¥¢¥µ¥¤¥óÍѤÎÊÑ¿ô¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¥³¥é¥¤¥À¡¼¤ò»ý¤Ä¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤è¤ê¡¢À©¸æ¤·¤¿¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤³¤Ç¤Ï³¬Áع½Â¤ÍѤËÍÑ°Õ¤·¤¿¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¤½¤ì¤¾¤ì¥¢¥µ¥¤¥ó¤·¤Æ¤¤¤Þ¤¹¡£


¡ã¥¢¥µ¥¤¥óÎã¡ä












SpriteOrderSwitcher ¥¹¥¯¥ê¥×¥È¤Î½¤Àµ¤ò¹Ô¤¦


¡¡°ÊÁ°¤Î¼ê½ç¤ÇºîÀ®¤·¤Æ¤¢¤ë SpriteOrderSwitcher ¥¹¥¯¥ê¥×¥È¤Î½¤Àµ¤ò¹Ô¤¤¡¢Ê£¿ô³¬Áع½Â¤¤Î¥³¥é¥¤¥À¡¼ÀÚ¤êÂؤ¨¤ËÂбþ¤µ¤»¤Þ¤¹¡£


using UnityEngine;

/// <summary>
/// ¥×¥ì¥¤¥ä¡¼¤ÎÉÁ²è½èÍý¤È¥Þ¥Ã¥×¤Î¥³¥é¥¤¥À¡¼½èÍý
/// </summary>
public class SpriteOrderSwitcher : MonoBehaviour
{
    private SpriteRenderer sr;  //¥¢¥¿¥Ã¥Á¤·¤¿¥­¥ã¥é¤ÎSpriteRenderer

    private int defaultOrderNum;  //SpriteRenderer¤Î½é´üÃÍ¡£Í¥Àè½ç°Ì¤ò¤â¤È¤Î¾õÂÖ¤ËÌ᤹¤È¤­¤Ë»È¤¦

    private float xCoordinate;  //OnTriggerEnter»þ¤ËxºÂɸ¤òµ­Ï¿¤·¤Æ¤ª¤¯
    private float yCoordinate;

    [SerializeField] private MapManager mapManager;

    [SerializeField] private int TunnnelSpriteOrderNum;  //¥È¥ó¥Í¥ë¤ÎÉÁ²èÃÍ


    void Start()
    {
        Reset();       
    }

    private void Reset()
    {
        if (transform.GetChild(0).TryGetComponent(out sr))
        {
            defaultOrderNum = sr.sortingOrder;

            //Debug.Log($"SpriteRenderer¤ò¼èÆÀ¤·¤Þ¤·¤¿¡§{sr}");
        }
    }

    /// <summary>
    /// ¥³¥é¥¤¥À¡¼¤ËÆþ¤Ã¤¿»þ¡¢x¤Þ¤¿¤ÏyºÂɸ¤òµ­Ï¿¤¹¤ë
    /// </summary>
    /// <param name="other"></param>
    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.name == "LayerTrigger0")  //<= º£²ó¤Î¾ì¹ç¤Ë¤Ï³¬ÃʤÏ2¤Ä¤¢¤ê¡¢¤½¤ì¤¾¤ì¸þ¤­¤¬°ã¤¦¤Î¤Ç¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î̾Á°¤Çʬ´ô
        {
            yCoordinate = transform.position.y;

            Debug.Log($"yCoordinate¡§{yCoordinate}");
        }

        if (other.gameObject.name == "LayerTrigger1")
        {
            xCoordinate = transform.position.x;
        }
    }

    /// <summary>
    /// ¥³¥é¥¤¥À¡¼¤Ë½ÐÆþ¤ê¤¹¤ëºÝ¤ÎºÂɸ¤Îº¹¤Ë±þ¤¸¤Æ¥³¥é¥¤¥À¡¼¤ÈÉÁ²è¤òÀÚ¤êÂؤ¨¤ë
    /// </summary>
    /// <param name="col"></param>
    private void OnTriggerExit2D(Collider2D col)
    {
        if (col.gameObject.name == "LayerTrigger0")
        {
            //¥³¥é¥¤¥À¡¼¤«¤é½Ð¤¿»þ¤ÈÆþ¤Ã¤¿»þ¤ÎºÂɸ¤¬°ìÄê°Ê¾åÎ¥¤ì¤Æ¤¤¤¿¤é
            if (Mathf.Abs(yCoordinate - transform.position.y) > 2f)
            {
                //¿¿µ¶Ãͤòȿž¤µ¤»¤ë
                mapManager.isClimbedStairs = !mapManager.isClimbedStairs;

                mapManager.JudgeClimbedStairs();

                //¥­¥ã¥é¤ÎÉÁ²è½ç¤ò¥È¥ó¥Í¥ë¤è¤ê¤â¹â¤¯¤¹¤ë
                SwitchSpriteOrder(mapManager.isClimbedStairs);
            }
        }

        if (col.gameObject.name == "LayerTrigger1")
        {
            if (Mathf.Abs(xCoordinate - transform.position.x) > 2f)
            {
                mapManager.isClimbedStairs = !mapManager.isClimbedStairs;

                mapManager.JudgeClimbedStairs();

                SwitchSpriteOrder(mapManager.isClimbedStairs);
            }
        }

        //¼¡²ó¤ÎȽÄê¤ËÈ÷¤¨¤Æ¡¢³ÆÊÑ¿ô¤ò½é´ü²½
        xCoordinate = 0;
        yCoordinate = 0;
    }

    /// <summary>
    /// ³Æ¥­¥ã¥é¤ÎÉÁ²è½ç¤ÎÀÚ¤êÂؤ¨
    /// </summary>
    /// <param name="bringToFront">¥­¥ã¥é¤ÎÉÁ²è¤òbase_switch¤è¤ê¤âÁ°Ì̤˻ý¤Ã¤Æ¤¯¤ë¤«¤É¤¦¤«</param>
    private void SwitchSpriteOrder(bool bringToFront)
    {
        if (bringToFront)
        {
            sr.sortingOrder = TunnnelSpriteOrderNum + 2;
        }
        else
        {
            sr.sortingOrder = defaultOrderNum;
        }

        //Debug.Log("SwitchSpriteOrder¤¬Æ°¤­¤Þ¤·¤¿");
    }
}


³¬ÃÊÉôʬ¤Ê¤É¤Ë¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤ÆÇÛÃÖ¤¹¤ë


¡¡¥³¥é¥¤¥À¡¼¤ÎÀÚ¤êÂؤ¨ÂоݤȤʤ볬ÃÊÉôʬ¤Ë¸«¤¨¤Ê¤¤¥³¥é¥¤¥À¡¼¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£
²èÁü¤ÎÀÚ¤êÂؤ¨¤âȯÀ¸¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢¤³¤Á¤é¤Ë Tunnel ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Æ¡¢ÀÚ¤êÂؤ¨ÂоݤȤʤë²èÁü¤ò»ý¤Ä¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£


¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤¹¤ë


¡¡³¬ÃÊÉôʬ¤Ë¿¯Æþ¤·¤¿¤ê¡¢È´¤±¤¿¤ê¤·¤Æ¡¢³¬Áع½Â¤¤ËÂбþ¤·¤¿¥³¥é¥¤¥À¡¼¤ÎÀÚ¤êÂؤ¨¤¬½ÐÍè¤Æ¤¤¤ë¤«¡¢³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡¤³¤Á¤é¤Î¥²¡¼¥à¤Î³¬ÃÊÉôʬ¤ËºÎÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£

Unityroom
Space Survivors

https://unityroom.com/games/spacesurvivors



¡¡°Ê¾å¤Ç´°À®¤Ç¤¹¡£

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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