Unity

[Unity] 유니티 코루틴 정지(StopCoroution())를 했는데도 불구하고 코루틴이 멈추지 않을 때. StopCoroution() is not stopping my coroutines.

정보처리마법사 2017. 3. 14. 01:02
반응형

 

 

[Unity] 유니티 코루틴 정지(StopCoroutine())를 했는데도 불구하고 코루틴이 멈추지 않을 때. StopCoroutine() is not stopping my coroutines.

 

 

유니티 StopCoroutine() 이 동작하지 않을 때.

 

 

 

 

이모티콘・01・고양이 마멋 친구들 - Google Play 앱

이모티콘・01・고양이 마멋 친구들: 무료 이모티콘, 회원가입 없이! 카톡, SNS로 감정 표현이 쉬워져요. 귀여움 가득, 대화창을 더 풍성하게!

play.google.com

 

 

 

안녕하세요 정보처리마법사 입니다.

 

이번 포스팅의 주제는 StopCoroutine() 을 호출했음에도 불구하고 해당 코루틴이 멈추지 않을 때에 관한 내용입니다.

기존에 제가 쓰던 방식은 

StartCoroutine( My_coroutine() ) 

혹은

StartCoroutine( "My_coroutine" )

이런식으로 코루틴을 시작하고,

 

StopCoroutine( My_coroutine() ) 

 

혹은

StopCoroutine( "My_coroutine" )

이런식으로 코루틴을 정지를 했는데, 어쩐일인지 코루틴이 멈추질 않아서 

 

구글링한 후 저런 방법을 찾아서 적용을 해보니 아주 잘 됩니다.

 

 

 

방법은

아래 소스코드와 같이 

Coroutine co_my_coroutine; 을 하나 선언해주고.

이 선언한 변수에 StartCoroutine( My_coroutine() ) 을 대입.

 

co_my_coroutine = StartCoroutine( My_coroutine() ); 

이런식으로 말이죠.

 

그다음에 정지할 때에는 아까 선언한 Coroutine 을 정지하면 됩니다.

 

StopCoroutine( co_my_coroutine );

 

아주 잘 됩니다.

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    Coroutine co_green_po;
    Coroutine co_purple_po;
 
    /// <summary>
    /// 초록물약 버튼 클릭 시.
    /// </summary>
    public void Click_btn_potion_green()
    {
        if (SceneManager.GetActiveScene().buildIndex != 0)
        {
            p = GameObject.Find("P").GetComponent<P>();
        }
 
        // 물약의 갯수가 1개 이상이고, 게임중이라면
        if (p.p_green_po > 0 && p.game_state == P.GAME_STATE.GAME_PLAYING)
        {
            // 이펙트( 복용 이펙트 및 유지 이펙트 및 아이콘 추가 예정)
            Debug.Log("초록물약 이펙트!!!!!!!!!");
 
            // 버프 지속 쿨타임 시작.
            if (CR_po_green_is_running)
            {
                CR_po_green_is_running = false;
                // 만약 초록물약 효과 상태이면 버프 코루틴 종료후 재시작(시간 초기화)
                // StopCoroutine("Potion_green_cooltime");
                StopCoroutine(co_green_po);
            }
            co_green_po = StartCoroutine(Potion_green_cooltime());
 
            p.p_green_po--;
 
            if (p.potion_state == P.POTION_STATE.POTION_PURPLE)
            {
                // 초록+보라물약 복용상태로 전환.
                p.potion_state = P.POTION_STATE.POTION_GREEN_PURPLE;
            }
            else if (p.potion_state == P.POTION_STATE.POTION_NOMAL)
            {
                // 초록물약 복용상태로 전환.
                p.potion_state = P.POTION_STATE.POTION_GREEN;
            }
        }
    }
cs

 

 

 출처 : 유니티 커뮤니티 

 

 

 

 

이상으로 포스팅을 마칩니다. 감사합니다.

 

 

 

 

잘 못 된 정보가 있으면 말씀해주세요.

공감버튼 클릭은 작성자에게 큰 힘이 됩니다.  행복한 하루 되세요.

 

“파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음"

반응형