Unity 스플래시 화면이 켜져있는 동안 백그라운드에서 데이터를로드 할 수 있습니까? 그렇다면 어떻게?
자산을로드하는 것뿐만 아니라 스플래시 화면 중에 코드를 실행하려고합니다.
Google 또는 Unity 설명서 에서 이에 대한 정보를 찾을 수 없습니다 .
Unity 스플래시 화면이 켜져있는 동안 백그라운드에서 데이터를로드 할 수 있습니까? 그렇다면 어떻게?
자산을로드하는 것뿐만 아니라 스플래시 화면 중에 코드를 실행하려고합니다.
Google 또는 Unity 설명서 에서 이에 대한 정보를 찾을 수 없습니다 .
답변:
방금 몇 가지 테스트를 수행했으며 스플래시 화면이 계속 표시되는 동안 첫 번째 장면의 객체 생성자가 실제로 호출되는 것을 발견했습니다.
정적 스톱워치로 측정 한 타이밍은 다음과 같습니다.
Constructed 0 s
Awake 2.118 s
OnEnable 2.12 s
Start 2.744 s
First Update 2.919 s
따라서 생성자에서 스크립트를 시작하여 스플래시 화면이 끝나기 거의 3 초 전에 (기본 설정 사용) 스크립트가 실행되도록 스크립트를 트리거 할 수 있습니다. 거기에서 로딩 코드를 트리거 할 수 있습니다 (자체 스레드에서).
이것이 아마도 로딩 스레드에서 호출되고 있다는 것을 명심하십시오. 따라서 우리는 메인 스레드가 아니기 때문에 여기서 우리가 할 수있는 것에 조금 더 제한적입니다. 로딩 스레드에서 지원되지 않는 특정 작업이있는 경우 응용 프로그램에 대한 세부 정보가 포함 된 새 질문을 게시 해보십시오. 해당 사례에 대한 해결 방법을 찾을 수 있습니다.
Update()
생성자가 시작된 후 2.9 초 후에 첫 번째 틱을 얻습니다 . 그것이 현재 계측기로 식별 할 수있는 모든 것입니다.
가장 좋은 방법은 자신의 로딩 화면을 만들고 초기 장면으로 설정하는 것입니다. 그런 다음 간단한 장면에서 장면 관리자 를 사용 하여 백그라운드에서 다음 장면 을 비동기 적 으로로드합니다 .
이를 확인하기위한 정보를 찾을 수 없지만, 관찰 한 바에 따르면 스플래시 화면이 표시되는 동안 Unity가 초기 장면을로드하는 것 같습니다.
일부 플랫폼에서는 로딩이 충분히 빠르면 스플래시 화면이 사라지기 전에 게임이 실행되기 시작합니다.
이 모든 것은 언제 어디서나 어떤 플랫폼에서든 모든 버전 업데이트에서 변경 될 수 있습니다. 이것이 일관 될 것이라는 보장은 없으므로 자신의 로딩 화면을 사용하는 것이 좋습니다.
짧은 대답은 아니오 , 당신은 그렇게 할 수 없습니다.
위의 답변은 모두 장면 관리 측면에서 정확합니다. 장면 관리자 를 사용하여 장면 을로드 할 수 있으며 비동기이기 때문에 다른 코드를 병렬로 실행할 수 있습니다.
자세한 내용 은 SceneManager.LoadScene 설명서를 참조하십시오.
게임이 시작된 후 가능한 빨리 코드를 가장 빠르게 실행할 수있는 가장 작은 발자국으로 첫 장면에서 코드를 실행하는 것입니다. Splash Scene 이라고합시다 . 포함하는 유일한 것은 스플래시 이미지와 컨트롤러가 필요한 코드를 실행하고 다른 장면을로드하는 것입니다.
설치 공간이 작기 때문에 매우 빠르게로드되므로 거의 즉시 코드를 실행할 수 있습니다. 그런 다음해야 할 일을하고 나중에 다른 장면을 로드 할 수 있습니다 .
시도 할 수있는 또 다른 방법은 "스플래쉬 화면"을 제거하여 표시하려는 이미지를 제거하는 것입니다. 처음에는로드되지 않기 때문에 조금 더 빠릅니다.
흐름은 다음과 같습니다.
장면이 작을수록로드 속도가 빠릅니다. 로드 된 스플래시 화면 에서 객체에 연결된 스플래시 컨트롤러와 같은 것을 사용할 수 있습니다 .
using UnityEngine;
using UnityEngine.SceneManagement;
public class SplashController: MonoBehaviour
{
void Start()
{
// RunSomeSyncMethod();
SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
}
}