You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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选项,但会增加包体大小,建议优先用前两种方法。

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),允许查找禁用状态下的对象。

5. 日志“源文件未找到”的说明

该提示是因为打包时脚本被剥离或未保留调试符号,并非独立问题,解决上述代码保留问题后,此提示会自动消失。若需保留调试信息,可开启Player Settings→Other Settings→Debugging中的Enable Script Debugging。

内容的提问来源于stack exchange,提问作者cristie vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:50:55