Unity中,在按钮的处理事件中,显示UI(Panel)的一些问题

这篇具有很好参考价值的文章主要介绍了Unity中,在按钮的处理事件中,显示UI(Panel)的一些问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题来源(自己遇到的):

(32条消息) Unity SetActive(True)滞后严重-游戏-CSDN问答

简单概括就是,点击按钮,开始处理某个事件,这个事件需要花费较长时间,我的想法是加入一个加载中界面,方便告知用户当前程序没有卡住。在完成事件后,提示加载完成。

首先,为按钮添加监听事件

unity点击物体出现ui界面,unity,游戏引擎,ui,c#

我最开始是在上图的ButtonOnClickEvent中使用panel.Setactive(true);来启用加载界面,该语句之后进行真正的按钮处理事件,处理完成之后,改变panel中text的值显示已完成,再Setactive(false)关闭panel。

如下

public void ButtonOnClickEvent(){
panel.SetActive(true);
ProcessButton(); //事件处理函数

.....//将panel的信息更新为加载完成
}

但我发现,点下按钮之后并不会弹出加载中界面,而是卡住,等待按钮处理事件结束之后,直接弹出了加载完成界面,加载中界面直接被跳过了。

原因是Unity的UI渲染次序,一个按钮的处理事件Unity是放在一个帧中的,所以等整个ButtonOnClickEvent处理结束,才会渲染UI。所以我们没有看到加载中的界面,而是直接看到了加载完成,是因为最后显示的是已经被更新的panel。

明白这个后,我们需要知道Unity的函数执行顺序,如图(Unity手册事件函数的执行顺序 - Unity 手册)

unity点击物体出现ui界面,unity,游戏引擎,ui,c#

 可以看到如果把SetActive(true)放到ButtonOnClickEvent中,那么我们就只能看到加载完成。因为在WaitForEndOfFrame前,OnGUI是最后执行的。所以我的思路是,在下一帧的开始进行事件处理,也就是在FixedUpdate中完成事件处理。

我们可以在ButtonOnClickEvent中添加一个状态变量 state,代表需要处理事件,在ButtonOnClickEvent的最后,我们将state置为True,然后显示UI,这样ButtonOnClickEvent中只完成两件事情,显示加载中界面,将state置为true。然后在下一帧的FixedUpdate中,根据state判断是否需要处理。实现如下:

bool state=false;
public void ButtonOnClickEvent(){
panel.SetActive(true);//提前配置好加载中的panel
state=true;
}

void FixedUpdate(){
if(state)
{
ProcessButton();
state=false;//记得把state置回false
}
}


void ProcessButton(){
......//事件具体处理

......//将panel的信息更新为加载完成,这里要注意,需要在panel中添加一个Button
//该按钮控制将panel隐藏
}

 效果如图

unity点击物体出现ui界面,unity,游戏引擎,ui,c#

 unity点击物体出现ui界面,unity,游戏引擎,ui,c#

 

以上,是我的解决方案,刚学Unity,不是很懂,解决方案不唯一,仅供参考。文章来源地址https://www.toymoban.com/news/detail-776563.html

到了这里,关于Unity中,在按钮的处理事件中,显示UI(Panel)的一些问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity给所有按钮绑定监听事件

    第一步: //定义事件参数 public class MyEventArgs {     // 每个button的编号     public int id;     // 每个 Button 本身     public GameObject obj; } 第二步: Button[] buttons; // 鼠标点击委托     public delegate void SkillButtonClickDelegate(MyEventArgs arg);     public SkillButtonClickDelegate SkillButtonClick; private

    2024年02月04日
    浏览(58)
  • Unity按钮事件的几种绑定方式

    许久没有写C#代码了,对于一些东西自己给整忘了,在此记录下,方便以后自己查阅 获取到按钮组件,我是将代码挂载在其父节点上。 在代码中获取此按钮,并对他就进行绑定。一般都是使用的这类情况。 在脚本中写一个public函数,作为按钮的监听函数,在按钮的Inspector面

    2024年02月11日
    浏览(50)
  • Unity UGUI之Button按钮点击事件

    组件基本知识:Unity UGUI之Button控件的简单认识-CSDN博客 按钮添加点击事件虽然比较简单,但是使用不同的方法灵活应用开发起来效率会更高。 1、当我们控制Unity一些组件的事件是组件本身自带的,那么我们就可以考虑直接通过Button的On Click()中“+”按钮,添加一个新事件,然

    2024年02月05日
    浏览(55)
  • 【解决】Unity Project 面板资源显示丢失的异常问题处理

    开发平台:Unity 2021.3.7f1c1     在开发过程中,遭遇 Project 面板资源显示丢失、不全的问题。但 Unity Console 并未发出错误提示。   前往 “工程目录/Library” 删除内部所有文件并重打开该工程。Unity 会重新生成该文件目录。

    2024年01月21日
    浏览(83)
  • element-ui中Notification 通知自定义样式、按钮及点击事件

    Notification 通知用于悬浮出现在页面角落,显示全局的通知提醒消息。         element-ui官方文档中说明Notification 通知组件的 message  属性支持传入 HTML 片段,但是示例只展示了简单的html片段,通常不能满足开发中的更深入需要,比如我需要把通知弹框添加按钮、复选框,尤其

    2024年02月14日
    浏览(93)
  • 【Unity】 基础交互入门(按钮点击事件的三种方法)

    1、在资源面板创建C#脚本 2、创建点击事件需要执行的代码(这里以loadMain为例),新增一个叫OnStartButtonClick的Public方法。 可以选择生成或者调试,从VS更新代码到Unity。 3、场景中创建Button和empty(生成空的GameObject) 4、将代码挂在刚刚的GameObject上(这里将GameObject重命名为

    2024年02月09日
    浏览(50)
  • 【小技巧】Unity UGUI 中使用脚本激活按钮onclick事件

    在使用unity UGUI 按钮通常会直接在面板点击按钮的onclick增加事件并将需要按钮触发功能选择好,已经制作好按钮想使用脚本来控制点击的发生。 1.场景中Button是直接采用拖拽的方式实现打印功能 2.场景中Button1是直接调用脚本中Best()方法;    3.脚本代码: using System.Collec

    2023年04月09日
    浏览(54)
  • Vue中使用element-ui 给按钮绑定一个单击事件,实现点击按钮就弹出一个dialog对话框

    1.需求描述 想要实现点击一个按钮就弹出一个对话框,在对话框中可输入数据进行提交,在点击取消时对话框关闭 2.功能实现 1.创建按钮 在element中把找到按钮的代码放到div里 2.创建对话框 在element中找到dialog对话框对应的代码,把代码粘贴到对应的位置 3.对话框与按钮的绑定

    2024年01月18日
    浏览(73)
  • Unity3d中Scene场景2D模式下放大后UI元素后不显示的问题

    如题:UI在game视图显示没有问题, 在Play状态下,在Sence视图查看UI对象的时候进行放大操作,然后UI就不显示了或者显示不全,缩小就恢复正常。这让我在Play模式下预览UI状态很麻烦。相关问题描述较少。 初步判定为摄像机问题,但我们的项目最近并没有对相机进行过什么调

    2024年02月03日
    浏览(60)
  • Unity UI -- (5)增加基础按钮功能

            良好的UI设计会清晰地和用户沟通。用户知道他们能和屏幕上哪些东西交互,哪些不能。如果他们进行了交互,他们也要清楚地知道交互是否成功。换句话说,UI要提供给用户很多反馈。         我们可以来看看在Unity里或者在计算机上的任何应用程序:         将

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包