Unity构建问题:TextMesh Pro文本缺失,编辑器中场景加载正常,但在Android构建中加载失败
环境
- 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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。