This document is about: PUN 2
SWITCH TO

PUN Classic (v1), PUN 2, Bolt는 휴업 모드입니다. Unity2022에 대해서는 PUN 2에서 서포트하지만, 신기능의 추가는 없습니다. 현재 이용중인 고객님의 PUN 및 Bolt 프로젝트는 중단되지 않고, 퍼포먼스나 성능이 떨어지는 일도 없습니다. 앞으로의 새로운 프로젝트에는 Photon Fusion 또는 Quantum을 사용해 주십시오.

알려진 이슈들

이 페이지에서는 플랫폼에서 발생된 다양한 이슈들을 보여줍니다. 여기에서는 아직 해결하지 못했거나 현재 해결하려는 이슈들에 중점을 두고 있습니다. 경우에 따라 플랫폼별로 손상된 버전을 나열하고 다른 버전으로 안내해 드립니다.

백그라운드에서 실행하기

모바일 플랫폼에서 앱이 백그라운드로 이동하면 클라이언트를 계속 연결하는 메인 메시지 루프가 일시 중지됩니다.

이 문제의 일반적인 원인은 다음과 같습니다:

  • 플레이어가 "홈 버튼"을 누른 경우.
  • 플레이어가 전화를 받은 경우.
  • 동영상 광고.
  • 앱에 오버레이 뷰를 표시하는 타사 플러그인 (예, 페이스북, 구글 등).

iOS에서는 백그라운드에 있는 동안 애플리케이션이 연결을 유지할 수 없습니다.(Apple 개발자 페이지의 백그라운드 실행을 참고하세요). 앱이 백그라운드로 전환될 때 클라이언트 연결을 끊는 것이 합리적일 수 있습니다.

WebGL에서는 PlayerTTL을 설정하고 탭의 포커스가 다시 돌아왔을 때 다시 연결하는 것이 합리적일 수 있습니다.

가끔 브라우저는 백그라운드에서 JS 및 WebAssembly를 실행하지 않습니다. 경우에 따라서는 백그라운드에서 오디오를 재생(심지어 들리지 않는 소리로 오디오 재생)하여 이 작업을 수행할 수 있습니다.

PUN에는 클라이언트가 가능하면 서버와 연결을 유지하도록 해 주는 백그라운드 폴백 스레드가 있습니다.

연결을 유지하기 위해 백그라운드 스레드는 제한된 시간 동안에 서버로만 ACK를 전송합니다. 기본 백그라운드 스레드 타임아웃은 60초입니다. PhotonNetwork.KeepAliveInBackground를 이용하여 타임아웃 시간을 변경할 수 있습니다. 백그라운드 타임아웃 후 PUN은 정상적으로 클라이언트와의 연결을 해제합니다. 백그라운드로 이동하기 전에 클라이언트가 룸에 참여한 경우에 PUN은 앱이 포그라운드로 돌아오는 즉시 다시 연결하고 동일한 룸에 참여하려고 시도합니다.

PhotonAnimatorView 및 트리거

애니메이터 컨트롤러에서 트리거 파라미터를 사용하고 "PhotonAnimatorView"를 사용하여 동기화하고 싶은 경우, 문제 방지를 위해 처리하는 방법을 고려하는 것이 중요합니다.

  • 트리거의 특성상 애니메이션 이벤트가 시작될 때만 활성화되고 다음 Update() 직전에 즉시 비활성화됩니다.
  • GameObject의 컴포넌트들은 선언된 순서와 동일하게 실행됩니다.
  • 실행 순서 설정을 편집하면, GameObject의 컴포넌트들의 실행 순서가 영향을 받습니다.

트리거를 발생시키는 코드 이후에 "PhotonAnimatorView" 컴포넌트를 실행하는 것은 필수입니다. 따라서 가장 맨 아래에 두는 게 더 안전하며 또는 Animator.SetTrigger(...)를 사용하여 트리거를 발생시키는 기능을 갖고 있는 컴포넌트 아래에 놓습니다.

"PhotonAnimatorView" 인스펙터는 다양한 파라미터의 현재 값을 표시합니다. 퍼블리싱 전에 확인할 수 있는 좋은 방법은 트리거가 필요할 때 true로 올바르게 발생시키는 것입니다. 발생하는 것을 보지 못한 경우, 특정 트리거가 네트워크를 통해 동기화되지 않을 수 있습니다.

유니티

임포트시에 무한 컴파일 에러

일부 유니티 버전에서 에셋이 전혀 업데이트되지 않거나 에셋 저장소에서 제대로 업데이트되지 않는 경우가 있습니다. 항상 변경 로그 txt 파일 또는 PUN 용 PhotonServerSettings에서 Photon 패키지 버전을 확인하세요. 이것은 알려진 유니티 문제이며, 간혹 오래된 패키지가 로컬 오프라인 캐시에 갇혀있어 업데이트가 전혀 작동하지 않거나 제대로 작동하지 않습니다. 이 문제를 해결하려면 먼저 로컬의 Photon 에셋 패키지를 제거한 다음, 다운로드하여 다시 임포트 해주세요. 로컬 유니티 에셋 저장소 캐시 폴더 경로는 링크되어 있는 목록을 참고하세요.

