Unity安卓构建中找不到Waypoint脚本,编辑器运行正常
解决Unity安卓打包后
FindObjectOfType找不到Waypoint脚本的问题 核心原因及对应修复方案
1. 代码被Unity自动剥离优化移除
Unity打包时会剔除它判定为“无引用”的代码,即便你在运行时用FindObjectOfType查找,编辑器能识别这种动态引用,但打包优化逻辑可能误判。
- 修复方式:
- 在Waypoint类上添加
[AddComponentMenu("Waypoint")]特性,强制Unity保留该脚本的元数据。 - 在任意一个必然被打包的脚本中添加空引用声明:
private Waypoint _reservedWaypoint;,无需赋值,仅让Unity感知到该类型被使用。 - 临时排查可关闭
Player Settings→Other Settings→Optimization中的Strip Engine Code选项,但会增加包体大小,建议优先用前两种方法。
- 在Waypoint类上添加
2. 脚本命名或命名空间问题
Unity要求脚本文件名与类名完全一致,且安卓打包时区分大小写,若存在拼写、大小写差异,或未指定完整命名空间,会导致查找失败。
- 修复方式:
- 确保脚本文件名
Waypoint.cs与类名public class Waypoint : MonoBehaviour完全匹配,无大小写或拼写错误。 - 若使用了命名空间,查找时必须指定完整路径:
FindObjectOfType<YourNamespace.Waypoint>(),不能仅写Waypoint。
- 确保脚本文件名
3. 自定义Assembly未包含在打包中
如果Waypoint脚本属于自定义Assembly,可能未配置为安卓打包包含项。
- 修复方式:
- 打开
Edit→Project Settings→Player→Other Settings→Configuration,确认Scripting Assemblies列表中包含Waypoint所在的Assembly。 - 检查脚本所在文件夹的
Assembly Definition文件,勾选Include in Build,并在Platforms中选中Android。
- 打开
4. 挂载脚本的对象被意外禁用/销毁
编辑器中对象处于激活状态,但打包后可能因逻辑问题被禁用或销毁,导致FindObjectOfType无法找到。
- 修复方式:
- 打包前确认Waypoint挂载的游戏对象处于激活状态,且未在
Awake/Start等生命周期中被意外禁用。 - 改用
FindObjectsOfType<Waypoint>(includeInactive: true),允许查找禁用状态下的对象。
- 打包前确认Waypoint挂载的游戏对象处于激活状态,且未在
5. 日志“源文件未找到”的说明
该提示是因为打包时脚本被剥离或未保留调试符号,并非独立问题,解决上述代码保留问题后,此提示会自动消失。若需保留调试信息,可开启Player Settings→Other Settings→Debugging中的Enable Script Debugging。
内容的提问来源于stack exchange,提问作者cristie vicky
相关产品推荐
相关产品推荐

