Unity构建问题:TextMesh Pro文本缺失,编辑器中场景加载正常,但在Android构建中加载失败

移动开发 2026-07-08

环境

  • Unity 6000.4.9f1

问题

我的游戏在Unity编辑器内运行完美,但在为Android构建后:

Issue 1: 场景加载失败

场景流程是:

Loading Scene (startup)
    ↓
Main Menu
    ↓
Loading Screen
    ↓
Gameplay Scene

编辑器中:

  • 所有场景都正确加载。
  • 异步加载正常工作。
  • 编辑器中没有错误。

在Android构建中:

  • 场景切换失败。
  • 加载屏幕出现,但始终无法到达目标场景。
  • 加载场景中的文本没有显示出来

Issue 2: TextMeshPro文本缺失

TMP文本在编辑器中显示正确。

构建后:

  • TMP文本消失。
  • 某些UI元素存在,但TMP文本未渲染。
  • 重新导入TMP资源也未解决问题。

场景加载脚本

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneLoader : MonoBehaviour
{
    public static int sceneToLoadIndex;

    // =====================================================
    // LOAD BY NAME
    // =====================================================

    public static void Load(string sceneName)
    {
        Scene targetScene =
            SceneManager.GetSceneByName(
                sceneName
            );

        // Find build index manually
        for (int i = 0;
             i < SceneManager.sceneCountInBuildSettings;
             i++)
        {
            string path =
                SceneUtility.GetScenePathByBuildIndex(i);

            string name =
                System.IO.Path.GetFileNameWithoutExtension(path);

            if (name == sceneName)
            {
                sceneToLoadIndex = i;
                break;
            }
        }

        SceneManager.LoadScene("LoadingScene");
    }

    // =====================================================
    // LOAD BY INDEX
    // =====================================================

    public static void Load(int sceneIndex)
    {
        sceneToLoadIndex = sceneIndex;
        SceneManager.LoadScene("LoadingScene");
    }
}

加载屏幕脚本

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;
using System.Collections;

public class LoadingScreen : MonoBehaviour
{
    public Slider progressBar;
    public TMP_Text progressText;

    private void Start()
    {
        StartCoroutine(LoadAsync());
    }

    IEnumerator LoadAsync()
    {
        AsyncOperation operation =
            SceneManager.LoadSceneAsync(
                SceneLoader.sceneToLoadIndex
            );

        operation.allowSceneActivation = false;

        while (!operation.isDone)
        {
            float progress =
                Mathf.Clamp01(operation.progress / 0.9f);

            progressBar.value = progress;

            if (progressText != null)
            {
                progressText.text =
                    (progress * 100f).ToString("0") + "%";
            }

            if (operation.progress >= 0.9f)
            {
                operation.allowSceneActivation = true;
            }

            yield return null;
        }
    }
}

我尝试了什么

场景加载

已验证所有场景已添加到:

File → Build Settings → Scenes In Build

场景名称完全匹配。

测试了按场景名称和构建索引两种方式加载。

将加载场景设置为Build Settings中的非第一个场景。(只有第一个场景可用,切换场景失败)

已在编辑器中验证场景流程正常工作。

移除了编译错误并重新构建。


TextMeshPro

导入TMP Essentials。

重新导入所有TMP资源。

检查TMP组件引用的是有效字体。

在编辑器中验证TMP文本正确显示。

重新导入TMP后重新构建项目。

删除library文件夹并重复前面的步骤


其他信息

构建过程中会出现一些警告:

Shader warning in 'ConvGeneric':
"TRANSPOSE_OUTPUT variants not supported with NON_UNIFORM_CONVGROUP_PER_OC"

此警告来自:

Packages/com.unity.ai.inference/

不确定是否相关。

缺失的TMP资源
每次重新导入所有内容时这项总是缺失。该游戏在Unity编辑器中运行良好,但我不知道这是否会影响构建后的游戏。


如果有进一步调试的建议,我们将不胜感激。

解决方案

在测试了大家的建议后,我意识到问题出在我使用的Unity版本不稳定。因此,在尝试了多种Unity版本,涵盖从alpha到最稳定版本后,问题不再出现的最高版本是Unity 6000.3.18f。

注意:高于Unity 6000.3.18f的版本在构建或打开项目时会导致Unity崩溃。

如果其他人也遇到这个问题,请使用 Unity 6000.3.18f

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章