Socket.SetSocketOption의 ArgumentException

IL2CPP builds to fail to connect with an "ArgumentException: Value does not fall within the expected range 원인이 되는 알려진 유니티 문제 입니다. Windows 10 SDK 10.0.19041.0 이 설치된 환경에서 발생하였습니다.

영향받는 유니티 버전: 2018.4.23f1, 2019.4.0f1, 2020.1.0b11, 2020.2.0a13. 이외 더 많은 유니티 마이너 릴리즈 버전도 영향이 있습니다. 수정된 버전: 2020.1.1f1 및 2019.4.5f1 그리고 그 이상. 2018.4.27 도 같이 수정될 것으로 보입니다. 여기에 설명된 대로 2018.4.23의 해결 방법이 존재합니다.

.Net 4.x에서 유니티 2018.2 소켓 정지

유니티 2018.2는 소켓으로 커뮤니케이션을 정지시킬 수 있는 Mono 버전을 사용했습니다. 메시지 크기 및 빈도에 따라 이 문제는 언제든지 발생할 수 있습니다.

결국 2019.2에서 이 문제를 수정을 했으며 2018.3도 수정해야 합니다.

Mono 및 .Net 4.x 또는 .Net Standard 2.0를 사용하는 경우 2018.4.x 또는 2019.4.x 릴리즈를 사용을 권장합니다.

RunInBackground

유니티의 Application.runInBackground는 모바일 플랫폼에서는 지원되지 않습니다. 대신에, 백그라운드에 들어가고 나올 때마다 OnApplicationPause 메소드가 호출됩니다:

C#

void OnApplicationPause( bool pauseStatus )
{
    if (pauseStatus)
    {
        // app moved to background
    } else
    {
        // app is foreground again
    }
}

IOS 앱 스토어 제출 리젝

Apple 팀은 연결 문제로 인해 앱 스토어에 대한 제출을 리젝하기도 합니다. Apple 사와 이 문제를 해결하려고 노력했으나, 드물지만 여전히 리젝을 당할 수 있습니다. 리젝을 당하는 일반적 경우는 UDP가 차단되는 경우입니다. UDP가 연결되지 않는 경우 최신 Photon 클라이언트는 TCP를 사용하여 자동으로 해결할 수 있습니다. 리젝을 당한 경우 다시 리뷰를 요청 해야 할 것이고, 의심스럽다면, Apple의 개발자 지원팀에 지원을 요청해야 할 수도 있습니다. 일반적으로 UDP를 지원합니다. 도움을 위해서는 포럼 의견을 참고하세요.

iOS IPv6

일반적으로 유니티 5.x는 iOS에서 IPv6을 지원해야 하지만 일부 버전(5.4와 같은)에서는 이 기능을 지원하지 않습니다. 지원 되는 버전은 다음과 같습니다: 4.7.2, 5.1.5, 5.2.5, 5.3.4p4, 5.4.0p1 및 그 이상 (유니티 블로그 게시물을 참고하세요).

UWP / Windows Store 기능

UWP(Windows Store)를 대상으로 연결하려고 할 때 예외가 발생하거나 다음의 오류가 발생하는 경우:

이 네트워크 자원에 액세스하려면 네트워크 기능이 필요합니다.

유니티의 "Player Settings" -> "Publisher Settings" -> "Capabilities -> "InternetClient"에서 필요한 기능이 활성화되어 있는지 확인하세요.

required capability for windows store apps
Windows Store 앱에 필요한 기능. Photon Voice를 사용하고 있는 경우에는 '마이크' 기능도 필요합니다.

UWP 전문가

유니티 애플리케이션을 UWP로 내보내려면 스크립팅 백엔드로 .NET 또는 IL2CPP를 사용할 수 있습니다. Photon PUN 또는 Photon Realtime 유니티 SDK는 유니티에서 애플리케이션을 성공적으로 내보내기 위해 올바른 라이브러리를 선택하도록 이미 구성되어 있습니다. 하지만 내보내는 동안 문제가 발생하면 특정 스크립팅 백엔드에 대해 올바른 라이브러리를 사용하고 있는지 확인해 주시기 바랍니다.

스크립팅 백엔드로 .NET을 사용하는 경우 /Assets/Photon/PhotonLibs/Metro/ 디렉터리에서 Photon3Unity3D.dll이 사용되고 있는지 확인해 주세요.

스크립팅 백엔드로 IL2CPP을 사용하는 경우 /Assets/Photon/PhotonLibs/디렉터리에서 Photon3Unity3D.dll이 사용되고 있는지 확인해 주세요.

Back to top