728x90
반응형

📕오늘의 공부 주제



Unity에서 Android 백버튼, 홈버튼 처리 및 일시정지/종료 로직 구현 방법

🤔Why?



모바일(Android)에서 백버튼이나 홈버튼 입력은 매우 일반적인 사용자 행위이지만, 이를 적절히 처리하지 않으면 게임이 제대로 종료되지 않거나, 일시정지 상태를 인식하지 못해 게임이 계속 돌아가는 문제가 발생할 수 있다. 사용자 경험 향상과 안정성 확보를 위해 필수적으로 알아야 할 내용이라 정리함.

📖오늘의 공부 내용



✅ Android 백버튼으로 종료 처리

void Update()
{
    if (Input.GetKeyDown(KeyCode.Escape)) // Android의 백버튼 대응
    {
        Application.Quit();
    }
}
  • Unity 에디터에서는 ESC키로도 테스트 가능.
  • Application.Quit() 은 앱을 종료하지만, Android에서는 프로세스가 완전히 종료되지 않아 이후 실행 시 문제가 생길 수 있음.

✅ 홈버튼 등으로 앱이 비활성화될 때 처리: OnApplicationPause

void OnApplicationPause(bool pauseStatus)
{
    m_bPause = pauseStatus; // true면 일시정지 상태
}
  • 홈버튼, 전화 수신 등으로 앱이 백그라운드로 전환되면 호출됨.
  • 게임 상태, 사운드, UI 애니메이션 등을 일시 정지할 수 있도록 활용.

✅ 일시정지/재개에 따른 카운트 예제

public class GameManager : MonoBehaviour
{
    GameObject m_goText;
    float m_fCount = 0f;
    bool m_bPause = false;

    void Start()
    {
        m_goText = GameObject.Find("Canvas/Text");
        m_goText.GetComponent<Text>().text = "1";
    }

    void Update()
    {
        if (!m_bPause)
        {
            m_fCount += Time.deltaTime;
            m_goText.GetComponent<Text>().text = ((int)m_fCount).ToString();
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Application.Quit();
        }
    }

    public void SetPause()
    {
        OnApplicationPause(!m_bPause); // 수동 일시정지/해제용 버튼에서 호출
    }

    void OnApplicationPause(bool pauseStatus)
    {
        m_bPause = pauseStatus;
    }
}

⚠️ Application.Quit()의 한계와 대안

  • Android에서 Application.Quit()은 앱을 완전히 종료하지 못할 수 있음.
  • 해결법 예시 (출처에 제시된 방식):
void OnApplicationQuit()
{
    System.Diagnostics.Process.GetCurrentProcess().Kill();
}

단, 이 방식은 iOS에서는 동작하지 않으며, 되도록이면 Android 전용 조건으로 분기 처리하는 것이 좋음.


🔗 참고 링크

728x90
반응형

'프로그래밍 공부 > TIL' 카테고리의 다른 글

2025-07-29 TIL  (0) 2025.07.29
2025-07-28 TIL  (0) 2025.07.28
2025-07-24 TIL  (0) 2025.07.24
2025-07-23 TIL  (0) 2025.07.23
2025-07-21 TIL  (0) 2025.07.21