How to Develop a Game
Unity Invisible Trap
PublishDate: 2025-06-01 | CreateDate: 2025-06-01 | LastModify: 2025-06-01 | Creator:ljf12825

Unity实际开发中,有很多“看起来正常、实则容易出错”的奇怪问题(或称为隐形陷阱

Quick List

Class1 交互相关

现象原因解决方式标签
按下交互键时多个箱子同时打开范围内存在多个交互体,未判断距离使用 OverlapSphere + 计算最近距离输入、交互
鼠标点击物体无反应被 UI 或透明物体挡住,Raycast 被拦截检查 UI 的 Raycast Target 设置输入、射线
射线打不中目标射线层级错误或未设置 LayerMask使用正确 Layer 和 LayerMask输入、射线
玩家进入 Trigger 区域被触发两次存在多个 Collider 重叠,重复触发判断 other.gameObject 是否重复触发器、碰撞

Class2 动画控制

现象原因解决方式标签
SetTrigger 后动画无反应没有关闭 Has Exit Time 或过渡设置错误调整 Animator Transition 设置动画、状态机
动画状态切换卡顿切换时未等待上一状态结束使用 CrossFade,设置合理 transition duration动画
动画参数更新后立即调用 Play 无效Animator 状态未刷新等待一帧或避免立即 Play动画、代码时序
动画过渡后恢复原始状态未使用 Animator.ResetTrigger设置状态触发后重置 Trigger动画、状态机

Class3 UI系统

现象原因解决方式标签
UI 按钮点击无效被其他透明 UI 挡住检查 Canvas 层级,关闭遮挡物的 Raycast TargetUI、输入
Text 性能差、频繁 GC使用 Text 频繁更新使用 TextMeshPro + 对象池UI、性能
UI 点击穿透到底部物体未正确使用 CanvasGroup.blocksRaycasts设置为 false 阻止穿透UI、射线
ScrollView 滚动方向错乱锚点、Pivot 设置错误调整 Content 和 Viewport 的锚点UI、布局

Class4 物理系统

现象原因解决方式标签
移动物体穿过墙体使用了 transform.position 移动刚体改用 Rigidbody.MovePosition()物理、穿透
刚体滑动不自然没有设置 Drag、Mass 等属性设置合理的阻力与摩擦系数物理
触发器触发失效Collider 未勾选 isTrigger,或 Rigidbody 缺失确保至少一方含 Rigidbody 且 Collider 是触发器物理、触发器

Class5 资源加载与管理

现象原因解决方式标签
Resources.Load 的资源未释放Destroy 了物体但资源仍驻留内存调用 Resources.UnloadUnusedAssets()内存、加载
Addressables 资源释放失败未调用 Release()每次加载后使用 Addressables.Release(handle)Addressables
AudioClip 提前中断多个 AudioSource 播放相同 Clip 被覆盖PlayOneShot 或动态创建 AudioSource音频、资源

Class6 生命周期与协程

现象原因解决方式标签
WaitForSeconds() 在暂停时不起作用依赖 Time.timeScale,暂停后为 0使用 WaitForSecondsRealtime()协程、暂停
Update 在隐藏物体时仍执行脚本和 GameObject 仍处于 enabled 状态手动控制 enabled = false生命周期
OnDisable 未被调用GameObject 被销毁不是禁用区分 DestroySetActive(false)生命周期、事件

Class7 性能优化相关

现象原因解决方式标签
场景切换时卡顿同步加载资源或过多 Awake 初始化LoadSceneAsync,资源异步预加载性能、加载
Update() 性能开销大多个脚本使用 Update,逻辑分散使用事件驱动 + 管理器合并 Update性能、架构
GC Alloc 频繁每帧创建新对象(如字符串、new Vector3)复用变量、使用对象池性能、GC

Class8 编译器 vs 构建行为差异

现象原因解决方式标签
编辑器正常,打包后报错使用了 UnityEditor API#if UNITY_EDITOR 包裹构建、平台差异
场景中未勾选物体在运行时出现被代码运行时 Instantiate确认代码逻辑未动态生成构建、场景管理
路径访问失败各平台 persistentDataPath 不一致使用平台判断封装路径IO、平台兼容

Class1 交互相关

1.多个可交互物体,输入触发多个

2.Trigger触发多次Enter/Exit

3.Button UI点击两次才响应

Class2 物理系统相关

1.Rigidbody设置position导致穿透

2.Collider和Rigidbody的组合错误

Class3 生命周期相关

1.协程中的WaitForSeconds在TimeScale为0时失效

StartCoroutine(Example());

IEnumerator Example()
{
  yield return new WaitForSeconds(2f); // 如果Time.timeScale == 0,不会等待
}

2.脚本的Update()仍被调用,虽然物体不可见

Class4 动画系统相关

1.Animator动画不能立即切换

2.Animator状态机切换卡顿或不触发

animator.SetBool("isOpen", true);
animator.Play("Open");

Class5 资源加载与内存相关

1.Addressables或Resources.Load的资源加载了但没释放

2.AudioClip播放一半没声音或提前中断

Class6 编译器运行与构建差异

1.在Editor模式下一切正常,打包后就崩溃

2.场景中物体没勾选但运行中出现了