Unity检测Text文本解锁成就、OnTriggerEnter2D触发动画不生效问题
Unity 两处功能异常解决方案
1. OnTriggerEnter2D 触发后播放动画不生效
按以下顺序排查即可:
- 碰撞双方必须都挂载
Collider2D组件,且至少其中一方的Collider2D勾选了Is Trigger属性 - 碰撞双方至少有一方挂载了
Rigidbody2D组件,如果是静止的碰撞体可以把Rigidbody2D的Body Type设为Kinematic避免受物理影响 - 检查Unity项目设置的
Physics 2D配置,确认两个碰撞物体所在的层级在层级碰撞矩阵中是允许交互的 - 确认
OnTriggerEnter2D方法拼写完全正确,参数为Collider2D other,且脚本挂载在带碰撞体/刚体的物体上 - 动画相关检查:确认Animator组件已正确挂载、状态机对应状态存在、触发动画的参数名无拼写错误,且调用的参数设置方法匹配参数类型(如触发型参数用
SetTrigger、布尔型用SetBool)
2. Text文本匹配解锁成就逻辑不触发
错误原因
你代码中的判断逻辑是直接将Text组件对象和字符串做相等判断,两个完全不同类型的对象对比永远返回false,所以永远不会进入解锁分支。你需要调用Text组件的text属性拿到实际显示的文本内容再做对比。
修复后的代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TrpohyForCherries : MonoBehaviour { public UnityEngine.UI.Text txt; // Update is called once per frame void Update() { // 新增.text属性调用获取实际文本内容 if(txt.text == "Cherries: 12") { Debug.Log("Trophy Unlocked!"); GameJolt.API.Trophies.Unlock(******); // 解锁后可以销毁当前脚本避免重复触发 Destroy(this); } } }
额外优化建议
不要在Update中每帧检测文本内容,可以在樱桃数量更新的逻辑中同步触发成就判断,减少不必要的性能消耗。另外需要确认Text显示的文本和判断的字符串完全一致,包括空格、大小写、符号都不能有出入。
内容的提问来源于stack exchange,提问作者Wiktor Wdowiak
相关产品推荐
相关产品推荐

