首页 > 其他分享 >【Unity】超级坦克大战(三)登录界面

【Unity】超级坦克大战(三)登录界面

时间:2022-12-13 14:36:28浏览次数:63  
标签:界面 登录 流程 Unity UI UILogin UIEdit


更新日期:2020年7月9日。
项目源码:在终章发布

索引

  • ​​本章最佳实践​​
  • ​​正式开始​​
  • ​​创建UI编辑场景​​
  • ​​创建登录界面UI实体​​
  • ​​创建登录界面UI逻辑类​​
  • ​​编写登录界面逻辑​​
  • ​​编写登录流程逻辑​​
  • ​​修改资源加载模式​​

本章最佳实践

  • ​​UI界面管理器​​。

正式开始

本章我们将完善登录流程,在登录流程,用户可以看到一个友好的登录界面,登录界面将仅由登录流程来负责打开和关闭。

创建UI编辑场景

我们创建一个新场景,名为UIEdit(Main场景关闭时记得保存),UIEdit的作用主要用来编辑UI实体。

【Unity】超级坦克大战(三)登录界面_HTFramework


我们在UIEdit中创建一个Canvas画布,并设置CanvasCanvas Scaler组件的属性如下(这是框架主环境的预制属性值,可以在框架主环境根节点下找到UI节点修改预设),并保存UIEdit场景:

【Unity】超级坦克大战(三)登录界面_游戏开发_02


然后我们选择菜单:Edit -> Project Settings…,并在Project Settings面板选中左侧的Editor选项:

【Unity】超级坦克大战(三)登录界面_HTFramework_03

我们将刚才创建的UIEdit场景使用鼠标拖到UI Environment选项里,之后,我们只需要通过鼠标双击任意UI类型的预制体,就会自动打开我们预设的UIEdit场景进行编辑:

【Unity】超级坦克大战(三)登录界面_UI_04

创建登录界面UI实体

首先,我们导入UI图片素材到项目中(我所使用的UI素材将包含在项目源码中)的Image/UI路径下:

【Unity】超级坦克大战(三)登录界面_HTFramework_05


然后在UIEdit场景的Canvas之下创建一个Panel,命名为UILogin,他即是我们的登录界面,我们将之拖拽到Prefab/UI路径下创建为预制体:

【Unity】超级坦克大战(三)登录界面_Unity_06


然后删除UIEdit场景中的UILogin,新建一个场景,也即是关闭UIEdit场景(不保存),之后我们双击UILogin的预制体,便可以使用UIEdit作为环境编辑预制体(推荐在这种模式编辑预制体,因为这种模式不允许改动上层环境,不需要解锁预制体的绑定,他会防止我们很多的误操作):

【Unity】超级坦克大战(三)登录界面_HTFramework_07


编辑我们的UILogin(登录界面)的过程我就省略了,总之大概完成后就是如下这样一个登录界面:

【Unity】超级坦克大战(三)登录界面_UI_08

创建登录界面UI逻辑类

我们将创建一个登录界面的UI逻辑类,使其指向上文的登录界面预制体(UILogin)。

按如下步骤创建登录界面UI逻辑类:

  • 在Project视图点击鼠标右键;
  • 选择菜单Create -> HTFramework -> C# UILogicResident Script(常驻UI类型);
  • 命名为UILogin,并将存储路径选择为Script/UI;
  • 点击保存按钮。

【Unity】超级坦克大战(三)登录界面_登录界面_09


在UILogin类中,我们修改其UIResource标记(表明此逻辑类持有的资源路径),我们将使用AssetBundle模式加载所有的资源,所以这里我们如下方式修改UIResource标记:

//第一个参数ui代表未来UILogin所指向的资源会被打入的AB包的名称
//第二个参数代表UILogin所指向的界面的资源路径(必须带后缀名)
[UIResource("ui", "Assets/Prefab/UI/UILogin.prefab", "null")]
public class UILogin : UILogicResident

编写登录界面逻辑

我们的登录界面可能是有史以来最简单的登录界面,他告诉了玩家接下来会进入的游戏的名字,然后有一个按钮点击就可以做这件事…仅此而已。

目前为止最合适的做法就是在UILogin类的OnInit中完成对登录按钮的事件绑定,毕竟,熟练掌握了MonoBehavior的那套流程,在这里同样适用:

/*【UILogin.cs】*/
/// <summary>
/// 初始化
/// </summary>
public override void OnInit()
{
base.OnInit();

UIEntity.FindChildren("Button_Play").rectTransform().AddEventListener(OnPlay);
UIEntity.FindChildren("Button_Quit").rectTransform().AddEventListener(OnQuit);
}

UIEntity是UILogin逻辑类在实例化之后将会持有的实体,本质上也即是上文中UI实体的克隆。

所以我们直接根据路径寻找到开始游戏退出游戏两个按钮,绑定事件即可:

【Unity】超级坦克大战(三)登录界面_Unity_10


对于这两个按钮的事件处理也非常简单,玩家选择开始游戏之后,我们直接将游戏流程切换至准备流程:

