Unity 3D中GUI按钮未点击却持续触发点击消息的问题
嘿,我一眼就揪出问题所在啦!
你代码里有个超隐蔽的小失误——GUI.Button(buttRect, buttonText)后面多了个分号!
咱们来理清楚逻辑:
- 原本
if(GUI.Button(...))是用来判断按钮是否被点击,只有点击时才会执行大括号里的打印代码 - 但你在if条件的括号后面加了个分号,这就相当于给if语句加了一个空的执行块,后面的
{ print("Butt clicked"); }直接变成了独立的代码段,不管按钮有没有被点击,每帧都会执行这个打印操作,所以控制台才会一直刷消息。
修正后的代码
把那个多余的分号删掉就搞定了,修改后的完整代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GUIScript : MonoBehaviour { string buttonText = "Ok!"; private void OnGUI() { GUI.skin.button.fontSize = 50; GUI.contentColor = Color.yellow; GUI.backgroundColor = Color.blue; var textsize3 = GUI.skin.button.CalcSize(new GUIContent(buttonText)); Rect buttRect = new Rect(0, 600, textsize3.x, textsize3.y); if (GUI.Button(buttRect, buttonText)) { print("Butt clicked"); } } }
额外小提醒
- Unity的
OnGUI方法是每帧都会调用的,所以写这里面的逻辑时要多加注意,避免不必要的重复执行 - 另外,Unity 2017.3里的
OnGUI属于比较老旧的UI系统啦,如果是新项目的话,更推荐用UGUI(Unity UI)来做界面,功能更丰富也更灵活~
内容的提问来源于stack exchange,提问作者emorphus
相关产品推荐
相关产品推荐

