Unity中Update函数仅单次触发 自制游戏血条更新异常求助
问题排查与解决方案
1. Update仅输出一次1的问题
- 90%以上概率是Unity控制台开启了**折叠相同日志(Collapse)**功能:控制台右上角的Collapse按钮如果处于激活状态,完全相同的日志内容会被合并为1条显示,仅右上角计数增加,你误以为只输出了一次,实际上Update每帧都在正常执行,关闭Collapse按钮即可看到所有的1输出。
- 次要排查点:确认脚本所在的GameObject、脚本组件没有被勾选禁用,确认
Time.timeScale没有被设置为0(即使timeScale为0,Update依然会每帧执行,仅FixedUpdate会暂停,所以这个概率极低)。
2. 无法将UpdateSan设为私有方法的问题
你犯了基础的语法错误:你把UpdateSan定义成了Update函数内部的局部函数,C#中局部函数的作用域仅限于外层函数内部,不允许添加private/public等访问修饰符,这就是Unity报错的原因。
正确的写法是将UpdateSan挪到类内部,和Update方法平级,作为类的成员方法,此时就可以正常加private修饰符了:
private void Update() { Debug.Log("1"); if (Input.GetKeyDown("e")) { Father -= d; UpdateSan(); Debug.Log("2"); } } // 移到Update外部,作为类成员方法 private void UpdateSan() { FatherI.fillAmount = Father / Max; Debug.Log("3"); }
3. 按下e先输出3再输出2属于正常逻辑
你的代码执行顺序就是先调用UpdateSan(内部输出3),再执行Debug.Log("2"),这个输出顺序完全符合代码逻辑,不是BUG。
内容的提问来源于stack exchange,提问作者CowMan_2003
相关产品推荐
相关产品推荐