/*【UILogin.cs】*/
private void OnPlay()
{
Main.m_Procedure.SwitchProcedure<ProcedureReady>();
}

private void OnQuit()
{
Application.Quit();
}

编写登录流程逻辑

同时,我们在登录流程里面也要做一些事,当然也仅有一件事,那就是打开/关闭登录界面(进入登录流程时打开登录界面,离开登录流程时关闭登录界面,逻辑简单而清晰):

/*【ProcedureLogin.cs】*/
/// <summary>
/// 进入流程
/// </summary>
/// <param name="lastProcedure">上一个离开的流程</param>
public override void OnEnter(ProcedureBase lastProcedure)
{
Main.m_UI.OpenResidentUI<UILogin>();
}

/// <summary>
/// 离开流程
/// </summary>
/// <param name="nextProcedure">下一个进入的流程</param>
public override void OnLeave(ProcedureBase nextProcedure)
{
Main.m_UI.CloseUI<UILogin>();
}

修改资源加载模式

到这里直接运行Main场景就能看到登录界面打开了?理论上是这样的,但别忘了作为我们的第一个实体资源的UILogin类,所使用的资源加载模式是AssetBundle,所以你必须要确保Main场景的框架环境HTFramework/Resource上的加载模式已正确切换至AssetBundle模式:

【Unity】超级坦克大战(三)登录界面_登录界面_11


(小提示:这里的Manifest Name是个不可或缺的参数,当然我们目前可以置空,后续在项目发布时再来讲他该怎么填)然后我们运行Main场景,可以看到登录界面了,不过点击开始游戏按钮之后,整个画面又消失了只剩一片空白(why?因为开始游戏按钮将整个游戏流程切换至ProcedureReady准备流程,而离开ProcedureLogin登录流程之后,登录界面会被关闭,准备流程又没有做任何的事,所以画面消失了)

【Unity】超级坦克大战(三)登录界面_HTFramework_12


到这里,我相信你应该理清了创建登录界面到使其正常工作的过程,当然这个过程本来就简单到爆,接下来我们将进行准备流程的设计与开发,事实上他们其实都是在一个模子里刻东西。


标签:界面,登录,流程,Unity,UI,UILogin,UIEdit
From: https://blog.51cto.com/u_15911199/5934043

相关文章

  • 【Unity】超级坦克大战(一)搭建项目、导入框架、前期开发准备
    更新日期:2020年7月9日。项目源码:在终章发布免责声明:超级坦克大战使用的图片、音频等所有素材均有可能来自互联网,本专栏所有文章仅做学习和教程目的,不会将任何素材用于任何......
  • 【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之碎化特效
    更新日期:2020年5月13日。Github源码:​​​[点我获取源码]​​索引​​Fragmentization​​​​使用​​​​参数​​​​原理及算法​​​​图像展示​​Fragmentization设......
  • Unity UGUI实现分段式血条
    我们可以看到像英雄联盟等游戏里英雄头顶的血条显示并非是纯色的,而是根据血量的多少而显示一定量的格子,这种方式明显是比较友好、比较美观的,事实上我们的游戏里面也想实现这......
  • Unity Editor 自定义属于你的DefaultHeaderGUI
    DefaultHeaderGUI默认页眉GUI,是Unity编辑器中的所有对象被选中后在Inspector界面显示的页眉GUI,如下图红框区域:在这个区域加点自己的东西。finishedDefaultHeaderGUI只需要......
  • Unity UGUI图文混排(六) -- 超链接
    图文混排更新到超链接这儿,好像也差不多了,不过就在最后一点,博主也表现得相当不专业,直接整合了山中双木林同学提供的超链接的解决方案,博主甚至没来得及细看就直接复制了,但感觉......
  • Unity Hex Map技术测试
    HexMap常用于战棋的地形,最近有这方面的需求,做一个简单的测试,从画一个正六边形开始。0x00.正六边形如上图所示,两个圆,可以很规范的画一个六变形。外圆半径定为:​​publicco......
  • 【Unity】MeshEditor.Effects.Vortex 网格编辑器特效篇之涡流特效:开启你的不会Shader
    更新日期:2020年4月22日。Github源码:​​​[点我获取源码]​​索引​​前言​​​​扩展​​​​Vortex​​​​使用​​​​参数​​​​原理及算法​​​​图像展示​​前......
  • Unity角色残影特效
    残影特效在网上有很多例子,比如​​这个​​,我参考着自己整合了一下,算是整合了一个比较完整且特别简单易用的出来,只需要一个脚本挂上去无需任何设定就能用。这里只针对Skinne......
  • 【Unity】 HTFramework框架(三十四)框架实用特性
    更新日期:2020年11月6日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​框架实用特性​​​​LnkTools特性(快捷工具)​​​​CSDNBlogURL......
  • Unity 资源管理插件
    之所以写这个插件呢,就是为了方便整理项目中的资源文件,我记得之前好像也用了这么一个插件,但是也没去找,还是自己动手写一个吧,需要什么功能就看自己的需求。在项目的过程中呢,已......