在Unity编辑器中,每个场景加载都很顺利,控制台中没有错误。但一旦在 Android 设备(OnePlus3 和 Galaxy A50)上构建并运行,仅 2 个特定场景就会导致整个应用/游戏崩溃。
我检查了分析器,如果我的资产很重,以防它使用大量内存,但事实并非如此。
public class SceneController : MonoBehaviour {
[SerializeField] Transform[] enableOnStart;
[SerializeField] Image fade;
[SerializeField] float fadeTime;
[SerializeField] PoiController poiController;
void Awake() {
if(poiController != null)
poiController.OnInitializationFinished += OnInitialized;
else
StartCoroutine(StartScene());
}
void OnDisable() {
if(poiController != null)
poiController.OnInitializationFinished -= OnInitialized;
}
void OnInitialized() {
StartCoroutine(StartScene());
}
public void GoToScene(string sceneName) {
StartCoroutine(EndScene(sceneName));
}
public void GoToScene(int sceneIndex)
{
StartCoroutine(EndScene(sceneIndex));
}
public void GoToScene(string sceneName, float delay) {
StartCoroutine(EndScene(sceneName, delay));
}
IEnumerator StartScene() {
if(fade != null) {
yield return StartCoroutine(Fade(true));
}
foreach(Transform transform in enableOnStart) {
transform.gameObject.SetActive(true);
}
yield return 0;
}
IEnumerator EndScene(string sceneName) {
yield return StartCoroutine(Fade(false));
SceneManager.LoadScene(sceneName);
}
IEnumerator EndScene(int sceneIndex)
{
yield return StartCoroutine(Fade(false));
SceneManager.LoadScene(sceneIndex);
}
IEnumerator EndScene(string sceneName, float delay) {
yield return new WaitForSeconds(delay);
StartCoroutine(EndScene(sceneName));
}
IEnumerator Fade(bool isIn) {
fade.gameObject.SetActive(true);
float timer = 0, start, end;
if(isIn) {
start = 1;
end = 0;
} else {
start = 0;
end = 1;
}
while(timer / fadeTime < 1) {
timer += Time.deltaTime;
Color color = fade.color;
color.a = Mathf.Lerp(start, end, timer / fadeTime);
fade.color = color;
yield return new WaitForEndOfFrame();
}
}
}
这是 logcat 崩溃日志的链接: https://drive.google.com/drive/folders/1IH1hJuSU-HL-nEsT9e5qms5JUIJRPIGV?usp=sharing