GameFrameWork框架(Unity3D)使用笔记(四)ProcedureMenu更多的界面

Unity技术-GameFramework文档系列(五)- 创建实体 👉关于作者👉前提👉实践过程经历前面文章创建UI的过程,这一步操作起来就顺心多了,坑也少了。同样需要创建预制体(物体模型)预制体上需要挂载继承了【EntityLogic】的脚本走走走,预制体出来我们就要开始创建了,代码先获取实体组件再创建实体这和UI基本如出一辙昂,再回忆回忆和UI都是预制体,传递的参数都是预制体路径和分组。等等-分组,差点忘记了需要在框架的基础组件中添加分组小空在学习木头前辈的教程中留意到:这种带有路径的预制体加载方式,实际打包后会不会出现调用不到的问题。给出的答案是:不管是打不打包, 阅读详情

前言:

        上一篇我已经成功将菜单页面加载了出来。

        这一次的主要内容是,完成主菜单上四个按钮的点击事件,并且完成其它俩个菜单界面的加载。

开搞界面:

        既然已经有了菜单主界面的经验,其它几个界面照做就行了。

        (由于本次项目的目的在于较为完整地走完使用GameFormWork的流程, 细节部分就不打磨了,界面里面的内容就做做样子。

1、Setting界面

        先搞一下界面的预制体:

        由于我们这次项目不搞音乐也不搞本地化也不搞,所以。。。设置里面好像暂时没啥好设置的(那就做个样子叭暂时。。。不过那些东西以后肯定会搞的!)

        

然后做成预制体:

 然后写界面的脚本:

同样,继承之前已经写好的UGuiForm类:

写好的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace ShadowU
{
    public class SettingForm :  UGuiForm
    {
        public Button m_ConfirmButton;  //确认按钮
        public Button m_CancelButton;   //取消按钮

        protected override void OnOpen(object userData)
        {
            base.OnOpen(userData);
            //挂一下按钮事件:
            m_ConfirmButton.onClick.AddListener(OnConfirmButtonDown);
            m_CancelButton.onClick.AddListener(OnCancelButtonDown);
        }
        private void OnConfirmButtonDown()
        {
            //StarForce里的逻辑是  判断语言设置是否更改,如果更改了那么就执行下面的部分,如果没有更改只需要Close() 关闭Form即可


            //将设置的值应用到GameEntry.Setting  Sound等地方
            //由于没搞音乐和语言上的这地方暂时没啥东西好写

            UnityGameFramework.Runtime.GameEntry.Shutdown(UnityGameFramework.Runtime.ShutdownType.Restart); //重启!
        }
        private void OnCancelButtonDown()
        {
            Close();//关闭面板
        }
    }
}


然后在inspector里面把按钮拖进去:

 然后设置一下MenuForm.cs:

然后运行!

 

 点击设置按钮:

可以,界面跳换了。

然后再点击取消:

可以 又回来了:

那咱们再进去点击一下确认按钮看看:

可以,红一片。

那么这次是哪里出了问题呢?

先看看报告:

问题原因和解决:

(1)首先是:

Coroutine couldn't be started because the game object xxx is inactive!

(虽然这个报错并不影响运行,花桑的塔防demo也有这个报错)

解决办法很简单,对比StarForce代码,之前我在写ProcedureMenu的时候省略了一点东西:

我把和这个变量有关的内容删了。

而在StarForce里面,这个变量及其相关代码的作用就是在流程退出的时候以关闭这个菜单:

加上后,报错就解决了。(如果把StarForce的删掉后,它也会报错)。(原理就是在框架关闭的时候调用UI模块关闭所有界面的函数之前,即在菜单流程结束的时候,提前关闭这个界面,避免被调用Resume())

或者不用协程实现面板的淡入淡出,也能解决。

或者直接不解决,因为只有在框架shutdown关闭多个面板的时候会出现这个问题,即便报错也没啥影响。

 追溯问题来源后,发现是执行Resume的时候因为Menu是inactive:

但是在父类的Resume里面已经执行过使其为Active的函数了:

即便我这样写:

输出还是False!:

 这就很奇怪。

我把StarForce的菜单流程里关闭菜单界面的代码删掉,这里加上Log输出的信息也是两个False。。。

我花了很久时间看源码和调试,仍然不知道为啥。

后来在大佬群得到了解决:

A GameObject may be inactive because a parent is not active. In that case, calling SetActive will not activate it, but only set the local state of the GameObject, which you can check using GameObject.activeSelf. Unity can then use this state when all parents become active.
 

(来自官方文档) 

而这里如果这么写的话:

 结果就是:

 说明不是SetActive的问题,它确实设置了selfActive为true,但是由于父节点为InActive,所以调用用active是false。

 

 (2)然后是其它报错。。。。。(xxx组件已存在)

        Game Frame Work Component type xxx is already exist

        这个是框架启动的时候报的错误。

        经过调试发现,点击设置,然后点击确定,可以正常重启。

        但是点击了设置,点击取消;再点击设置,再确定的时候,就重启失败了。

        经过调试发现,按钮的逻辑执行了两次。。。。也就是重复启动了。。。

        然后才知道是因为Open的时候AddListener后要在Close的时候Remove。

        因为框架的界面Close后,并不会消除,只是变为了InActive:

所以下次Open的时候就会重复AddLilstener。 

所以加上以下代码就解决了:

 然后终于完成了设置界面的确认和取消界面切换功能!

(这地方搁了很久,但是确实学到了不少东西)、

2、About界面

        这个界面有点不一样,但是逻辑很简单。

        就是(滚动)显示界面内容,然后检测到鼠标点击则返回主菜单。

        滚动很简单,提前写好内容在界面里面,获取对应UI物体的RectTransform,然后在AboutForm脚本的update里面更新它的position达到滚动屏幕的效果。

        然后我们只需要实现点击屏幕回到主菜单的功能。

        简单,做一个大的隐形按钮挡住界面。

 

 

退出按钮

很简单,只需要调用框架的shutdown:

总结

至此主菜单及各个界面之间切换的几个功能基本完成。中间鸽了几天用来解决中间遇到的bug了,解决过程中读了大量源码,理解得到了进一步提升。

下一步就开始搞主要的游戏流程的内容了。

        

 

 

 

 

        

GameFramework---UI界面(五) 特别提示: 本系列基于Unity 2019.4.8,框架版本GameFramework 2021.05.31 本系列博客地址: 传送门 Game Framework提供了管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是 Unity 内置的 UGUI 还是其它类型的 UI 插件(如 NGUI),只要派生自 UIFormLogic 类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。 一、创建UI脚本 UI预制体就不用说怎么制作了吧,UI脚本需要. 阅读详情

相关推荐

Unity 游戏框架之GameFramework和ET对比

Unity 框架 GF 和 ET 哪个更好用,各自的优点,缺点是什么? 随着Unity的不断发展,现在出现了很多比较牛逼的 开源 框架,其中,我觉得 最厉害的是 Game Framework 和 ET 这2个框架。 ET:https://github.com/egametang/ET GameFramework:https://github.com/EllanJiang/UnityGameFramework

TxNet 4万+

GameFramework框架

ellan做事风格非常低调,属于实干派,几乎没有宣传过框架,但是多年持续维护更新,框架实际是提炼于知名的商业项目。虽然框架文档十分匮乏,新人上手相对困难,但是GF依然靠着过硬的代码质量吸引开发者使用和学习。每个模块的xxxManager都会实现对应的IxxxManager接口,UGF只会直接引用接口,不会直接引用Manager。如果需要调用依赖于引擎实现的接口,可以定义对应的IHelper接口并在UGF层实现接口,GF层只管调用不管具体实现。对常用模块封装,规范开发过程,保证产品质量,内置19个模块。

—巨人绿 4507

GameFramework框架详解之 框架总览

一.前言 目前市场上有很多优秀个开源框架,比如ET,GameFramework,DBFramework,StrangeIOC,Loxodon-Framework,KSFramework,xluaFramework等等。其中要说规范的话,不得不说GameFramework还是不错的,当然很多新手看到后会觉的有点复杂,写一个小小的功能,不得不套用一堆东西,继承一堆接口,感觉不知所措,不能随心所欲的去撸代码。其实这个框架就是为了约束新手的行为的,让我们面向接口编程,遵循“开闭”的设计原则来写代码,方便后期的扩

TxNet 2万+

GameFramework源码学习(一)

Unity的GameFramework框架的源码学习.

terruig的博客 3534

GameFramework框架详解之 Setting配置存档

在GameFramework中,我们可以使用Setting模块来管理游戏中的一些配置设置。Unity引擎给我们提供的PlayerPrefs工具其实作用是一样的,都是用来存储一些游戏配置的。

TxNet 2105

【GameFramework框架内置模块】2、数据节点(Data Node)

这一篇讲数据节点DataNode,基本开发程序都会有类似数据节点作用的东西,数据节点的作用其实就是保存游戏运行时的一些缓存数据,比如用户登录信息、用户名、任务节点等等。数据一般会有增删改查这四种操作,在运行时的数据一般是使用单例或者静态属性,将数据存储在内存中而数据节点也是将数据存储在内存中,但是不用序列化数据,比使用单例或者静态属性要容易维护的多,特别时它的树形结构可以让我们很好的组织我们的数据结构,方便做增删改查操作。数据节点DataNode模块的数据的存储方式是以树形结构存储。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3184

GameFrameWork框架(Unity3D)使用笔记(三)ProcedureMenu

前面已经成功通过ProcedureChangeScene流程转到了菜单流程,并且能够成功加载出菜单场景。但是目前菜单场景里面空无一物,这篇的主要内容就是加载出菜单UI。所以这一次又会用到框架里的一个新的模块——UI。

HowToPause的博客 2376

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2296

GameFramework---框架简介与下载(一)

@TOC# 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例

南宫铭的博客 4393

【论文导读】ICDM2018|SASRec---基于自注意力机制的序列推荐(召回)

前言本次分享2018年发表在ICDM上的论文----「Self-Attentive Sequential Recommendation」。主要是应用self-attention机制来做一...

Blank_Space 8033

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6482

GameFramework 开源项目教程

GameFramework 是一个基于 Unity 游戏引擎的游戏框架。它封装了开发过程中常用的游戏模块,并在很大程度上标准化了开发流程,提高了开发速度并确保了产品质量。该项目由 EllanJiang 开发并维护,源代码托管在 GitHub 上,地址为:[https://github.com/EllanJiang/GameFramework](https://github.com/EllanJia

gitblog_00136的博客 1026

同物种,不同版本之间的坐标转化

是最常用的工具,如果有可用的链文件,这通常是最便捷的方法。CrossMap是一个功能强大的替代工具,支持多种文件格式和物种。自定义生成链文件适用于没有现成资源的情况,虽然复杂一些,但可以满足特定需求。Ensembl 和 Gramene提供的工具适用于支持的物种,尤其在植物基因组领域可能更具优势。选择合适的方法取决于你正在处理的物种、基因组版本以及现有的资源。

qq_40256654的博客 1852

unity制作主菜单

选择面板添加Vertical Layout Group组件 面板内的物体自动对齐button点击发送事件添加按钮列表——选着Runtime Oly(仅在运行时)——将FSM状态机组件拖进-选择物体——function(功能)选择FSM状态机 SendEvent——输入对应事件...

m0_67150972的博客 677

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,我们将学习如何利用获取到的轮廓,进行形状分析以及对象检测和识别。

盼小辉丶的博客 1万+

动态时间规整(Dynamic Time Warping,DTW):让时间序列分析不再枯燥和代码全分析

动态时间规整(DTW)是一种用于比较时间序列相似性的算法,特别适用于处理长度不同或时间轴不对齐的序列。本文介绍了DTW的核心概念,包括其通过非线性对齐解决时间扭曲问题的能力,以及在语音识别、金融分析等领域的应用。通过Python代码示例,演示了如何计算两个模拟时间序列的DTW距离,并可视化最优对齐路径。结果显示,DTW能够有效捕捉序列间的相似模式,即使它们在时间轴上存在偏移或伸缩。该算法通过最小化累积距离来评估相似性,得分越低表明序列间相似度越高。

此星光明博客 162

.NET Framework 框架

.NET Framework 框架

book_dw5189的博客 1988

机器人动力学仿真软件:PyBullet_(10).案例分析:双足机器人行走仿真

在本节中,我们将详细探讨如何使用PyBullet进行双足机器人的行走仿真。双足机器人行走仿真是一个复杂的动力学问题,涉及多个关节的协调运动和环境交互。通过本节的学习,您将了解如何创建和控制双足机器人模型,设置仿真环境,以及实现基本的行走算法。首先,我们需要创建一个双足机器人模型。PyBullet支持多种模型格式,包括URDF(Unified Robot Description Format)和MJCF(MuJoCo XML Format)。URDF是一种广泛使用的机器人模型描述格式,我们将使用URDF来创建

kkchenjj的博客 910

Unity Game FrameWork—模块使用—数据结点

根节点可以添加任意子节点,子节点也可添加子节点。每个节点只能存储一个数据,这个数据可以是任意类型,根节点不能添加数据。如果多次设置数据,则只会保存最后一次的数据及其类型。Node03.GetOrAddChild(“所属组件名”).SetData(“UIComponent”);官方说明:将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。数据结点存储的是游戏运行时数据,不会保存到本地。这一块功能,Demo里面没有使用。下面看下数据结点相关API调用。

qq_37619255的博客 732

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。数据分析与定位轨迹生成主要使用Python离线完成。示意图。

三维点云技术探索 1914

软件质量保证测试试题与答案.docx

大学软件工程专业选修课考试资料,帮组学生更好复习,了解题目出题方式,以及测试用例编写模式

Game Framework学习日记【1】开启 Game Framework 之旅

开启了新的框学习之旅,这次的奇妙冒险不知道又有什么精彩(狗血)的事情等着我呢。

TheXier的博客 607

基于FDR的土壤含水率检测仪的设计.zip

基于FDR的土壤含水率检测仪的设计.zip

初识GameFrameWork(一)

本篇文章将分析基于GameFrameWork框架下的Demo,如有错误,还望各位大大海涵指出,感激不尽!

m0_74936198的博客 2207

电力电子技术Simulink仿真全集

Simulink-电力电子仿真全集,请使用R2020a系列以上版本。包含第3章 整流电路、第4章 逆变电路、第5章 直流-直流变流电路、第6章 交流-交流变流电路、第7章 PWM逆变电路、第8章 软开关电路共计50个仿真文件,适合电气专业学习参考,所有仿真均已测试可用。

工具变量-数据交易平台DID数据-上市公司+地级市(2000-2025年).txt

因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.youkuaiyun.com/T0620514/article/details/162115324

游戏开发利器:Game Framework简介

**Game Framework** 是一个专为Unity引擎设计的游戏开发框架。这个开源项目致力于简化游戏开发流程,加速开发周期,并确保产品品质。它采用C#作为主要编程语言,充分利用Unity的强大功能,同时通过一系列预封装的模块,提升了开发者的效率和项目的可维护性。 ## 核心功能概述 Game Framework封装了一系列核心游戏开发模块,包括但不限于: - **全局配置**:管理游...

gitblog_09153的博客 675

GameFramework学习之unity读表txt 注意点

1.位置是放在procedureproload里 2.注意表字段名必须开头大写 GameFramework学习之unity读表细节和步骤_hennysky的博客-优快云博客_unity读表https://blog.youkuaiyun.com/hennysky/article/details/85757790

迷你小猴子村庄 3131

Django Form表单组件

Form介绍  我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。 Django form组件就实现了上面所述的功能。 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能.

wmyzzz 624

【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)

【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)

showswoller的博客 1万+
上一篇: Python django写视图函数request的方法和属性没有自动补全代码提示(包括写其他代码的时候函数参数的变量没有代码提示)
下一篇: Django框架下的form表单提交数据(及文件)获取的方法
咖啡咖_CoffCa
博客等级 码龄6年 116粉丝 58原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡咖_CoffCa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值